Выделенный сервер базы данных с резкими скачками 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.

Другие вопросы по тегам