Waits monitoring in PostgreSQL
-
Upload
ildus-kurbangaliev -
Category
Data & Analytics
-
view
436 -
download
0
Transcript of Waits monitoring in PostgreSQL
![Page 1: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/1.jpg)
Мониторинг ожиданий в PostgreSQLИльдус Курбангалиев
![Page 3: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/3.jpg)
Мониторинг ожиданий• отслеживание событий ожидания и построение их профиля (времени и количества) для идентификации "узких" мест в системе
![Page 4: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/4.jpg)
Где и зачем это нужно?
• высоконагруженные конкурентные системы
• enterprise базы данных должны иметь встроенный мониторинг. Oracle имеет wait интерфейс из коробки, это также упрощает миграцию
• информация по состоянию системы в любой момент времени в production системе с минимальным оверхедом
![Page 5: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/5.jpg)
Типы ожиданий
• IO• Сеть• Процессор• Локи• и другие...
![Page 6: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/6.jpg)
![Page 7: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/7.jpg)
Типы ожиданий в Postgres• Heavyweight locks• Lightweight locks (LWLocks)• Latch• Input / output• Network• Spinlocks• CPU
![Page 8: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/8.jpg)
Инструменты• Встроенные представления
(pg_locks, pg_stat_activity)• pg_stat_statements• pg_stat_kcache• SystemTap• perf• gdb
![Page 9: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/9.jpg)
Минусы• отдельную задачу выполняют хорошо, но не дают полную картину
• внешние по отношению к Postgres (perf)
• иногда требуют нетривиальных знаний от DBA (gdb)
![Page 10: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/10.jpg)
pg_stat_wait
• профайлинг• история• трассировка
![Page 11: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/11.jpg)
Профайлингb1=# SELECT * FROM pg_stat_wait_profile WHERE event_name = 'WALWriteLock' LIMIT 1;
-[ RECORD 1 ]------------ pid | 1804 class_id | 1 class_name | LWLocks event_id | 8 event_name | WALWriteLock wait_time | 8719 wait_count | 6
Процесс Postgres c pid=1804 провел в локе WALWriteLock wait_time микросекунд wait_count раз
![Page 12: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/12.jpg)
Время по классам ожиданий
![Page 13: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/13.jpg)
Наиболее частые LWLock• ProcArrayLock (создание снапшотов)
• WALWriteLock (запись WAL файлов)
• локи буферного менеджера
![Page 14: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/14.jpg)
Время по локам
BufferPartitionLock
![Page 15: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/15.jpg)
![Page 16: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/16.jpg)
Неизвестно время наступления событий (нужно привязывать ко времени выгрузки)
Точность измерения
Возможность строить графики в реальном времени
Плюсы-минусы профайлинга
![Page 17: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/17.jpg)
История событийb1=# SELECT * FROM pg_stat_wait_history; -[ RECORD 1 ]----------------------------- pid | 1809 sample_ts | 2015-10-29 04:58:53.85285-04 class_id | 3 class_name | Storage event_id | 0 event_name | SMGR_READ wait_time | 10299 p1 | 1663 p2 | 16384 p3 | 12214 p4 | 0 p5 | 1
![Page 18: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/18.jpg)
История событийb1=# SELECT * FROM pg_stat_wait_history; -[ RECORD 1 ]----------------------------- pid | 1809 sample_ts | 2015-10-29 04:58:53.85285-04 class_id | 3 class_name | Storage event_id | 0 event_name | SMGR_READ wait_time | 10299 p1 | 1663 p2 | 16384 p3 | 12214 p4 | 0 p5 | 1
Тип события
Oid базы данных и таблицы
![Page 19: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/19.jpg)
Много дополнительных параметров (для storage событий вплоть до блока записи)
Может пропускать события (сэмплинг)
Содержит время события
Содержит ограниченное количество событий
Плюсы-минусы истории
![Page 20: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/20.jpg)
Трассировкаterminal 1: $ psql b1
terminal 2: $ ps ax | grep '[p]ostgres.*b1.*' | awk '{print $1}' 1066
$ psql b1 > select pg_start_trace(1066, '/tmp/f.trace')
terminal 1: b1=# CREATE TABLE t1 AS SELECT i, i*10 AS i1 FROM generate_series(1,10) i; SELECT 10
![Page 21: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/21.jpg)
Вывод трассировкиterminal 2:$ tail -f /tmp/f.trace stop 2015-07-10 10:03:35.603458-04 Networkstart 2015-07-10 10:03:35.603464-04 Network READ 0 0 0 0 0stop 2015-07-10 10:03:44.099587-04 Networkstart 2015-07-10 10:03:44.100401-04 Storage READ 1663 16384 1259 2 0stop 2015-07-10 10:03:44.100424-04 Storagestart 2015-07-10 10:03:44.102549-04 Network WRITE 0 0 0 0 0stop 2015-07-10 10:03:44.102573-04 Networkstart 2015-07-10 10:03:44.102582-04 Network READ 0 0 0 0 0stop 2015-07-10 10:05:33.029975-04 Networkstart 2015-07-10 10:05:33.030205-04 Storage READ 1663 16384 2691 0 28stop 2015-07-10 10:05:33.030233-04 Storagestart 2015-07-10 10:05:33.030246-04 Storage READ 1663 16384 1255 0 50stop 2015-07-10 10:05:33.03026-04 Storage
![Page 22: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/22.jpg)
Видно все события по запросу
Точность значений
Большой оверхед
Использовать можно только на отдельных запросах
Плюсы-минусы трассировки
![Page 23: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/23.jpg)
Устройство pg_stat_wait
![Page 24: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/24.jpg)
Сбор истории
![Page 25: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/25.jpg)
OverheadТестовая конфигурация:
• Intel(R) Xeon(R) CPU [email protected], 24 cores
• RAM 24 GB• pgbench -S 500 ~ 1.6 Gb
Избегаем влияния дисковой подсистемы:• fsync off• tmpfs
![Page 26: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/26.jpg)
pg_stat_wait выключен
transaction type: SELECT only scaling factor: 500 query mode: simple number of clients: 96 number of threads: 4 duration: 300 s number of transactions: 39349816 latency average: 0.732 ms tps = 131130.859559 tps = 131153.752204
![Page 27: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/27.jpg)
pg_stat_wait включен
transaction type: SELECT only scaling factor: 500 query mode: simple number of clients: 96 number of threads: 4 duration: 300 s number of transactions: 39172607 latency average: 0.735 ms tps = 130574.626755 tps = 130600.767440
![Page 28: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/28.jpg)
Итоги теста• Минимальный оверхед - 0.42 %• Выключив историю, можно получить еще более низкий оверхед
• Тест синтетический, оверхед будет другим в реальных системах
![Page 29: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/29.jpg)
Продвижение в PostgreSQL
Целевая версия - PostgreSQL 9.6
Этапы:
• Рефакторинг легковесных локов
• Поле в pg_stat_activity
• Профайлинг в ядре Postgres
![Page 30: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/30.jpg)
Open source
• Ссылка на презентациюhttps://goo.gl/M005wM
• Ссылка на исходный кодhttps://goo.gl/M0GrFI
![Page 31: Waits monitoring in PostgreSQL](https://reader034.fdocuments.us/reader034/viewer/2022052211/58f2d22c1a28ab91188b4589/html5/thumbnails/31.jpg)
Вопросы?