Опция shared_buffers в PostgreSQL
У меня есть сервер с 4 ГБ оперативной памяти и PostgreSQL 9.0.3 на Centos 5. Я использую pgbench
а также pgbench-tools
измерить производительность, используя два pgbench-tools
запросы: select
а также tpc-b
,
С настройками по умолчанию postgresql.conf
и используя запрос выбора, я получаю следующие результаты:
Шкала: 1, 10, 100, 1000.
Количество транзакций в секунду: 10000, 8800, 7500, 100.
(количество записей таблицы в масштабе *100000)
Я увеличил опцию shared_buffer
до 256 МБ (ранее было 32 МБ), и я получаю следующие результаты:
Шкала: 1, 10, 100, 1000.
Транзакций в секунду: 10000, 8000, 3200, 30
Почему производительность настолько низкая по сравнению с первым тестом, когда шкала составляет 100 или более во втором тесте? Единственное, что я сделал, это увеличил память.
1 ответ
Единственное, что последовательно делает pgbench медленнее, когда вы увеличиваете shared_buffers, это опция отладки, называемая проверкой утверждений. Если вы делаете это в psql:
show debug_assertions;
И это так, ваша сборка имеет эту проблему, и ожидаемые результаты ожидаются. Вам нужна новая установка, которая не включена для отладки утверждений, чтобы все прошло.
В противном случае, если бы вы не делали все это более одного раза, я бы не был уверен, что причиной здесь было изменение shared_buffers. Например, если автоочистка запускается в момент запуска вашей крупномасштабной базы данных, это замедлит результаты теста. Контрольная точка, начинающаяся с начала теста, тоже будет. Отключите автоочистку, чтобы исключить ее из теста, и включите log_checkpoints, чтобы увидеть, мешает ли она.
Третья возможность, и я почти уверен, что вы в какой-то степени страдаете этим, заключается в том, что перемещение по диску может привести к снижению результатов на 50%. Диски на своих первых частях примерно в два раза быстрее, чем на более поздних, и при повторном запуске pgbench данные будут перемещаться на более медленные части по мере продвижения. В итоге я перестраиваю всю файловую систему, чтобы получить повторяемые результаты, единственный способ убедиться, что вы запускаете одну и ту же точку на диске. Это не влияет на результаты в меньших масштабах, потому что все они помещаются в ОЗУ.
Когда я вижу изменение производительности после прикосновения к параметру конфигурации, я всегда снова пробую исходную конфигурацию, чтобы убедиться в этом. Я часто удивляюсь, обнаруживая, что тест становится медленнее при каждом запуске, и разница в скорости на диске является одним из источников этой проблемы.