- Главная
- →
- Базы данных и системы хранения
Оптимизация high-contention write в PostgreSQL Базы данных и системы хранения
Имеет статус PostgreSQL major contributor, разработал следующие фичи СУБД PostgreSQL: команда CREATE ACCESS METHOD, generic WAL-интерфейс, lockfree Pin/UnpinBuffer, индексный поиск по регулярным выражениям в pg_trgm, сжатие и "быстрый поиск" по GIN-индексам, буферизованный алгоритм построения и улучшенное разбиение страниц для GiST-индексов, статистика и оценки селективности для массивов и диапазонных типов, улучшения в нечётком поиске строк, KNN-GiST с перепроверкой по heap. Защитил кандидатскую диссертацию, основанную на своём вкладе в развитие PostgreSQL.
Генеральный директор Postgres Professional Олег Бартунов имеет статус PostgreSQL Major Contributor. В 1982 г. он окончил физический факультет МГУ, работает в ГАИШ МГУ. Профессиональный астроном. Изначально использовал PostgreSQL для решения задач астрономии, с 1996 г. участвует в разработке СУБД и продвигает PostgreSQL в России. Создатель крупнейшего астрономического сайта astronet.ru. Занимался разработкой портала rambler.ru. Совместно с Фёдором Сигаевым разработал для PostgreSQL систему полнотекстового поиска, средства поддержки слабоструктурированных данных, индексные методы доступа, в том числе к пространственным данным, а также разнообразные расширения для СУБД.
Тезисы
Оптимизация производительности – дело тонкое. Улучшая производительность системы при одной нагрузке, можно запросто ухудшить её при другой нагрузке. Основным мерилом производительности PostgreSQL в среде его разработчиков является pgbench. Как следствие, PostgreSQL стал "pgbench-optimized DBMS" (СУБД, оптимизированная для pgbench).
Одна из особенностей pgbench – это использование равномерного распределения значений по умолчанию. Как известно, распределения в реальной жизни редко бывают равномерными. Поэтому в большинстве распространённых бенчмарков используются другие распределения, например, распределение Зипфа. Особенность этого распределения в том, что на малую часть данных приходится большая часть запросов. Как следствие, возникает high-contention write (высококонкурентная запись).
На распределении Зипфа мы нашли в постгресе много скрытых проблем, которыми раньше мало занимались. В частности, недостаточно хорошо на такой нагрузке работали row-level локи (как light-weight, так и heavy-weight), возникали проблемы, связанные с MVCC. В результате мы наблюдали ситуацию, что на определённых типах нагрузки постгрес отставал от других Open-Source баз.
Результатом данной работы стал целый ряд патчей, улучшающих поведение постгреса при high-contention write, и, конечно же, патч, добавляющий поддержку распределения Зипфа в pgbench. В докладе мы детально расскажем о внутренних проблемах постгреса при high-contention, а также о том, как мы их преодолеваем.