F.32. pg_stat_statements â оÑÑлеживание ÑÑаÑиÑÑики планиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ SQL-опеÑаÑоÑов #
ÐодÑÐ»Ñ pg_stat_statements пÑедоÑÑавлÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¾ÑÑлеживаÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿Ð»Ð°Ð½Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑеÑвеÑом вÑеÑ
опеÑаÑоÑов SQL.
ÐÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð½Ñжно загÑÑжаÑÑ, добавив pg_stat_statements в shared_preload_libraries в Ñайле postgresql.conf, Ñак как ÐµÐ¼Ñ ÑÑебÑеÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑÐ½Ð°Ñ ÑазделÑÐµÐ¼Ð°Ñ Ð¿Ð°Ð¼ÑÑÑ. ÐÑо знаÑиÑ, ÑÑо Ð´Ð»Ñ Ð·Ð°Ð³ÑÑзки или вÑгÑÑзки модÑÐ»Ñ Ð½ÐµÐ¾Ð±Ñ
одимо пеÑезапÑÑÑиÑÑ ÑеÑвеÑ. ÐÑоме Ñого, Ð´Ð»Ñ ÑÑнкÑиониÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÑого модÑÐ»Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑÑиÑлÑÑÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑÑ Ð·Ð°Ð¿ÑоÑов, ÑÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð°Ð²ÑомаÑиÑеÑки, когда Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа compute_query_id задаÑÑÑÑ Ð·Ð½Ð°Ñение auto или on или же загÑÑжаеÑÑÑ ÑÑоÑонний модÑлÑ, вÑÑиÑлÑÑÑий иденÑиÑикаÑоÑÑ Ð·Ð°Ð¿ÑоÑов.
Ðогда модÑÐ»Ñ pg_stat_statements акÑивен, он оÑÑÐ»ÐµÐ¶Ð¸Ð²Ð°ÐµÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿Ð¾ вÑем базам даннÑÑ
на ÑеÑвеÑе. ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¸ обÑабоÑки ÑÑой ÑÑаÑиÑÑики модÑÐ»Ñ pg_stat_statements пÑедоÑÑавлÑÐµÑ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ pg_stat_statements и pg_stat_statements_info, а Ñакже вÑпомогаÑелÑнÑе ÑÑнкÑии pg_stat_statements_reset и pg_stat_statements. ÐÑи обÑекÑÑ Ð½Ðµ доÑÑÑÐ¿Ð½Ñ Ð³Ð»Ð¾Ð±Ð°Ð»Ñно, но иÑ
можно ÑÑÑановиÑÑ Ð² опÑеделÑнной базе даннÑÑ
, вÑполнив ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ CREATE EXTENSION pg_stat_statements.
F.32.1. ÐÑедÑÑавление pg_stat_statements #
СÑаÑиÑÑика, ÑобиÑÐ°ÐµÐ¼Ð°Ñ Ð¼Ð¾Ð´Ñлем, вÑдаÑÑÑÑ ÑеÑез пÑедÑÑавление Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ pg_stat_statements. ÐÑо пÑедÑÑавление ÑодеÑÐ¶Ð¸Ñ Ð¾ÑделÑнÑе ÑÑÑоки Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ комбинаÑии иденÑиÑикаÑоÑа Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, иденÑиÑикаÑоÑа полÑзоваÑелÑ, иденÑиÑикаÑоÑа запÑоÑа и пÑизнака веÑÑ
него ÑÑÐ¾Ð²Ð½Ñ (но в колиÑеÑÑве, не пÑевÑÑаÑÑем макÑималÑное ÑиÑло ÑазлиÑнÑÑ
опеÑаÑоÑов, коÑоÑÑе Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑÑлеживаÑÑ Ð¼Ð¾Ð´ÑлÑ). СÑолбÑÑ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð² ТаблиÑе F.22.
ТаблиÑа F.22. СÑолбÑÑ pg_stat_statements
Тип ÑÑолбÑа ÐпиÑание |
|---|
OID полÑзоваÑелÑ, вÑполнÑвÑего опеÑаÑÐ¾Ñ |
OID Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , в коÑоÑой вÑполнÑлÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ |
True, еÑли даннÑй запÑÐ¾Ñ Ð²ÑполнÑлÑÑ Ð½Ð° веÑÑ
нем ÑÑовне (вÑегда true, еÑли Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа |
ХеÑ-код Ð´Ð»Ñ Ð²ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²ÑÑ Ð½Ð¾ÑмализованнÑÑ Ð·Ð°Ð¿ÑоÑов |
ТекÑÑ, пÑедÑÑавлÑÑÑий опеÑаÑÐ¾Ñ |
ЧиÑло опеÑаÑий планиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÑого опеÑаÑоÑа (еÑли вклÑÑÑн паÑамеÑÑ |
ÐбÑее вÑемÑ, заÑÑаÑенное на планиÑование ÑÑого опеÑаÑоÑа в миллиÑекÑндаÑ
(еÑли вклÑÑÑн паÑамеÑÑ |
ÐинималÑное вÑемÑ, заÑÑаÑенное на планиÑование ÑÑого опеÑаÑоÑа в миллиÑекÑндаÑ
(еÑли вклÑÑÑн паÑамеÑÑ |
ÐакÑималÑное вÑемÑ, заÑÑаÑенное на планиÑование ÑÑого опеÑаÑоÑа в миллиÑекÑндаÑ
(еÑли вклÑÑÑн паÑамеÑÑ |
СÑеднее вÑемÑ, заÑÑаÑенное на планиÑование ÑÑого опеÑаÑоÑа в миллиÑекÑндаÑ
(еÑли вклÑÑÑн паÑамеÑÑ |
СÑандаÑÑное оÑклонение вÑемени, заÑÑаÑенного на планиÑование ÑÑого опеÑаÑоÑа в миллиÑекÑндаÑ
(еÑли вклÑÑÑн паÑамеÑÑ |
ЧиÑло вÑполнений |
ÐбÑее вÑемÑ, заÑÑаÑенное на вÑполнение опеÑаÑоÑа, в миллиÑекÑÐ½Ð´Ð°Ñ |
ÐинималÑное вÑемÑ, заÑÑаÑенное на вÑполнение опеÑаÑоÑа, в миллиÑекÑÐ½Ð´Ð°Ñ |
ÐакÑималÑное вÑемÑ, заÑÑаÑенное на вÑполнение опеÑаÑоÑа, в миллиÑекÑÐ½Ð´Ð°Ñ |
СÑеднее вÑемÑ, заÑÑаÑенное на вÑполнение опеÑаÑоÑа, в миллиÑекÑÐ½Ð´Ð°Ñ |
СÑандаÑÑное оÑклонение вÑемени, заÑÑаÑенного на вÑполнение опеÑаÑоÑа, в миллиÑекÑÐ½Ð´Ð°Ñ |
ÐбÑее ÑиÑло ÑÑÑок, полÑÑеннÑÑ Ð¸Ð»Ð¸ заÑÑонÑÑÑÑ Ð¾Ð¿ÐµÑаÑоÑом |
ÐбÑее ÑиÑло попаданий ÑазделÑемÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð² в ÐºÐµÑ Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ опеÑаÑоÑа |
ÐбÑее ÑиÑло ÑазделÑемÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð², пÑоÑиÑаннÑÑ Ð´Ð°Ð½Ð½Ñм опеÑаÑоÑом |
ÐбÑее ÑиÑло ÑазделÑемÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð², «загÑÑзнÑннÑÑ Â» даннÑм опеÑаÑоÑом |
ÐбÑее ÑиÑло ÑазделÑемÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð², запиÑаннÑÑ Ð´Ð°Ð½Ð½Ñм опеÑаÑоÑом |
ÐбÑее ÑиÑло попаданий локалÑнÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð² в ÐºÐµÑ Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ опеÑаÑоÑа |
ÐбÑее ÑиÑло локалÑнÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð², пÑоÑиÑаннÑÑ Ð´Ð°Ð½Ð½Ñм опеÑаÑоÑом |
ÐбÑее ÑиÑло локалÑнÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð², «загÑÑзнÑннÑÑ Â» даннÑм опеÑаÑоÑом |
ÐбÑее ÑиÑло локалÑнÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð², запиÑаннÑÑ Ð´Ð°Ð½Ð½Ñм опеÑаÑоÑом |
ÐбÑее ÑиÑло вÑеменнÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð², пÑоÑиÑаннÑÑ Ð´Ð°Ð½Ð½Ñм опеÑаÑоÑом |
ÐбÑее ÑиÑло вÑеменнÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð², запиÑаннÑÑ Ð´Ð°Ð½Ð½Ñм опеÑаÑоÑом |
ÐбÑее вÑемÑ, заÑÑаÑенное опеÑаÑоÑом на ÑÑение блоков Ñайлов даннÑÑ , в миллиÑекÑÐ½Ð´Ð°Ñ (еÑли вклÑÑÑн track_io_timing, или Ð½Ð¾Ð»Ñ Ð² пÑоÑивном ÑлÑÑае) |
ÐбÑее вÑемÑ, заÑÑаÑенное опеÑаÑоÑом на запиÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð² Ñайлов даннÑÑ , в миллиÑекÑÐ½Ð´Ð°Ñ (еÑли вклÑÑÑн track_io_timing, или Ð½Ð¾Ð»Ñ Ð² пÑоÑивном ÑлÑÑае) |
ÐбÑее вÑемÑ, заÑÑаÑенное опеÑаÑоÑом на ÑÑение блоков вÑеменнÑÑ Ñайлов, в миллиÑекÑÐ½Ð´Ð°Ñ (еÑли вклÑÑÑн track_io_timing, или Ð½Ð¾Ð»Ñ Ð² пÑоÑивном ÑлÑÑае) |
ÐбÑее вÑемÑ, заÑÑаÑенное опеÑаÑоÑом на запиÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð² вÑеменнÑÑ Ñайлов, в миллиÑекÑÐ½Ð´Ð°Ñ (еÑли вклÑÑÑн track_io_timing, или Ð½Ð¾Ð»Ñ Ð² пÑоÑивном ÑлÑÑае) |
ÐбÑее ÑиÑло запиÑей WAL, ÑгенеÑиÑованнÑÑ Ð¿Ñи вÑполнении опеÑаÑоÑа |
ÐбÑее ÑиÑло обÑазов полнÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ð² WAL, ÑгенеÑиÑованнÑÑ Ð¿Ñи вÑполнении опеÑаÑоÑа |
ÐбÑий обÑÑм WAL, ÑгенеÑиÑованнÑй пÑи вÑполнении опеÑаÑоÑа, в байÑÐ°Ñ |
ÐбÑее ÑиÑло ÑÑнкÑий, ÑкомпилиÑованнÑÑ Ð² JIT-код пÑи вÑполнении данного опеÑаÑоÑа |
ÐбÑее вÑемÑ, заÑÑаÑенное на компилÑÑÐ¸Ñ JIT-кода пÑи вÑполнении опеÑаÑоÑа, в миллиÑекÑÐ½Ð´Ð°Ñ |
СколÑко Ñаз вÑÑÑаивалиÑÑ ÑÑнкÑии |
ÐбÑее вÑемÑ, заÑÑаÑенное на вÑÑÑаивание ÑÑнкÑий пÑи вÑполнении опеÑаÑоÑа, в миллиÑекÑÐ½Ð´Ð°Ñ |
ЧиÑло JIT-опÑимизаÑий Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ опеÑаÑоÑа |
ÐбÑее вÑемÑ, заÑÑаÑенное на JIT-опÑимизаÑÐ¸Ñ Ð¿Ñи вÑполнении опеÑаÑоÑа, в миллиÑекÑÐ½Ð´Ð°Ñ |
СколÑко Ñаз вÑдавалÑÑ ÐºÐ¾Ð´ |
ÐбÑее вÑемÑ, заÑÑаÑенное на вÑдаÑÑ ÐºÐ¾Ð´Ð° пÑи вÑполнении опеÑаÑоÑа, в миллиÑекÑÐ½Ð´Ð°Ñ |
Ðо ÑообÑажениÑм безопаÑноÑÑи ÑолÑко ÑÑпеÑполÑзоваÑелÑм и ÑолÑм Ñ Ð¿Ñавами Ñоли pg_read_all_stats ÑазÑеÑено видеÑÑ ÑекÑÑ SQL и queryid запÑоÑов, вÑполнÑемÑÑ
дÑÑгими полÑзоваÑелÑми. Ðднако дÑÑгие полÑзоваÑели могÑÑ Ð²Ð¸Ð´ÐµÑÑ ÑÑаÑиÑÑикÑ, еÑли ÑÑо пÑедÑÑавление ÑÑÑановлено в иÑ
Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
.
ÐланиÑÑемÑе запÑоÑÑ (Ñо еÑÑÑ SELECT, INSERT, UPDATE, DELETE, MERGE) и ÑлÑжебнÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¾Ð±ÑединÑÑÑÑÑ Ð² Ð¾Ð´Ð½Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð² pg_stat_statements, когда они имеÑÑ Ð¸Ð´ÐµÐ½ÑиÑнÑе ÑÑÑÑкÑÑÑÑ Ð·Ð°Ð¿ÑоÑов ÑоглаÑно внÑÑÑÐµÐ½Ð½ÐµÐ¼Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð½Ð¾Ð¼Ñ Ñ
еÑÑ. ÐбÑÑно два запÑоÑа бÑдÑÑ ÑÑиÑаÑÑÑÑ ÑавнÑми пÑи Ñаком ÑÑавнении, еÑли они ÑеманÑиÑеÑки ÑавнознаÑнÑ, не ÑÑиÑÐ°Ñ Ð·Ð½Ð°Ñений конÑÑанÑ, ÑигÑÑиÑÑÑÑиÑ
в запÑоÑе.
ÐÑимеÑание
ÐижепÑиведÑннÑе ÑообÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¾ замене конÑÑÐ°Ð½Ñ Ð¸ queryid пÑименимÑ, ÑолÑко еÑли вклÑÑÑн compute_query_id. ÐÑли же Ð´Ð»Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ queryid Ð²Ñ Ð¸ÑполÑзÑеÑе вÑÑÑоеннÑй модÑлÑ, обÑаÑиÑеÑÑ Ðº его докÑменÑаÑии.
Ðогда знаÑение конÑÑанÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ Ð² ÑелÑÑ
ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑа Ñ Ð´ÑÑгими запÑоÑами, ÑÑа конÑÑанÑа заменÑеÑÑÑ Ð² вÑводе pg_stat_statements обознаÑением паÑамеÑÑа, напÑимеÑ, $1. РоÑÑалÑном ÑÑÐ¾Ñ Ð²Ñвод ÑодеÑÐ¶Ð¸Ñ ÑекÑÑ Ð¿ÐµÑвого запÑоÑа, Ñ
ÐµÑ ÐºÐ¾ÑоÑого ÑавнÑлÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ queryid, ÑвÑÐ·Ð°Ð½Ð½Ð¾Ð¼Ñ Ñ Ð·Ð°Ð¿Ð¸ÑÑÑ Ð² pg_stat_statements.
Ð pg_stat_statements запÑоÑÑ, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ
Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ñименена ноÑмализаÑиÑ, могÑÑ Ð¾ÑобÑажаÑÑÑÑ Ñо знаÑениÑми конÑÑанÑ, оÑобенно пÑи болÑÑом ÑиÑле оÑбÑаÑÑваемÑÑ
запиÑей. ЧÑÐ¾Ð±Ñ ÑнизиÑÑ Ð²ÐµÑоÑÑноÑÑÑ Ð¾ÑбÑаÑÑÐ²Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñей, можно задаÑÑ Ð±Ð¾Ð»ÐµÐµ вÑÑокое знаÑение паÑамеÑÑа pg_stat_statements.max. ÐÑедÑÑавление pg_stat_statements_info, опиÑанное ниже в Ñазделе ÐодÑаздел F.32.2, пÑедоÑÑавлÑÐµÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¾Ð± оÑбÑоÑеннÑÑ
запиÑÑÑ
.
РнекоÑоÑÑÑ
ÑлÑÑаÑÑ
запÑоÑÑ Ñ Ð²Ð¸Ð·ÑалÑно ÑазлиÑнÑми ÑекÑÑами могÑÑ Ð±ÑÑÑ Ð¾Ð±ÑÐµÐ´Ð¸Ð½ÐµÐ½Ñ Ð² Ð¾Ð´Ð½Ñ Ð·Ð°Ð¿Ð¸ÑÑ pg_stat_statements. ÐбÑÑно ÑÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ ÑолÑко Ð´Ð»Ñ ÑеманÑиÑеÑки ÑавнознаÑнÑÑ
запÑоÑов, но еÑÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑÐ°Ñ Ð²ÐµÑоÑÑноÑÑÑ, ÑÑо из-за наложений Ñ
еÑа неÑвÑзаннÑе запÑоÑÑ Ð¼Ð¾Ð³ÑÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð¾Ð±ÑединÑннÑми в одной запиÑи. (Ðднако ÑÑо невозможно Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑов, пÑинадлежаÑиÑ
ÑазнÑм полÑзоваÑелÑм баз даннÑÑ
.)
Так как знаÑение Ñ
еÑа queryid вÑÑиÑлÑеÑÑÑ Ð¿Ð¾ пÑедÑÑавлениÑм запÑоÑа на ÑÑадии поÑле ÑазбоÑа, возможна и обÑаÑÐ½Ð°Ñ ÑиÑÑаÑиÑ: запÑоÑÑ Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñм ÑекÑÑом могÑÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð² ÑазнÑÑ
запиÑÑÑ
, еÑли они полÑÑили ÑазлиÑнÑе пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑазнÑм пÑиÑинам, напÑимеÑ, из-за Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ search_path.
ÐоÑÑебиÑели ÑÑаÑиÑÑики pg_stat_statements могÑÑ Ð¿Ð¾Ð¶ÐµÐ»Ð°ÑÑ Ð¸ÑполÑзоваÑÑ Ð² каÑеÑÑве более ÑÑабилÑного и надÑжного иденÑиÑикаÑоÑа Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ запиÑи не ÑекÑÑ Ð·Ð°Ð¿ÑоÑа, а queryid (возможно, в ÑоÑеÑании Ñ dbid и userid). Ðднако важно понимаÑÑ, ÑÑо ÑÑабилÑноÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ñ
еÑа queryid гаÑанÑиÑÑеÑÑÑ Ñ Ð¾Ð³ÑаниÑениÑми. Так как ÑÑÐ¾Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð¿Ð¾Ð»ÑÑаеÑÑÑ Ð¸Ð· деÑева запÑоÑа поÑле анализа, его знаÑение бÑдеÑ, помимо пÑоÑего, завиÑеÑÑ Ð¾Ñ Ð²Ð½ÑÑÑенниÑ
иденÑиÑикаÑоÑов обÑекÑов, ÑигÑÑиÑÑÑÑиÑ
в ÑÑом пÑедÑÑавлении. С ÑÑим ÑвÑзано неÑколÑко неинÑÑиÑивнÑÑ
ÑледÑÑвий. ÐапÑимеÑ, pg_stat_statements бÑÐ´ÐµÑ ÑÑиÑаÑÑ Ð´Ð²Ð° одинаково вÑглÑдÑÑиÑ
запÑоÑа ÑазнÑми, еÑли они обÑаÑаÑÑÑÑ Ðº ÑаблиÑе, коÑоÑÐ°Ñ Ð±Ñла Ñдалена, а заÑем воÑÑоздана Ð¼ÐµÐ¶Ð´Ñ ÑÑими запÑоÑами. РезÑлÑÑÐ°Ñ Ñ
еÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñакже ÑÑвÑÑвиÑелен к ÑазлиÑиÑм в маÑинной аÑÑ
иÑекÑÑÑе и дÑÑгим оÑобенноÑÑÑм плаÑÑоÑмÑ. Ðолее Ñого, не ÑÑÐ¾Ð¸Ñ ÑаÑÑÑиÑÑваÑÑ Ð½Ð° Ñо, ÑÑо queryid бÑÐ´ÐµÑ Ð¾ÑÑаваÑÑÑÑ Ð½ÐµÐ¸Ð·Ð¼ÐµÐ½Ð½Ñм пÑи обновлении оÑновнÑÑ
веÑÑий PostgreSQL.
Ðожно ожидаÑÑ, ÑÑо два ÑеÑвеÑа, ÑÑаÑÑвÑÑÑие в ÑепликаÑии на оÑнове воÑпÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÑизиÑеÑкого WAL, бÑдÑÑ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñе queryid Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ запÑоÑа. Ðднако ÑÑ
ÐµÐ¼Ñ Ñ Ð»Ð¾Ð³Ð¸ÑеÑкой ÑепликаÑией не гаÑанÑиÑÑÑÑ ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð´ÐµÐ½ÑиÑноÑÑи Ñеплик во вÑеÑ
имеÑÑиÑ
знаÑение деÑалÑÑ
, Ñак ÑÑо queryid не бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñм иденÑиÑикаÑоÑом Ð´Ð»Ñ Ð½Ð°ÐºÐ¾Ð¿Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñелей ÑÑоимоÑÑи по набоÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкиÑ
Ñеплик. Ð ÑлÑÑае Ñомнений в Ñом или ином подÑ
оде ÑекомендÑеÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно пÑоÑеÑÑиÑоваÑÑ ÐµÐ³Ð¾.
Ðак пÑавило, можно пÑедположиÑÑ, ÑÑо знаÑÐµÐ½Ð¸Ñ queryid не менÑÑÑÑÑ Ð¼ÐµÐ¶Ð´Ñ ÐºÐ¾ÑÑекÑиÑÑÑÑими Ñелизами PostgreSQL пÑи ÑÑловии, ÑÑо ÑкземплÑÑÑ ÑабоÑаÑÑ Ð½Ð° одной и Ñой же аÑÑ
иÑекÑÑÑе и деÑали меÑаданнÑÑ
каÑалога ÑовпадаÑÑ. СовмеÑÑимоÑÑÑ Ð¼ÐµÐ¶Ð´Ñ ÐºÐ¾ÑÑекÑиÑÑÑÑими Ñелизами Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ð°ÑÑÑена ÑолÑко в кÑайнем ÑлÑÑае.
ÐбознаÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑов, пÑименÑемÑе Ð´Ð»Ñ Ð·Ð°Ð¼ÐµÐ½Ñ ÐºÐ¾Ð½ÑÑÐ°Ð½Ñ Ð² пÑедÑÑавлÑÑÑем запÑоÑÑ ÑекÑÑе, нÑмеÑÑÑÑÑÑ, наÑÐ¸Ð½Ð°Ñ Ñо ÑледÑÑÑего за поÑледним паÑамеÑÑом $n в иÑÑ
одном ÑекÑÑе запÑоÑа, или Ñ $1 в оÑÑÑÑÑÑвие паÑамеÑÑов в нÑм. СÑÐ¾Ð¸Ñ Ð¾ÑмеÑиÑÑ, ÑÑо в некоÑоÑÑÑ
ÑлÑÑаÑÑ
на ÑÑÑ Ð½ÑмеÑаÑÐ¸Ñ Ð¼Ð¾Ð³ÑÑ Ð²Ð»Ð¸ÑÑÑ ÑкÑÑÑÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¿Ð°ÑамеÑÑов. ÐапÑимеÑ, PL/pgSQL пÑименÑÐµÑ Ñакие ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² запÑоÑÑ Ð·Ð½Ð°Ñений локалÑнÑÑ
пеÑеменнÑÑ
ÑÑнкÑий, Ñак ÑÑо опеÑаÑÐ¾Ñ PL/pgSQL вида SELECT i + 1 INTO j бÑÐ´ÐµÑ Ð¿ÑедÑÑавлен в ÑекÑÑе как SELECT i + $2.
ТекÑÑ, пÑедÑÑавлÑÑÑий запÑоÑ, ÑоÑ
ÑанÑеÑÑÑ Ð²Ð¾ внеÑнем Ñайле на диÑке и не Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ ÑазделÑемÑÑ Ð¿Ð°Ð¼ÑÑÑ. ÐоÑÑÐ¾Ð¼Ñ Ð´Ð°Ð¶Ðµ оÑÐµÐ½Ñ Ð¾Ð±ÑÑмнÑй ÑекÑÑ Ð·Ð°Ð¿ÑоÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑоÑ
ÑанÑн ÑÑпеÑно. Ðднако еÑли в Ñайле накапливаеÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ длиннÑÑ
ÑекÑÑов запÑоÑов, он Ð¼Ð¾Ð¶ÐµÑ Ð²ÑÑаÑÑи до неÑдобоваÑимого ÑазмеÑа. РкаÑеÑÑве ÑеÑÐµÐ½Ð¸Ñ ÑÑой пÑоблемÑ, pg_stat_statements Ð¼Ð¾Ð¶ÐµÑ ÑеÑиÑÑ ÑÑеÑеÑÑ ÑекÑÑ Ð·Ð°Ð¿ÑоÑов, и в ÑезÑлÑÑаÑе во вÑеÑ
ÑÑÑеÑÑвÑÑÑиÑ
запиÑÑÑ
в пÑедÑÑавлении pg_stat_statements в поле query окажÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ NULL, Ñ
оÑÑ ÑÑаÑиÑÑика, ÑвÑÐ·Ð°Ð½Ð½Ð°Ñ Ñ ÐºÐ°Ð¶Ð´Ñм queryid бÑÐ´ÐµÑ ÑоÑ
Ñанена. ÐÑли ÑÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¸ меÑÐ°ÐµÑ Ð°Ð½Ð°Ð»Ð¸Ð·Ñ, возможно, ÑÑÐ¾Ð¸Ñ ÑменÑÑиÑÑ pg_stat_statements.max Ð´Ð»Ñ Ð¿ÑедоÑвÑаÑÐµÐ½Ð¸Ñ ÑакиÑ
ÑиÑÑаÑий.
ÐоказаÑели plans и calls не обÑзаÑелÑно Ð´Ð¾Ð»Ð¶Ð½Ñ ÑовпадаÑÑ, Ñак как ÑÑаÑиÑÑика планиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑеÑÑÑ Ð² конÑе ÑооÑвеÑÑÑвÑÑÑей ÑÐ°Ð·Ñ Ð¸ ÑолÑко пÑи ÑÑпеÑном завеÑÑении ÑÑой ÑазÑ. ÐапÑимеÑ, еÑли Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑа ÑÑпеÑно вÑполнилоÑÑ Ð¿Ð»Ð°Ð½Ð¸Ñование, но во вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿ÑоизоÑла оÑибка, измениÑÑÑ ÑолÑко ÑÑаÑиÑÑика планиÑованиÑ. ÐÑли же планиÑование пÑопÑÑкаеÑÑÑ Ð¿Ð¾ пÑиÑине иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐµÑиÑованного плана, ÑвелиÑиваеÑÑÑ ÑолÑко ÑÑÑÑÑик вÑполнениÑ.
F.32.2. ÐÑедÑÑавление pg_stat_statements_info #
СÑаÑиÑÑика Ñамого модÑÐ»Ñ pg_stat_statements ÑобиÑаеÑÑÑ Ð¸ вÑдаÑÑÑÑ ÑеÑез пÑедÑÑавление Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ pg_stat_statements_info. ÐÑо пÑедÑÑавление ÑодеÑÐ¶Ð¸Ñ ÑолÑко Ð¾Ð´Ð½Ñ ÑÑÑокÑ. СÑолбÑÑ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð² ТаблиÑе F.23.
ТаблиÑа F.23. СÑолбÑÑ pg_stat_statements_info
Тип ÑÑолбÑа ÐпиÑание |
|---|
СколÑко вÑего Ñаз в |
ÐÑÐµÐ¼Ñ Ð¿Ð¾Ñледнего ÑбÑоÑа вÑеÑ
ÑÑаÑиÑÑиÑеÑкиÑ
даннÑÑ
в пÑедÑÑавлении |
F.32.3. ФÑнкÑии #
-
pg_stat_statements_reset(userid Oid, dbid Oid, queryid bigint) returns void ФÑнкÑиÑ
pg_stat_statements_resetоÑиÑÐ°ÐµÑ Ð²ÑÑ ÑÑаÑиÑÑикÑ, ÑобÑаннÑÑ Ðº ÑÑÐ¾Ð¼Ñ Ð²Ñемени модÑлемpg_stat_statementsÐ´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ полÑзоваÑÐµÐ»Ñ (userid), Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ (dbid) и запÑоÑа (queryid). Ð ÑлÑÑае оÑÑÑÑÑÑÐ²Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ из паÑамеÑÑов Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ подÑазÑмеваеÑÑÑ Ð½Ñлевое знаÑение (непÑименимое огÑаниÑение) и оÑиÑаеÑÑÑ ÑÑаÑиÑÑика, ÑооÑвеÑÑÑвÑÑÑÐ°Ñ Ð´ÑÑгим паÑамеÑÑам. ÐÑли никакой паÑамеÑÑ Ð½Ðµ задан или вÑе паÑамеÑÑÑ Ð¸Ð¼ÐµÑÑ Ð½Ñлевое знаÑение (непÑименимое), оÑиÑаеÑÑÑ Ð²ÑÑ ÑÑаÑиÑÑика. ÐмеÑÑе Ñ Ð¾ÑиÑÑкой вÑей ÑÑаÑиÑÑики вpg_stat_statementsÑакже ÑбÑаÑÑваеÑÑÑ ÑÑаÑиÑÑика вpg_stat_statements_info. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑÑ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð³ÑÑ Ð²ÑполнÑÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели. ÐÑÑгим полÑзоваÑелÑм можно даÑÑ Ð´Ð¾ÑÑÑп к ней, иÑполÑзÑÑGRANT.-
pg_stat_statements(showtext boolean) returns setof record ÐÑедÑÑавление
pg_stat_statementsÑеализовано на базе ÑÑнкÑии, коÑоÑÐ°Ñ Ñоже назÑваеÑÑÑpg_stat_statements. ÐлиенÑÑ Ð¼Ð¾Ð³ÑÑ Ð²ÑзÑваÑÑ ÑÑнкÑиÑpg_stat_statementsнепоÑÑедÑÑвенно, и могÑÑ ÑказаÑÑshowtext := falseи полÑÑиÑÑ ÑезÑлÑÑÐ°Ñ Ð±ÐµÐ· ÑекÑÑа запÑоÑа (Ñо еÑÑÑ, вÑÑ Ð¾Ð´Ð½Ð¾Ð¹ аÑгÑÐ¼ÐµÐ½Ñ (OUT), ÑооÑвеÑÑÑвÑÑÑий ÑÑолбÑÑ Ð¿ÑедÑÑавлениÑquery, бÑÐ´ÐµÑ ÑодеÑжаÑÑ NULL). ÐÑа возможноÑÑÑ Ð¿ÑедназнаÑена Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки внеÑÐ½Ð¸Ñ Ð¸Ð½ÑÑÑÑменÑов, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ Ð¶ÐµÐ»Ð°ÑелÑно избежаÑÑ Ð¸Ð·Ð´ÐµÑжек, ÑвÑзаннÑÑ Ñ Ð¿Ð¾Ð»ÑÑением ÑекÑÑов запÑоÑов неопÑеделÑнной длинÑ. Такие инÑÑÑÑменÑÑ Ð¼Ð¾Ð³ÑÑ ÐºÐµÑиÑоваÑÑ ÑекÑÑ Ð¿ÐµÑвого запÑоÑа, коÑоÑÑй они полÑÑÐ°Ñ ÑамоÑÑоÑÑелÑно, как ÑÑо и делаеÑpg_stat_statements, а заÑем запÑаÑиваÑÑ ÑекÑÑÑ Ð·Ð°Ð¿ÑоÑов ÑолÑко пÑи Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи. Так как ÑеÑÐ²ÐµÑ ÑÐ¾Ñ ÑанÑÐµÑ ÑекÑÑÑ Ð·Ð°Ð¿ÑоÑов в Ñайле, ÑÑÐ¾Ñ Ð¿Ð¾Ð´Ñ Ð¾Ð´ ÑокÑаÑÐ°ÐµÑ Ð¾Ð±ÑÑм ÑизиÑеÑкого ввода-вÑвода, поÑождаемого пÑи поÑÑоÑнном обÑаÑении к даннÑмpg_stat_statements.
F.32.4. ÐаÑамеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии #
pg_stat_statements.max(integer)ÐаÑамеÑÑ
pg_stat_statements.maxзадаÑÑ Ð¼Ð°ÐºÑималÑное ÑиÑло опеÑаÑоÑов, оÑÑлеживаемÑÑ Ð¼Ð¾Ð´Ñлем (Ñо еÑÑÑ, макÑималÑное ÑиÑло ÑÑÑок в пÑедÑÑавленииpg_stat_statements). Ðогда на обÑабоÑÐºÑ Ð¿Ð¾ÑÑÑÐ¿Ð°ÐµÑ Ð±Ð¾Ð»ÑÑе, Ñем заданное ÑиÑло ÑазлиÑнÑÑ Ð¾Ð¿ÐµÑаÑоÑов, инÑоÑмаÑÐ¸Ñ Ð¾ Ñедко вÑполнÑемÑÑ Ð¾Ð¿ÐµÑаÑоÑÐ°Ñ Ð¾ÑбÑаÑÑваеÑÑÑ. РпÑедÑÑавленииpg_stat_statements_infoможно ÑвидеÑÑ, ÑколÑко Ñаз ÑÑо пÑоиÑÑ Ð¾Ð´Ð¸Ð»Ð¾. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 5000. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ ÑолÑко пÑи запÑÑке ÑеÑвеÑа.pg_stat_statements.track(enum)ÐаÑамеÑÑ
pg_stat_statements.trackопÑеделÑеÑ, какие опеÑаÑоÑÑ Ð±ÑдÑÑ Ð¾ÑÑлеживаÑÑÑÑ Ð¼Ð¾Ð´Ñлем. Со знаÑениемtopоÑÑлеживаÑÑÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ Ð²ÐµÑÑ Ð½ÐµÐ³Ð¾ ÑÑÐ¾Ð²Ð½Ñ (Ñе, ÑÑо непоÑÑедÑÑвенно вÑполнÑÑÑÑÑ ÐºÐ»Ð¸ÐµÐ½Ñами), Ñо знаÑениемallÑакже оÑÑлеживаÑÑÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñе опеÑаÑоÑÑ (напÑимеÑ, опеÑаÑоÑÑ, вÑзÑваемÑе внÑÑÑи ÑÑнкÑий), а знаÑениеnoneполноÑÑÑÑ Ð¾ÑклÑÑÐ°ÐµÑ ÑÐ±Ð¾Ñ ÑÑаÑиÑÑики по опеÑаÑоÑам. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âtop. ÐзменÑÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð³ÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели.pg_stat_statements.track_utility(boolean)ÐаÑамеÑÑ
pg_stat_statements.track_utilityопÑеделÑеÑ, бÑÐ´ÐµÑ Ð»Ð¸ ÑÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¾ÑÑлеживаÑÑ ÑлÑжебнÑе командÑ. СлÑжебнÑми командами ÑÑиÑаÑÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ, оÑлиÑнÑе оÑSELECT,INSERT,UPDATE,DELETEиMERGE. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âon(вкл.). ÐзмениÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð³ÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели.pg_stat_statements.track_planning(boolean)ÐаÑамеÑÑ
pg_stat_statements.track_planningопÑеделÑеÑ, бÑÐ´ÐµÑ Ð»Ð¸ ÑÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¾ÑÑлеживаÑÑ Ð¾Ð¿ÐµÑаÑии планиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ Ð¸Ñ Ð´Ð»Ð¸ÑелÑноÑÑÑ. ÐклÑÑение ÑÑого паÑамеÑÑа Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к замеÑÐ½Ð¾Ð¼Ñ ÑÐ½Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿ÑоизводиÑелÑноÑÑи, оÑобенно когда во множеÑÑве одновÑеменнÑÑ ÑеанÑов вÑполнÑÑÑÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾Ð¹ ÑÑÑÑкÑÑÑой запÑоÑов, в ÑезÑлÑÑаÑе Ñего ÑÑи ÑеанÑÑ Ð¿ÑÑаÑÑÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменно измениÑÑ Ð¾Ð´Ð½Ð¸ и Ñе же запиÑи вpg_stat_statements. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âoff(вÑкл.). ÐзмениÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð³ÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели.pg_stat_statements.save(boolean)ÐаÑамеÑÑ
pg_stat_statements.saveопÑеделÑеÑ, должна ли ÑÑаÑиÑÑика опеÑаÑоÑов ÑÐ¾Ñ ÑанÑÑÑÑÑ Ð¿Ð¾Ñле пеÑезагÑÑзки ÑеÑвеÑа. ÐÑли он оÑклÑÑÑн (Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñениеoff), ÑÑаÑиÑÑика не ÑÐ¾Ñ ÑанÑеÑÑÑ Ð¿Ñи оÑÑановке ÑеÑвеÑа и не пеÑезагÑÑжаеÑÑÑ Ð¿Ñи запÑÑке. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âon(вкл.). ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ ÑолÑко вpostgresql.confили в командной ÑÑÑоке ÑеÑвеÑа.
ÐÑÐ¾Ð¼Ñ Ð¼Ð¾Ð´ÑÐ»Ñ ÑÑебÑеÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑÐ½Ð°Ñ ÑазделÑÐµÐ¼Ð°Ñ Ð¿Ð°Ð¼ÑÑÑ Ð² обÑÑме, пÑопоÑÑионалÑном pg_stat_statements.max. ÐамеÑÑÑе, ÑÑо ÑÑа памÑÑÑ Ð±ÑÐ´ÐµÑ Ð·Ð°Ð½ÑÑа пÑи загÑÑзке модÑлÑ, даже еÑли pg_stat_statements.track Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение none.
ÐÑи паÑамеÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ Ð² postgresql.conf. ÐбÑÑное иÑполÑзование вÑглÑÐ´Ð¸Ñ Ñак:
# postgresql.conf shared_preload_libraries = 'pg_stat_statements' compute_query_id = on pg_stat_statements.max = 10000 pg_stat_statements.track = all
F.32.5. ÐÑÐ¸Ð¼ÐµÑ Ð²Ñвода #
bench=# SELECT pg_stat_statements_reset();
$ pgbench -i bench
$ pgbench -c10 -t300 bench
bench=# \x
bench=# SELECT query, calls, total_exec_time, rows, 100.0 * shared_blks_hit /
nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 5;
-[ RECORD 1 ]---+--------------------------------------------------â------------------
query | UPDATE pgbench_branches SET bbalance = bbalance + $1 WHERE bid = $2
calls | 3000
total_exec_time | 25565.855387
rows | 3000
hit_percent | 100.0000000000000000
-[ RECORD 2 ]---+--------------------------------------------------â------------------
query | UPDATE pgbench_tellers SET tbalance = tbalance + $1 WHERE tid = $2
calls | 3000
total_exec_time | 20756.669379
rows | 3000
hit_percent | 100.0000000000000000
-[ RECORD 3 ]---+--------------------------------------------------â------------------
query | copy pgbench_accounts from stdin
calls | 1
total_exec_time | 291.865911
rows | 100000
hit_percent | 100.0000000000000000
-[ RECORD 4 ]---+--------------------------------------------------â------------------
query | UPDATE pgbench_accounts SET abalance = abalance + $1 WHERE aid = $2
calls | 3000
total_exec_time | 271.232977
rows | 3000
hit_percent | 98.8454011741682975
-[ RECORD 5 ]---+--------------------------------------------------â------------------
query | alter table pgbench_accounts add primary key (aid)
calls | 1
total_exec_time | 160.588563
rows | 0
hit_percent | 100.0000000000000000
bench=# SELECT pg_stat_statements_reset(0,0,s.queryid) FROM pg_stat_statements AS s
WHERE s.query = 'UPDATE pgbench_branches SET bbalance = bbalance + $1 WHERE bid = $2';
bench=# SELECT query, calls, total_exec_time, rows, 100.0 * shared_blks_hit /
nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 5;
-[ RECORD 1 ]---+--------------------------------------------------â------------------
query | UPDATE pgbench_tellers SET tbalance = tbalance + $1 WHERE tid = $2
calls | 3000
total_exec_time | 20756.669379
rows | 3000
hit_percent | 100.0000000000000000
-[ RECORD 2 ]---+--------------------------------------------------â------------------
query | copy pgbench_accounts from stdin
calls | 1
total_exec_time | 291.865911
rows | 100000
hit_percent | 100.0000000000000000
-[ RECORD 3 ]---+--------------------------------------------------â------------------
query | UPDATE pgbench_accounts SET abalance = abalance + $1 WHERE aid = $2
calls | 3000
total_exec_time | 271.232977
rows | 3000
hit_percent | 98.8454011741682975
-[ RECORD 4 ]---+--------------------------------------------------â------------------
query | alter table pgbench_accounts add primary key (aid)
calls | 1
total_exec_time | 160.588563
rows | 0
hit_percent | 100.0000000000000000
-[ RECORD 5 ]---+--------------------------------------------------â------------------
query | vacuum analyze pgbench_accounts
calls | 1
total_exec_time | 136.448116
rows | 0
hit_percent | 99.9201915403032721
bench=# SELECT pg_stat_statements_reset(0,0,0);
bench=# SELECT query, calls, total_exec_time, rows, 100.0 * shared_blks_hit /
nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 5;
-[ RECORD 1 ]---+--------------------------------------------------â---------------------------
query | SELECT pg_stat_statements_reset(0,0,0)
calls | 1
total_exec_time | 0.189497
rows | 1
hit_percent |
-[ RECORD 2 ]---+--------------------------------------------------â---------------------------
query | SELECT query, calls, total_exec_time, rows, $1 * shared_blks_hit / +
| nullif(shared_blks_hit + shared_blks_read, $2) AS hit_percent+
| FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT $3
calls | 0
total_exec_time | 0
rows | 0
hit_percent |F.32.6. ÐвÑоÑÑ #
ТакаÑ
иÑо ÐÑагаки <[email protected]>. ÐоÑмализаÑÐ¸Ñ Ð·Ð°Ð¿ÑоÑов добавил ÐиÑÐµÑ Ðейган <[email protected]>.