[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: DBMail



On 16.07.2007, at 12:17, Pechnikov Alexey wrote:


Раз не справляется, значит что-то криво. Схему таблицы и план выполнения покажите. Сколько одновременных пользователей и какой пул БД используете?

порядка 10-20 активных соединений,
пример плана выполнения запросов:

dbmail=# explain SELECT message_idnr+1 FROM dbmail_messages WHERE mailbox_idnr=37 ORDER BY message_idnr DESC LIMIT 1;
                                                    QUERY PLAN
------------------------------------------------------------------------ ------------------------------------------
 Limit  (cost=0.00..24.98 rows=1 width=8)
-> Index Scan Backward using dbmail_messages_pkey on dbmail_messages (cost=0.00..78500.38 rows=3142 width=8)
         Filter: (mailbox_idnr = 37)
(записей: 3)

dbmail=# explain SELECT message_idnr FROM dbmail_messages m JOIN dbmail_physmessage p ON m.physmessage_id=p.id JOIN dbmail_headervalue v on v.physmessage_id=p.id WHERE mailbox_idnr = 645 AND status IN (0,1) AND headervalue ILIKE '%charsettest%' ORDER BY message_idnr;
                                                   QUERY PLAN
------------------------------------------------------------------------ ----------------------------------------
 Sort  (cost=840683.09..840683.10 rows=1 width=8)
   Sort Key: m.message_idnr
   ->  Nested Loop  (cost=0.00..840683.08 rows=1 width=8)
         ->  Nested Loop  (cost=0.00..840679.66 rows=1 width=24)
-> Seq Scan on dbmail_headervalue v (cost=0.00..840669.16 rows=3 width=8)
                     Filter: (headervalue ~~* '%charsettest%'::text)
-> Index Scan using dbmail_messages_2 on dbmail_messages m (cost=0.00..3.49 rows=1 width=16)
                     Index Cond: (v.physmessage_id = m.physmessage_id)
Filter: ((mailbox_idnr = 645) AND (status = ANY ('{0,1}'::integer[]))) -> Index Scan using dbmail_physmessage_pkey on dbmail_physmessage p (cost=0.00..3.41 rows=1 width=8)
               Index Cond: (m.physmessage_id = p.id)
(записей: 11)

postgresql конечно 8.2 а не 8.3 :)
конфиг примерно такой:

max_connections = 500
shared_buffers = 512MB
work_mem = 256MB
maintenance_work_mem = 512MB
max_stack_depth = 5MB
max_fsm_pages = 204800
max_fsm_relations = 10000

vacuum_cost_delay = 50                  # 0-1000 milliseconds
bgwriter_delay = 200ms                  # 10-10000ms between rounds
bgwriter_lru_percent = 20.0 # 0-100% of LRU buffers scanned/round bgwriter_lru_maxpages = 100 # 0-1000 buffers max written/ round bgwriter_all_percent = 3 # 0-100% of all buffers scanned/round bgwriter_all_maxpages = 600 # 0-1000 buffers max written/ round fsync = on # turns forced synchronization on or off wal_sync_method = fdatasync # the default is the first option

enable_seqscan = on
random_page_cost = 1.5                  # same scale as above
effective_cache_size = 512MB

я не думаю что тут проблема в структуре / настройках бд - скорее в запросах :)


бд сервер - 2 х Intel(R) Xeon(TM) CPU 2.66GHz, 2Gb RAM, диски scsi

На таком железе терабайтную базу гонять можно.

Как обычно - смотря какие запросы :)
Впрочем меня всегда интересовал вопрос как они вообще живут эти террабайтный базы в реальной жизни.

Алексей Бещёков
proforg@maloletka.ru
+7 495 7853149



Attachment: smime.p7s
Description: S/MIME cryptographic signature


Reply to: