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 roundsbgwriter_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