SlideShare a Scribd company logo
PostgreSQL, фрагментация
памяти и временные таблицы
Смолкин Григорий
Петров Сергей
Участники
● Смолкин Григорий
● Петров Сергей
● Попов Николай
● Лубенникова Анастасия
● Федор Сигаев
● Пан Константин
● Жданюк Александр
● Елисеев Андрей
Стенд
Software
Centos 7.2
PostgreSQL 9.5.4 +1C patchset
1С Платформа 8.3.8
Cluster size: 350GB
Время: 10 часов
Hardware
4 x 8core Intel(R)
E7-8837 2.67GHz
64GB RAM
Fusion ioDrive
Первые результаты
Первые результаты
CPU LOAD
CPU: SYSTEM USER IDLE
Инструментарий
- mamonsu
- strace
- perf
- flamegraph
- atop+atopsar
Фрагментация памяти?
Memory Allocation
0
1
2
3
4
5
6
7
8
9
MAX ORDER
2^0 size block
2^3 size block
Memory Reclamation
MIN WATERMARK
LOW WATERMARK
HIGH WATERMARK
Free Pages
Time
Memory Reclamation
ignore
swapiness=0
MIN WATERMARK
LOW WATERMARK
HIGH WATERMARK
Free Pages
Time
Memory Reclamation
ignore
swapiness=0
kswapd_wakeup
MIN WATERMARK
LOW WATERMARK
HIGH WATERMARK
Free Pages
Time
Memory Reclamation
ignore
swappiness=0
kswapd_wakeup
sync_alloc
MIN WATERMARK
LOW WATERMARK
HIGH WATERMARK
Free Pages
Time
Memory Reclamation
ignore
swapiness=0
kswapd_wakeup
sync_alloc
kswapd_sleep
MIN WATERMARK
LOW WATERMARK
HIGH WATERMARK
Free Pages
Time
Дефрагментация памяти
Дефрагментация памяти
Дефрагментация памяти
ISOLATE_MIGRATEPAGES
ISOLATE_FREEPAGES_BLOCK
MIGRATE_PAGES
Дефрагментация памяти
ISOLATE_FREEPAGES_BLOCK
Что делать?
vm.min_free_kbytes:
+kswapd раньше начнет работу
+больше свободных страниц
-меньше единовременно доступной памяти
vm.extfrag_threshold = 500
Уровень фрагментации:
/sys/kernel/debug/extfrag_index
vm.min_free_kbytes=3%RAM
Резервирование места
open("base/13090/t2_1043562", O_RDWR) = 40
write(40, "00000000000000000"..., 8192) = 8192
write(40, "00000000000000000"..., 8192) = 8192
write(40, "00000000000000000"..., 8192) = 8192
write(40, "00000000000000000"..., 8192) = 8192
write(40, "00000000000000000"..., 8192) = 8192
write(40, "00000000000000000"..., 8192) = 8192
Временные таблицы
1. Привязаны к определенному серверному процессу
2. Не имеют механизма сбора статистики
3. Размещены в локальной памяти
4. Удаляются после отключения клиента
Почему это плохо
1. Фрагментация памяти(8KB = 2^1 * 4KB)
2. Тройная буферизация!!!
Буферизация
1 2 3 a b c
temp buffers
page cache
disk cache
disk
Буферизация
1 2 3 a b c
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
temp buffers
page cache
disk cache
disk
Буферизация
1 2 3 b c d e
0 0 0 0 0 0 0 a
0 0 0 0 0 a
0 0 0 0 0 0 0 a
temp buffers
page cache
disk cache
disk
Что делать? TMPFS?
1. Фрагментация памяти(8KB = 2^1 * 4KB)
2. Тройная буферизация!!!
2. Двойная буферизация :)
TMPFS
Мы
отправились в
отдел
разработки
Патч №1: Отключение резервирования
Автор: Анастасия Лубенникова
- отключает резервирование для временных таблиц
- индексы, FSM, VM по-прежнему пишутся на диск
- PostgresPro Enterprise
- PostgresPro Enterprise 1C
Буферизация
1 2 3 a b c
temp buffers
page cache
disk cache
disk
Буферизация
1 2 3 b c d e
a
a
a
temp buffers
page cache
disk cache
disk
I/O
Патч №1: Отключение резервирования
Осиротевшие временные таблицы
Orphan temp tables
Условия появления:
Orphan temp tables
Условия появления:
- Крэш постгреса(питание, oom killer, etc.)
Orphan temp tables
Условия появления:
- Крэш постгреса(питание, oom killer, etc.)
- Не хватило памяти на локи
Orphan temp tables
Условия появления:
- Крэш постгреса(питание, oom killer, etc.)
- Не хватило памяти на локи
Симптомы:
Orphan temp tables
Условия появления:
- Крэш постгреса(питание, oom killer, etc.)
- Не хватило памяти на локи
Симптомы:
- out of shared memory
Orphan temp tables
Условия появления:
- Крэш постгреса(питание, oom killer, etc.)
- Не хватило памяти на локи
Симптомы:
- out of shared memory
- autovacuum «found orphan table»
Orphan temp tables
Почему это плохо?
Orphan temp tables
Почему это плохо?
- Распухание каталога
Orphan temp tables
Почему это плохо?
- Распухание каталога
- Вакуум не удаляет осиротевшие таблицы
Orphan temp tables
Почему это плохо?
- Распухание каталога
- Вакуум не удаляет осиротевшие таблицы
- Вакуум спамит в лог
Orphan temp tables
Что делать?
Orphan temp tables
Что делать?
- Увеличить размер lock_table:
lock_table = max_locks_per_transaction * (max_conn +
max_pred_locks_per_transaction)
- Удалить схемы с временными таблицами:
DROP SCHEMA pg_temp_n CASCADE;
DROP SCHEMA pg_toast_temp_n CASCADE;
Мы
отправились в
отдел
разработки
Патч №2: Orphan tables clean up
Автор: Константин Пан
- корректная работа с локами
- keep_orphan_tables = boolean
- https://commitfest.postgresql.org/11/831/
- PostgresPro Enterprise
- PostgresPro Enterprise 1C
В советском PostgreSQL
Статистика
Определяет
План
online_analyze
Расширение, призванное решить проблему сбора статистики
для временных таблиц:
online_analyze
Расширение, призванное решить проблему сбора статистики
для временных таблиц:
● Принудительно выполняет ANALYZE
online_analyze
Расширение, призванное решить проблему сбора статистики
для временных таблиц:
● Принудительно выполняет ANALYZE
● Полагается на статистику stats collector`а
online_analyze
online_analyze
При большом кол-ве таблиц:
- Чтение файла со статистикой становится дорогим
online_analyze
online_analyze
При большом кол-ве таблиц:
- Чтение файла со статистикой становится дорогим
- Поиск по прочитанному хэшу становится дорогим
online_analyze
online_analyze
online_analyze
Отключить?
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Григорий Смолкин, Сергей Петров (Postgres Professional)
Патч №3: online_analyze
Автор: Фёдор Сигаев
1. Реже обращаемся за статистикой
2. WIP - хранить статистику в локальной памяти
Патч для online_analyze
online_analyze patch
CPU LOAD
CPU: IDLE SYSTEM USER
online_analyze patch
online_analyze off
CPU LOAD
CPU: IDLE SYSTEM USER
online_analyze off
Вопросы ?
Спасибо за внимание!
Контакты:
g.smolkin@postgrespro.ru
s.petrov@postgrespro.ru
Итерация

More Related Content

PPTX
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
PDF
Хранение данных на виниле / Константин Осипов (tarantool.org)
PDF
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PPTX
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
PPTX
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
PDF
Современная операционная система: что надо знать разработчику / Александр Кри...
PDF
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Хранение данных на виниле / Константин Осипов (tarantool.org)
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
Современная операционная система: что надо знать разработчику / Александр Кри...
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)

What's hot (20)

PDF
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
PDF
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
PDF
Профилирование кода на C/C++ в *nix системах
PPTX
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
PDF
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
PDF
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
PDF
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
PDF
Реализация восстановления после аварий / Сергей Бурладян (Avito)
PDF
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
PDF
RootConf 2015
PDF
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
PDF
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
PDF
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
PDF
Anton Turetckii "What does it take to build a host?"
PPTX
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
PDF
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
PDF
Константин Осипов
PDF
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
PDF
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Профилирование кода на C/C++ в *nix системах
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
RootConf 2015
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Anton Turetckii "What does it take to build a host?"
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Константин Осипов
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Ad

Viewers also liked (20)

PDF
Новые возможности полнотекстового поиска в PostgreSQL / Олег Бартунов (Postgr...
PDF
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PDF
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...
PDF
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
PDF
Высокопроизводительный инференс глубоких сетей на GPU с помощью TensorRT / Ма...
PDF
Non-Relational Postgres / Bruce Momjian (EnterpriseDB)
PDF
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
PPTX
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
PDF
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
PPTX
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
PPTX
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
PPTX
Архитектура хранения и отдачи фотографий в Badoo / Артем Денисов (Badoo)
PPTX
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
PDF
События, шины и интеграция данных в непростом мире микросервисов / Валентин Г...
PDF
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
PDF
2015.07.16 Способы диагностики PostgreSQL
PPTX
Новые возможности Windows Server 2016 и его преимущества для решения Ваших би...
PDF
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
PDF
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
PDF
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Новые возможности полнотекстового поиска в PostgreSQL / Олег Бартунов (Postgr...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Post...
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
Высокопроизводительный инференс глубоких сетей на GPU с помощью TensorRT / Ма...
Non-Relational Postgres / Bruce Momjian (EnterpriseDB)
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Архитектура хранения и отдачи фотографий в Badoo / Артем Денисов (Badoo)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
События, шины и интеграция данных в непростом мире микросервисов / Валентин Г...
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
2015.07.16 Способы диагностики PostgreSQL
Новые возможности Windows Server 2016 и его преимущества для решения Ваших би...
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Ad

Similar to Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Григорий Смолкин, Сергей Петров (Postgres Professional) (20)

PDF
Вячеслав Бирюков - Как Linux работает с памятью
PDF
Как Linux работает с памятью — Вячеслав Бирюков
PDF
Percona XtraBackup: экспертные возможности (Алексей Копытов)
PPTX
MyRocks: табличный движок для MySQL на основе RocksDB
PPTX
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
PDF
Поговорим про память
ODP
VDS: обнаружение, выявление причин и устранение проблемных ситуаций. Диагнос...
PDF
Нагрузочное тестирование с помощью Яндекс.Танка
PPT
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
PPT
Секреты сборки мусора в Java
PPT
Секреты сборки мусора в Java (Алексей Рагозин)
PPTX
High Load
PPTX
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
PDF
Реактивный раздатчик ok.ru/music
PDF
Обработка спйсмоданных: возможности оптимизации ИТ-инфраструктуры
PPT
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
PPT
Низкоуровневая Оптимизация (Андрей Аксенов)
PPT
PDF
Другая виртуализация
PDF
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)
Вячеслав Бирюков - Как Linux работает с памятью
Как Linux работает с памятью — Вячеслав Бирюков
Percona XtraBackup: экспертные возможности (Алексей Копытов)
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
Поговорим про память
VDS: обнаружение, выявление причин и устранение проблемных ситуаций. Диагнос...
Нагрузочное тестирование с помощью Яндекс.Танка
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Секреты сборки мусора в Java
Секреты сборки мусора в Java (Алексей Рагозин)
High Load
Погружение в виртуальную память и большие страницы / Константин Новаковский (...
Реактивный раздатчик ok.ru/music
Обработка спйсмоданных: возможности оптимизации ИТ-инфраструктуры
Low-level C/C++ Optimization by Anrew Axenov (Sphinx)
Низкоуровневая Оптимизация (Андрей Аксенов)
Другая виртуализация
Асинхронная репликация без цензуры, Олег Царёв (Mail.ru Group)

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
PDF
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)

Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Григорий Смолкин, Сергей Петров (Postgres Professional)