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)
مراجع :
Leave a Reply