У меня есть постоянный диск SSD емкостью 500 ГБ в us-central1 на настраиваемой виртуальной машине (4 виртуальных процессора, 18 ГБ памяти)
Он использовался для PostgreSQL 10. (Cloud SQL нельзя использовать по некоторым причинам: нет возможности выполнить миграцию без разумного времени простоя и т. Д.)
GCP обещал 15k IOPS для этого диска, но на самом деле это 5k. процессы postgres зависли (до 50%) в состоянии IOWait
Некоторые подробности: пики - это задания по обработке данных, выполняемые на сервере приложений (не на сервере БД), которые запрашивают большой объем данных из postgresql по первичному ключу.
Что не так с дисками GCP, почему диски SSD такие медленные?
iostat 10
avg-cpu: %user %nice %system %iowait %steal %idle
13.06 0.00 10.84 37.13 0.00 38.97
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.00 0.00 0.00 0 0
sda 5.00 27.20 24.00 272 240
sdb 5310.90 41790.00 883.60 417900 8836
avg-cpu: %user %nice %system %iowait %steal %idle
13.46 0.00 10.83 35.85 0.00 39.86
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.00 0.00 0.00 0 0
sda 5.00 0.80 34.00 8 340
sdb 4962.40 38276.00 1578.40 382760 15784
UPD: Обновленная ВМ, но безуспешно:
Я создал одну виртуальную машину в us-central1-a со специальной настройкой (4 виртуальных процессора, 18 ГБ памяти) и SSD на 500 ГБ и запустил фио и нашел iops=14995
так что я согласен с @ Джон Маховальд это не диск, который ограничивал iops
Альтернативная теория: узкое место - не диск.
iowait - обычное состояние для базы данных под нагрузкой, даже твердотельные накопители работают медленнее по сравнению с DRAM. Однако этот верхний вывод также показывает довольно много циклов простоя и спящих процессов. Больше, чем я ожидал, потому что проблема связана исключительно с диском.
Найдите предел диска независимо от СУБД. Используйте синтетический генератор ввода-вывода, например fio
на аналогичном экземпляре попробовать на 15k IOPS. Если заявленная производительность достижима, узкое место находится в другом месте.
Изучите инструменты анализа производительности базы данных, чтобы получить более глубокое представление о том, что происходит и что ждет. Анализ плана запроса покажет, что он пытается сделать. Собранная статистика точно скажет, чего ждал сервер, и может быть показано в хорошие визуализации. Ожидание клиента, блокировок или чего-то еще может ограничить пропускную способность ниже теоретической способности диска.