Назад | Перейти на главную страницу

Почему постоянные SSD-диски GCP такие медленные?

У меня есть постоянный диск 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. Если заявленная производительность достижима, узкое место находится в другом месте.

Изучите инструменты анализа производительности базы данных, чтобы получить более глубокое представление о том, что происходит и что ждет. Анализ плана запроса покажет, что он пытается сделать. Собранная статистика точно скажет, чего ждал сервер, и может быть показано в хорошие визуализации. Ожидание клиента, блокировок или чего-то еще может ограничить пропускную способность ниже теоретической способности диска.