Всем известно о существовании временных таблиц в PostgreSQL, но как они устроены, и чем грозит их некорректное использование - не столь очевидно.
На примере одного известного приложения, активно и некорректно использующего временные таблицы, мы расскажем о создаваемой ими проблеме фрагментации памяти.
Что такое фрагментация памяти, по каким признакам можно определить ее наличие, чем она грозит, почему она возникает при активном использовании временных таблиц, и как мы пропатчили PostgreSQL, чтобы ее избежать - обо всем этом можно узнать из нашего доклада.
2. Участники
● Смолкин Григорий
● Петров Сергей
● Попов Николай
● Лубенникова Анастасия
● Федор Сигаев
● Пан Константин
● Жданюк Александр
● Елисеев Андрей
22. Что делать?
vm.min_free_kbytes:
+kswapd раньше начнет работу
+больше свободных страниц
-меньше единовременно доступной памяти
vm.extfrag_threshold = 500
Уровень фрагментации:
/sys/kernel/debug/extfrag_index
25. Временные таблицы
1. Привязаны к определенному серверному процессу
2. Не имеют механизма сбора статистики
3. Размещены в локальной памяти
4. Удаляются после отключения клиента
26. Почему это плохо
1. Фрагментация памяти(8KB = 2^1 * 4KB)
2. Тройная буферизация!!!
41. Orphan temp tables
Условия появления:
- Крэш постгреса(питание, oom killer, etc.)
- Не хватило памяти на локи
42. Orphan temp tables
Условия появления:
- Крэш постгреса(питание, oom killer, etc.)
- Не хватило памяти на локи
Симптомы:
43. Orphan temp tables
Условия появления:
- Крэш постгреса(питание, oom killer, etc.)
- Не хватило памяти на локи
Симптомы:
- out of shared memory
44. Orphan temp tables
Условия появления:
- Крэш постгреса(питание, oom killer, etc.)
- Не хватило памяти на локи
Симптомы:
- out of shared memory
- autovacuum «found orphan table»