|
|
Тюнинг сервера базы данных (PostgreSQL RDBMS):
Иногда при запуске сервера postgresql на достаточно слабой машине
работа iserverd на протоколах V3/V5 становится нестабильной. Есть несколько способов для
ускорения обработки запросов.
- Первое что надо сделать - это отключить вызовы fsync(), приводящие к сбросу данных
из кэша на диск после каждой транзакции. Это существенно ускорит работу. Отключение
fsync естественно ухудшает стойкость базы к сбоям оборудования и ПО, однако
повреждение часто изменяемых таблиц вроде online_contacts, online_users некритично.
Пользовательские же данные из талицы users_info_ext изменяются сравнительно редко.
В любом случае рекомендуется делать резервные копии базы командами
db_manage dump users_db users.txt; gzip users.txt. Отключить
вызов fsync() можно в конфигурационном файле postgresql.conf, который находится в
каталоге баз данных. Просто раскомментируйте опцию fsync и установите ее равной false
(fsync = false)
- Второй способ увеличить число shared buffers. Shared buffers находятся в разделяемой
памяти и размер каждого буфера составляет 8 килобайт. В операционной системе есть
ограничение на размер разделяемой памяти и это ограничивает число shared buffers сверху.
По умолчанию их должно быть в два раза больше максимального числа соединений. Но лучше
если их будет больше в 4-6 раз. Тут уже решать вам. Число разделяемых буферов
контролируется параметром shared_buffers конфигурационного
файла postgresql.conf
- Необходимо увеличить размер памяти выделяемой для команды вакуумизации. По умолчанию
выделяется 8192 килобайта. Но на высоконагруженном сервере с большими таблицами это
значение стоит увеличить, чтобы вакуумизация проходила быстрее.
- Следует также увеличить размер дискового кэша в настройках оптимизатора. Это делается
параметром effective_cache_size.
- Необходимо несколько раз в день (в зависимости от нагрузки) проводить вакуумизацию баз.
Вакуумизация проводится с параметрами "full" и "analyze". Полная (full) вакуумизация
уменьшает реальный размер базы данных на диске и это естественно ускоряет ее работу.
Вакуумизация с анализом (analyze) производит сбор статистических данных, которые в
дальнейшем используются оптимизатором сервера баз данных для ускорения работы.
Вакуумизацию можно производить двумя способами: SQL запросом VACUUM
FULL ANALYZE из интерактивного монитора psql либо командой
vacuumdb -d users_db -f -z Примеры записей в crontab:
15 08,13,18 * * * vacuumdb -d users_db -f -z -q # vacuum full
00,30 * * * * vacuumdb -d users_db -z -q # vacuum analyze
- Есть мнение, что стоит включить принудительный поиск по индексу. Этого делать не стоит.
Поиск по индексу используется по умолчанию, однако на небольших таблицах поиск перебором
эффективнее и быстрее индексного. Оптимизатор сервера баз данных принимает решение
об использовании или неиспользовании индекса при поиске на основании собранной статистики.
Статистика расчитывается командой vacuum analyze (см. предыдущий пункт)
Если вы запускаете postgresql на операционной системе FreeBSD, то рекомендуется увеличить
значения некоторых параметров ядра. В частности это касается числа семафоров, размера
разделяемой памяти. Вот часть конфигурационного файла ядра:
options SYSVSHM
options SHMMAXPGS=4096
options SHMMAX="(SHMMAXPGS*PAGE_SIZE+1)"
options SHMMIN=2
options SHMMNI=256
options SHMSEG=256
options SYSVSEM
options SEMMAP=512
options SEMMNI=512
options SEMMNS=1024
options SEMMNU=512
options SEMMSL=256
options SEMOPM=256
options SEMUME=64
Крайне желательно для FreeBSD установить переменную ядра
kern.ipc.shm_use_phys=1 Это запретит свопинг разделяемой памяти,
что очень благоприятно скажется на работе RDBMS.
|