Доброго времени суток.Первоначальные данные:
OC - FreeBSD 6.1 /AMD 3200+/ 1G RAM/ SATA HDD.
PostgreSQL 8.1
БД ~ 12G (40млн rows)
postgresql.conf:max_connections = 180
shared_buffers = 4000
temp_buffers = 1000
work_mem = 850000
max_fsm_pages = 407000
fsync = off
effective_cache_size = 102400
stats_start_collector = on
stats_command_string = on
stats_row_level = on
sort_mem = 5024 (опции небыло. Добавил, БД приняла.)
Возник следующий вопрос:
Средний SELECT выполняеться достаточно быстро.
Но если SELECT содержит ORDER BY то длиться он ~15 мин.
Если UNION + ORDER + COUNT то все 10 часов.Больше всего меня поразили показатели нагрузок в момент такого запроса:
IOSTAT ~ 2.00 MB/s (Вовремя REINDEX - 50MB/s)
SWAP < 1Mb
CPU Бездействие ~ 90%
RAM Свободно ~ 40%Чего ему не хватает ?
P.S. Ошибок в логах нет.
>Доброго времени суток.
>
> Первоначальные данные:
> OC - FreeBSD 6.1 /AMD 3200+/ 1G RAM/ SATA HDD.
> PostgreSQL 8.1
> БД ~ 12G (40млн rows)
>
> postgresql.conf:
>
> max_connections = 180
> shared_buffers = 4000
> temp_buffers = 1000
> work_mem = 850000
> max_fsm_pages = 407000
> fsync = off
> effective_cache_size = 102400
> stats_start_collector = on
> stats_command_string = on
> stats_row_level = on
> sort_mem = 5024 (опции небыло. Добавил, БД приняла.)
>
>Возник следующий вопрос:
> Средний SELECT выполняеться достаточно быстро.
> Но если SELECT содержит ORDER BY то длиться он ~15 мин.
>
> Если UNION + ORDER + COUNT то все 10 часов.
>
>
> Больше всего меня поразили показатели нагрузок в момент такого запроса:
> IOSTAT ~ 2.00 MB/s (Вовремя REINDEX - 50MB/s)
> SWAP < 1Mb
> CPU Бездействие ~ 90%
> RAM Свободно ~ 40%
>
> Чего ему не хватает ?
>
> P.S. Ошибок в логах нет.
>
1. Pokazi sam zapros.
2. Pokazi strukturu tablici + indexi dla tablici.
3. Pokazi 4to govorit EXPLAIN dla dannogo zaprosa.
4. VACUUM zapuskajetca (hotja teoreti4eski dolzen rabotat autovacuum dla versii 8.1
no po umol4aniju on viklu4en)
5. Pokazi SHOW ALL 4to vivel.
>> Но если SELECT содержит ORDER BY то длиться он ~15 мин.
>>
>> Если UNION + ORDER + COUNT то все 10 часов.они едят мнтого - почему - мортировки потому чсто
>Доброго времени суток.
>
> Первоначальные данные:
> OC - FreeBSD 6.1 /AMD 3200+/ 1G RAM/ SATA HDD.
> PostgreSQL 8.1
> БД ~ 12G (40млн rows)
>
> postgresql.conf:
>
> max_connections = 180
> shared_buffers = 4000
> temp_buffers = 1000
> work_mem = 850000
> max_fsm_pages = 407000
> fsync = off
> effective_cache_size = 102400
> stats_start_collector = on
> stats_command_string = on
> stats_row_level = on
> sort_mem = 5024 (опции небыло. Добавил, БД приняла.)
>
>Возник следующий вопрос:
> Средний SELECT выполняеться достаточно быстро.
> Но если SELECT содержит ORDER BY то длиться он ~15 мин.
>
> Если UNION + ORDER + COUNT то все 10 часов.
>
>
> Больше всего меня поразили показатели нагрузок в момент такого запроса:
> IOSTAT ~ 2.00 MB/s (Вовремя REINDEX - 50MB/s)
> SWAP < 1Mb
> CPU Бездействие ~ 90%
> RAM Свободно ~ 40%
>
> Чего ему не хватает ?
>
> P.S. Ошибок в логах нет.
>Оперативной памяти конечно не хватает!)))добавь хотяб гиг и увидишь результат!
памяти конечно маловато, но я в первую очередь ковырят бы индексы, а вообчето надо как-то по подробнее.
при таком запросе с другой консоли сделай: top
увидешь, что не хватает ram -a
потом еще покажи настройки ядра для shared_buffers.
> work_mem = 850000
> sort_mem = 5024 (опции небыло. Добавил, БД приняла.)Это одно и то-же. sort_mem - название из предыдущих версий, сохранённое видимо, для совместимости.