LINUX.ORG.RU

Настройка Postgres для быстрого SSD

 ,


0

3

Взял у Селектела в тест сервак для тестирования хваленого SSD Intel P4800X.

Написал тест, который в многопотоке делает INSERTы в PostgreSQL по одному (не batch). Получил прирост производительности относительно HDD RAID10 примерно в два раза. Тесты чтения будут позже.

Как выжать все соки из SSD с помощью Postgres? iostat -dx показывает утилизацию SSD ~20%. Предполагаю что проблема с конфигом PostgreSQL,

★★
Ответ на: комментарий от NiTr0

Ээээ, в случае PostgreSQL это не так, так как это всего навсего СУБД и его целью не является полная замена ОС. Возможно, я отстал от жизни, но ещё пару-тройку лет по-моему было именно так.

Evgueni ★★★★★ ()
Ответ на: комментарий от NiTr0

Я не понял ремарки. O_DIRECT/fsync делается по окончанию транзакции для записи изменений и единственный способ ускорить это «в конфиге» это отключить её, что смысла действительно не имеет.

Evgueni ★★★★★ ()
Ответ на: комментарий от drsm

что в логах? в один поток инсертишь?

Пробовал 100, 200, 500, 2000 потоков. Ситуация не сильно отличается. При 2000 потоках нагрузка на диск уменьшается. Ни один поток не упирается в 100%, cpu idle от 20-30%.

exst ★★ ()

Да ничего ты из постгреса не вытащишь, проходили уже. Он сам по себе такой, поломанный при проектировании, не может утилизировать высокопроизводительный диск на 100%.

Чтобы постгрес получал все преимущества быстрых дисков его надо перепроектировать с нуля.

anonymous ()

Учитывая большинство рекомендаций по использованию SSD, оптимизация будет сведена к созданию пользователя с правами read-only и работой только из-под него.

te111011010 ()
Ответ на: комментарий от GladAlex

А как, если не секрет? Статья на хабре будет? ;)

Запустил fio с конфигом:

[readtest]
blocksize=4k
filename=/dev/nvme0n1
rw=randread
direct=1
buffered=0
ioengine=libaio
iodepth=32
[writetest]
blocksize=4k
filename=/dev/nvme0n1
rw=randwrite
direct=1
buffered=0
ioengine=libaio
iodepth=32

Только чтение или только запись также утилизируют накопитель на 100%. Получается около 440kIOPS, что соответствует заявлению производителя. Если сменить libaio на что-то другое (sync, psync, mmap), производительность падает в разы, при этом утилизация близка к 100%.

Также удалось утилизировать диск на 90% в тесте PostgreSQL с двумя чтениями из двух таблиц и записью во вторую таблицу.

Была идея написать статью на хабре, но материала для мало. Все тезисы уместились в эту тему на форуме.

exst ★★ ()