ICQCorp
Навигатор О проекте Новости Ссылки Установка ФАКи Скриншоты Благодарности Документы PostgreSQL Скачать Об авторе Гостевая книга Russian English Проект IServerd
Тюнинг сервера базы данных (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.

Описание  ] Установка  ] Спасибо(а)  ] Скрины  ] Постгрес  ] Скачать  ]
Новости  ] ФАКи  ] Автор  ] Ссылки  ] Документы  ] Отзывы  ]
Webmaster
А.В.Шутко