Выделенный сервер базы данных с резкими скачками iowait
У нас есть выделенный сервер базы данных, на котором запущен PostgreSQL 8.3 на Linux Debian. База данных регулярно запрашивается для большого количества данных, в то время как обновления / вставки также происходят часто. Периодически база данных не отвечает в течение небольшой продолжительности (например, 10 секунд), а затем снова входит в нормальный поток выполнения.
Вверху я заметил, что в это время наблюдается всплеск айовитов, который длится до тех пор, пока база данных не отвечает. В это же время активируется pdflush. Так что моя идея заключается в том, что pdflush должен записывать данные из пространства кэшированной памяти обратно на диск на основе грязной страницы и соотношения фона. В остальное время, когда postgresql работает нормально, iowait не происходит, поскольку pdflush не активен. Значения для моего vm следующие:
dirty_background_ratio = 5
dirty_ratio = 10
dirty_expire_centisecs = 3000
Мое воспоминание:
MemTotal: 12403212 kB
MemFree: 1779684 kB
Buffers: 253284 kB
Cached: 9076132 kB
SwapCached: 0 kB
Active: 7298316 kB
Inactive: 2555240 kB
SwapTotal: 7815544 kB
SwapFree: 7814884 kB
Dirty: 1804 kB
Writeback: 0 kB
AnonPages: 495028 kB
Mapped: 3142164 kB
Slab: 280588 kB
SReclaimable: 265284 kB
SUnreclaim: 15304 kB
PageTables: 422980 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 14017148 kB
Committed_AS: 3890832 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 304188 kB
VmallocChunk: 34359433983 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Я думаю настроить время, в течение которого грязная страница остается в памяти (dirty_expire_centisecs), чтобы разделить пики iowait равномерно по времени (вызывать pdflush более регулярно, чтобы записывать меньшие порции данных на диск). Любое другое предлагаемое решение?
1 ответ
Пики ввода-вывода могут возникать, когда postgresql является контрольной точкой. Вы можете проверить это, зарегистрировав контрольные точки и посмотреть, совпадают ли они с отсутствием ответа сервера.
Если это так, тюнинг checkpoints_segments
а также checkpoint_completion_target
скорее всего поможет. Посмотрите совет вики об этом и документ о конфигурации WAL.