آشنایی با مفید ترید extensionبرای postgresql، اکستنشن pg_stat_statements

Pg_stat_statements چیزی است که به عنوان افزونه contrib شناخته می شود و در دایرکتوری contrib از توزیع PostgreSQL یافت می شود.

نیاز به نصب خاصی روی Postgres نیست و تنها باید برای database فعال-enable شود.

CREATE EXTENSION pg_stat_statements;

همین که pg_stat فعال شد، خیلی آرام و پشت زمینه شروع به کار کردن می کنه.Pg_stat_statements تمامی کوئری های اجرا شده روی دیتابیس را ثبت و ذخیره می کند . چند مورد مقدار را از روی آنها ثبت می کند.

با چند تا مثال پیش میریم که روند کار چگونه است. فرض کنید کوئری زیر را اجرا کرده ایم:

SELECT order_details.qty,
       order_details.item_id,
       order_details.item_price
FROM order_details,
     customers
WHERE customers.id = order_details.customer_id
  AND customers.email = 'craig@citusdata.com'

اکستنشن، کوئری را به فرم زیر تغییر می دهد:

SELECT order_details.qty,
       order_details.item_id,
       order_details.item_price
FROM order_details,
     customers
WHERE customers.id = order_details.customer_id
  AND customers.email = '?'

حال به خروجی pg-sta نگاه کنیم:

SELECT * 
FROM pg_stat_statements;

userid              | 16384
dbid                | 16388
query               | select * from users where email = ?;
calls               | 2
total_time          | 0.000268
rows                | 2
shared_blks_hit     | 16
shared_blks_read    | 0
shared_blks_dirtied | 0
shared_blks_written | 0
local_blks_hit      | 0
local_blks_read     | 0
local_blks_dirtied  | 0
local_blks_written  | 0
...

با نگاه به دو مقدار total_time و تعداد دفعاتی که یک کوئری اجرا شده است، می توانیم یک شمای سریع از پر استفاده ترین کوئری ها داشته باشیم.

SELECT 
  (total_time / 1000 / 60) as total, 
  (total_time/calls) as avg, 
  query 
FROM pg_stat_statements 
ORDER BY 1 DESC 
LIMIT 100;
   total  |   avg  |        query
  --------+--------+-------------------------
   295.76 |  10.13 | SELECT id FROM users...
   219.13 |  80.24 | SELECT * FROM ...
  (2 rows)

مراجع :

سایت citusData

سایت postgresql