Написать в техподдержку Позвонить нам
Админпанель Выход

Содержание статьи:

    PostgreSQL: disk performance

    Введение

    Статья приводит данные о производительности виртуальных машин с предустановленной БД PostgreSQL на разных типах дисков.

    Тестирование производительности проводилось на следующей конфигурации виртуальной машины:

    • объем диска 100 ГБ 
    • конфигурация Standard-4-8 (каждая нода кластера 4 ядра и 8 ГБ RAM).

    Глоссарий:

    Термин

    Описание

    pgbench Встроенная в PostgreSQL утилита для benchmark СУБД
    TPS Transactions per second (метрики, которые выдает pgbench)
    iowait Время (в процентах) пока CPU ожидал окончания io request
    iostat Утилита в Linux для получения текущего среза по IO устройств
    atop Утилита для сбора всех показателей производительности системы

    Производительность дисков

    Геораспределенные диски

    На данный момент нельзя создать DBaaS (ВМ с предустановленной СУБД) на дисках такого типа. Они не рекомендуются к использованию.

    HDD Ceph диски

    Это диски из зоны доступности Москва-Восток (dp1) и Москва-Север (ms1). Диски данного типа не дают удовлетворительной производительности, поэтому мы не рекомендуем использовать такой тип дисков для создания виртуальных машин в DBaaS, особенно для прод-контура (окружения с реальными данными и реальными пользователями). 

    Pgbench показывает значение TPS меньше 1, при этом диск утилизирован на 100%. iowait для CPU держится стабильно 50-90%. 

    Рекомендуемая конфигурация ВМ при выборе этого типа дисков

    Не выше, чем Basic 1-2 (1 CPU, 2 Gb RAM).


    Вывод iostat:

    SSD Ceph диски

    Это диски зон доступности dp1-ssd и ko1-ssd. 100 GB диск дает лимит в 3000 IO на чтение и 1500 IO на запись (QoS от Cinder).

    Тестирование дисков этого типа показывает удовлетворительную производительность. Рекомендуем к использованию для тестовых и dev-контуров.

    Рекомендуемая конфигурация ВМ при выборе этого типа дисков

    Не выше, чем Basic 2-4 (2 CPU, 4 Gb RAM).

    Чтение по pgbench:

    transaction type: <builtin: select only>

    scaling factor: 1000

    query mode: simple

    number of clients: 95

    number of threads: 8

    duration: 180 s

    number of transactions actually processed: 333235

    latency average =" 51.381 "ms

    tps =" 1848.934518 (including "connections establishing)

    tps =" 1849.269173 (excluding "connections establishing)

    transaction type: <builtin: select only>

    scaling factor: 1000

    query mode: simple

    number of clients: 95

    number of threads: 8

    duration: 600 s

    number of transactions actually processed: 1293395

    latency average =" 44.089 "ms

    tps =" 2154.740370 (including "connections establishing)

    tps =" 2154.835152 (excluding "connections establishing)

    При бенче на чтение atop показывает средний iowait 70-80%. Полезная нагрузка на CPU 20-25%, PG потребляет около 4 ГБ RAM. Читаем 3000 IO в секунду (упираемся в qos), 25 КБ один IO в среднем, в итоге скорость около 70 МБ/сек. Запись почти не задействована.

    Лог pgbench: pgbench_ssd_600_read

    Чтение-запись:

    transaction type: <builtin: TPC-B (sort of)>

    scaling factor: 1000

    query mode: simple

    number of clients: 95

    number of threads: 8

    duration: 180 s

    number of transactions actually processed: 73299

    latency average =" 233.650 "ms

    tps =" 406.590560 (including "connections establishing)

    tps =" 406.650782 (excluding "connections establishing)

    transaction type: <builtin: TPC-B (sort of)>

    scaling factor: 1000

    query mode: simple

    number of clients: 95

    number of threads: 8

    duration: 600 s

    number of transactions actually processed: 219609

    latency average =" 259.837 "ms

    tps =" 365.613804 (including "connections establishing)

    tps =" 365.630913 (excluding "connections establishing)

    Здесь очень скромные цифры, но вполне приемлемые там, где производительность не так важна. iowait в пределах 25-30%, полезная нагрузка составляет 10-15%.

    Чтение в среднем составляет 600 IO в секунду и 20-30 МБ, запись в пределах от 100 до 1500 IO и 10-25 МБ в сек.

    Лог pgbench: pgbench_ssd_600_rw

    High-iops диски

    На данный момент диски High-iops сегмента доступны для выбора только после запроса в техническую поддержку. После одобрения запроса в Вашем интерфейсе панели управления MCS появятся варианты дисков dp1-high-iops и ko1-high-iops. Диск в 100 GB дает лимиты 10000 IO на чтение и 5000 на запись.

    Рекомендуемая конфигурация ВМ при выборе этого типа дисков

    Любая на Ваш выбор.

    Чтение:

    transaction type: <builtin: select only>

    scaling factor: 1000

    query mode: simple

    number of clients: 95

    number of threads: 8

    duration: 180 s

    number of transactions actually processed: 1205668

    latency average =" 14.206 "ms

    tps =" 6687.481442 (including "connections establishing)

    tps =" 6688.375636 (excluding "connections establishing)

    transaction type: <builtin: select only>

    scaling factor: 1000

    query mode: simple

    number of clients: 95

    number of threads: 8

    duration: 600 s

    number of transactions actually processed: 4073739

    latency average =" 13.999 "ms

    tps =" 6786.034529 (including "connections establishing)

    tps =" 6786.416431 (excluding "connections establishing)

    При тестировании на чтение atop показывает средний iowait 35%. Полезная нагрузка на CPU около 50%, PG потребляет около 4 ГБ RAM. Чтение составляет 10000 IO в секунду (лимит по qos), скорость около 200-230 МБ/сек. Запись в данном случае не зависит от qos.

    Лог pgbench: pgbench_highiops_600_rw


    Также см. статью Типы дисков и SLA.

    Полезна ли была эта статья?