طريقة واحدة للحصول على ملف تعريف عبء العمل وانتظار السجل في PostgreSQL

استمرار لمقال "في محاولة لخلق التماثلية من الرماد ل PostgreSQL ".

سيتم النظر في المقالة وعرضها على استفسارات وأمثلة محددة - ما هي المعلومات المفيدة التي يمكن الحصول عليها باستخدام محفوظات العرض التقديمي pg_stat_activity.
تحذير.
بسبب حداثة الموضوع وفترة الاختبار غير المكتملة ، قد تحتوي المقالة على أخطاء. يتم تشجيع النقد والتعليقات بقوة ومتوقعة.

إدخال البيانات


عرض السجل pg_stat_statements


pg_stat_history
CREATE TABLE pg_stat_history ( id SERIAL, snapshot_timestamp timestamp without time zone, database_id integer, dbid oid, userid oid, queryid bigint, query text, calls bigint, total_time double precision, min_time double precision, max_time double precision, mean_time double precision, stddev_time double precision, rows bigint, shared_blks_hit bigint, shared_blks_read bigint, shared_blks_dirtied bigint, shared_blks_written bigint, local_blks_hit bigint, local_blks_read bigint, local_blks_dirtied bigint, local_blks_written bigint, temp_blks_read bigint, temp_blks_written bigint, blk_read_time double precision, blk_write_time double precision, baseline_id integer ); 

يتم ملؤها الجدول كل ساعة باستخدام dblink إلى قاعدة البيانات الهدف. العمود الأكثر إثارة للاهتمام ومفيد في الجدول ، بالطبع ، هو الاستعلام .

عرض تاريخ Pg_stat_activity


archive_pg_stat_activity
 CREATE TABLE archive_pg_stat_activity ( timepoint timestamp without time zone, datid oid, datname name, pid integer, usesysid oid, usename name, application_name text, client_addr inet, client_hostname text, client_port integer, backend_start timestamp without time zone, xact_start timestamp without time zone, query_start timestamp without time zone, state_change timestamp without time zone, wait_event_type text, wait_event text, state text, backend_xid xid, backend_xmin xid, query text, backend_type text, queryid bigint ); 

الجدول عبارة عن جدول history_pg_stat_activity مقسم على مدار الساعة (لمزيد من التفاصيل ، انظر pg_stat_statements + pg_stat_activity + loq_query = pg_ash؟ وهنا محاولة لإنشاء مثيل لـ ASH لـ PostgreSQL.)

إنتاج


وقت وحدة المعالجة المركزية (نظام + عملاء)


تحقيق
 WITH t AS ( SELECT date_trunc('second', timepoint) FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND ( aa.wait_event_type IS NULL ) AND aa.state = 'active' ) SELECT count(*) INTO cpu_total FROM t ; 

مثال
 CLUSTER CPU TIME (SYSTEM + CLIENTS ) : 28:37:46 

كلوز ينتظر الوقت


تحقيق
 WITH t AS ( SELECT date_trunc('second', timepoint) FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND ( aa.wait_event_type IS NOT NULL ) AND aa.state = 'active' ) SELECT count(*) INTO cpu_total FROM t ; 

مثال
 CLUSTER WAITINGS TIME : 30:12:49 

إجمالي قيم pg_stat_statements


تحقيق
  --TOTAL pg_stat SELECT SUM(calls) AS calls, SUM(total_time) AS total_time, SUM(rows) AS rows , SUM(shared_blks_hit) AS shared_blks_hit,SUM(shared_blks_read) AS shared_blks_read , SUM(shared_blks_dirtied) AS shared_blks_dirtied,SUM(shared_blks_written) AS shared_blks_written , SUM(local_blks_hit) AS local_blks_hit , SUM(local_blks_read) AS local_blks_read , SUM(local_blks_dirtied) AS local_blks_dirtied , SUM(local_blks_written) AS local_blks_written, SUM(temp_blks_read) AS temp_blks_read, SUM(temp_blks_written) temp_blks_written , SUM(blk_read_time) AS blk_read_time , SUM(blk_write_time) AS blk_write_time INTO pg_total_stat_history_rec FROM pg_stat_history WHERE snapshot_timestamp BETWEEN pg_stat_history_begin AND pg_stat_history_end AND queryid IS NULL; 

SQL DBTIME - إجمالي وقت تشغيل الاستعلام


تحقيق
 dbtime_total = interval '1 millisecond' * pg_total_stat_history_rec.total_time ; 

مثال
 SQL DBTIME : 136:49:36 

مزود وقت وحدة المعالجة المركزية الوقت من وحدة المعالجة المركزية قضى تنفيذ الاستعلامات


تحقيق
 WITH t AS ( SELECT date_trunc('second', timepoint) FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND ( aa.wait_event_type IS NULL ) AND backend_type = 'client backend' AND aa.state = 'active' ) SELECT count(*) INTO cpu_total FROM t ; 

مثال
 SQL CPU TIME : 27:40:15 

وقت انتظار SQL - إجمالي وقت الانتظار للاستعلامات


تحقيق
 WITH t AS ( SELECT date_trunc('second', timepoint) FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND ( aa.wait_event_type IS NOT NULL ) AND aa.state = 'active' AND backend_type = 'client backend' ) SELECT count(*) INTO waiting_total FROM t ; 

مثال
 SQL WAITINGS TIME : 30:04:09 

الاستعلامات التالية تافهة ولتوفير مساحة ، يتم حذف تفاصيل التنفيذ:

مثال
 | SQL IOTIME : 19:44:50 | SQL READ TIME : 19:44:32 | SQL WRITE TIME : 00:00:17 | | SQL CALLS : 12188248 ------------------------------------------------------------- | SQL SHARED BLOCKS READS : 7997039120 | SQL SHARED BLOCKS HITS : 8868286092 | SQL SHARED BLOCKS HITS/READS % : 110.89 | SQL SHARED BLOCKS DIRTED : 419945 | SQL SHARED BLOCKS WRITTEN : 19857 | | SQL TEMPORARY BLOCKS READS : 7836169 | SQL TEMPORARY BLOCKS WRITTEN : 10683938 

نمر إلى القسم الأكثر إثارة للاهتمام

إحصائيات الانتظار


أفضل 10 عمليات انتظار حسب إجمالي وقت الانتظار لعمليات العملاء


تحقيق
 SELECT wait_event_type , wait_event , get_system_waiting_duration( wait_event_type , wait_event ,pg_stat_history_begin+(current_hour_diff * interval '1 hour') ,pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type != 'client backend' AND wait_event_type IS NOT NULL GROUP BY wait_event_type, wait_event ORDER BY 3 DESC LIMIT 10 

مثال
  + ------------------------------------------------- -----------------------------------
 |  أفضل 10 عمليات انتظار حسب إجمالي وقت الانتظار لعمليات النظام
 + ----- + ------------------------------ + ------------ -------- + --------------------
 |  # |  wait_event_type |  wait_event |  مدة
 + ----- + ------------------------------ + ------------ -------- + --------------------
 |  1 |  النشاط |  LogicalLauncherMain |  10:43:28
 |  2 |  النشاط |  AutoV VacuumMain |  10:42:49
 |  3 |  النشاط |  والوريترمان |  10:28:53
 |  4 |  النشاط |  CheckpointerMain |  10:23:50
 |  5 |  النشاط |  BgWriterMain |  9:11:59
 |  6 |  النشاط |  BgWriterHibernate |  1:37:46
 |  7 |  IO |  BufFileWrite |  0:02:35
 |  8 |  LWLock |  العازلة |  0:01:54
 |  9 |  IO |  DataFileRead |  0:01:23
 |  10 |  IO |  الكتابة |  0:00:59
 + ----- + ------------------------------ + ------------ -------- + --------------------

أفضل 10 عمليات انتظار حسب إجمالي وقت الانتظار لعمليات العملاء


تحقيق
 SELECT wait_event_type , wait_event , get_clients_waiting_duration( wait_event_type , wait_event , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type = 'client backend' AND wait_event_type IS NOT NULL GROUP BY wait_event_type, wait_event ORDER BY 3 DESC LIMIT 10 

مثال
  + ----- + ------------------------------ + ------------ -------- + -------------------- + ----------
 |  # |  wait_event_type |  wait_event |  المدة |  ٪ dbtime
 + ----- + ------------------------------ + ------------ -------- + -------------------- + ----------
 |  1 |  قفل |  معاملة |  08: 16: 47 |  6.05
 |  2 |  IO |  DataFileRead |  06: 13: 41 |  4.55
 |  3 |  مهلة |  PgSleep |  02: 53: 21 |  2.11
 |  4 |  LWLock |  العازلة |  00: 40: 42 |  0.5
 |  5 |  LWLock |  buffer_io |  00: 17: 17 |  0.21
 |  6 |  IO |  BufFileWrite |  00: 01: 34 |  0.02
 |  7 |  قفل |  tuple |  00: 01: 32 |  0.02
 |  8 |  العميل |  ClientRead |  00: 01: 19 |  0.02
 |  9 |  IO |  BufFileRead |  00: 00: 37 |  0.01
 |  10 |  LWLock |  المخزن المؤقت |  00: 00: 08 |  0
 + ----- + ------------------------------ + ------------ -------- + -------------------- + ----------

أنواع الانتظار بوقت الانتظار الكلي ، لعمليات النظام


تحقيق
 SELECT wait_event_type , get_system_waiting_type_duration( wait_event_type , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type != 'client backend' AND wait_event_type IS NOT NULL GROUP BY wait_event_type ORDER BY 2 DESC 

مثال
  + ----- + ------------------------------ + ------------ --------
 |  # |  wait_event_type |  مدة
 + ----- + ------------------------------ + ------------ --------
 |  1 |  النشاط |  53:08:45
 |  2 |  IO |  0:06:24
 |  3 |  LWLock |  0:03:02
 + ----- + ------------------------------ + ------------ --------

أنواع الانتظار في إجمالي وقت الانتظار ، لعمليات العملاء


تحقيق
 SELECT wait_event_type , get_clients_waiting_type_duration( wait_event_type , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type = 'client backend' AND wait_event_type IS NOT NULL GROUP BY wait_event_type ORDER BY 2 DESC 

مثال
  + ----- + ------------------------------ + ------------ -------- + --------------------
 |  # |  wait_event_type |  المدة |  ٪ dbtime
 + ----- + ------------------------------ + ------------ -------- + --------------------
 |  1 |  قفل |  08: 18: 19 |  6.07
 |  2 |  IO |  06: 16: 01 |  4.58
 |  3 |  مهلة |  02: 53: 21 |  2.11
 |  4 |  LWLock |  00: 58: 12 |  0.71
 |  5 |  العميل |  00: 01: 19 |  0.02
 |  6 |  IPC |  00: 00: 04 |  0
 + ----- + ------------------------------ + ------------ -------- + --------------------

مدة التوقعات ، لعمليات النظام والطلبات الفردية.

في انتظار عمليات النظام


تحقيق
 SELECT backend_type , datname , wait_event_type , wait_event , get_backend_type_waiting_duration( backend_type , wait_event_type , wait_event , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type != 'client backend' AND wait_event_type IS NOT NULL GROUP BY backend_type , datname , wait_event_type , wait_event ORDER BY 5 DESC 

مثال
  + ----- + ----------------------------- + ---------- + - ------------------ + ---------------------- + -------- ------------
 |  # |  backend_type |  dbname |  wait_event_type |  wait_event |  مدة
 + ----- + ----------------------------- + ---------- + - ------------------ + ---------------------- + -------- ------------
 |  1 |  قاذفة النسخ المتماثل المنطقي |  |  النشاط |  LogicalLauncherMain |  10:43:28
 |  2 |  قاذفة autov Vacuum |  |  النشاط |  AutoV VacuumMain |  10:42:49
 |  3 |  كاتب الخط |  |  النشاط |  والوريترمان |  10:28:53
 |  4 |  checkpointer |  |  النشاط |  CheckpointerMain |  10:23:50
 |  5 |  كاتب الخلفية |  |  النشاط |  BgWriterMain |  9:11:59
 |  6 |  كاتب الخلفية |  |  النشاط |  BgWriterHibernate |  1:37:46
 |  7 |  عامل مواز |  tdb1 |  IO |  BufFileWrite |  0:02:35
 |  8 |  عامل مواز |  tdb1 |  LWLock |  العازلة |  0:01:41
 |  9 |  عامل مواز |  tdb1 |  IO |  DataFileRead |  0:01:22
 |  10 |  عامل مواز |  tdb1 |  IO |  BufFileRead |  0:00:59
 |  11 |  كاتب الخط |  |  IO |  الكتابة |  0:00:57
 |  12 |  عامل مواز |  tdb1 |  LWLock |  buffer_io |  0:00:47
 |  13 |  عامل فراغ تلقائي |  tdb1 |  LWLock |  العازلة |  0:00:13
 |  14 |  كاتب الخلفية |  |  IO |  DataFileWrite |  0:00:12
 |  15 |  checkpointer |  |  IO |  DataFileWrite |  0:00:11
 |  16 |  كاتب الخط |  |  LWLock |  WALWriteLock |  0:00:09
 |  17 |  checkpointer |  |  LWLock |  WALWriteLock |  0:00:06
 |  18 |  كاتب الخلفية |  |  LWLock |  WALWriteLock |  0:00:06
 |  19 |  كاتب الخط |  |  IO |  WALInitWrite |  0:00:02
 |  20 |  عامل فراغ تلقائي |  tdb1 |  LWLock |  WALWriteLock |  0:00:02
 |  21 |  كاتب الخط |  |  IO |  WALInitSync |  0:00:02
 |  22 |  عامل فراغ تلقائي |  tdb1 |  IO |  DataFileRead |  0:00:01
 |  23 |  checkpointer |  |  IO |  ControlFileSyncUpdate |  0:00:01
 |  24 |  كاتب الخلفية |  |  IO |  الكتابة |  0:00:01
 |  25 |  كاتب الخلفية |  |  IO |  DataFileFlush |  0:00:01
 |  26 |  checkpointer |  |  IO |  SLRUFlushSync |  0:00:01
 |  27 |  عامل فراغ تلقائي |  tdb1 |  IO |  الكتابة |  0:00:01
 |  28 |  checkpointer |  |  IO |  DataFileSync |  0:00:01
 + ----- + ----------------------------- + ---------- + - ------------------ + ---------------------- + -------- ------------ 

الانتظار ل SQL - توقعات للاستعلامات الفردية التي كتبها queryid


تحقيق
 SELECT queryid , datname , wait_event_type , wait_event , get_query_waiting_duration( queryid , wait_event_type , wait_event , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration FROM activity_hist.archive_pg_stat_activity aa WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type = 'client backend' AND wait_event_type IS NOT NULL AND queryid IS NOT NULL GROUP BY queryid , datname , wait_event_type , wait_event ORDER BY 1 , 5 DESC 

مثال
  + ----- + ------------------------- + ---------- + ------ -------------- + -------------------- + -------------- ------ + --------------------
 |  # |  queryid |  dbname |  wait_event_type |  wait_event |  في انتظار |  مجموع
 |  |  |  |  |  |  المدة |  مدة
 + ----- + ------------------------- + ---------- + ------ -------------- + -------------------- + -------------- ------ + --------------------
 |  1 |  -8247416849404883188 |  tdb1 |  العميل |  ClientRead |  00: 00: 02 |
 |  2 |  -6572922443698419129 |  tdb1 |  العميل |  ClientRead |  00: 00: 05 |
 |  3 |  -6572922443698419129 |  tdb1 |  IO |  DataFileRead |  00: 00: 01 |
 |  4 |  -5917408132400665328 |  tdb1 |  العميل |  ClientRead |  00: 00: 04 |
 |  5 |  -4091009262735781873 |  tdb1 |  العميل |  ClientRead |  00: 00: 03 |
 |  6 |  -1473395109729441239 |  tdb1 |  العميل |  ClientRead |  00: 00: 01 |
 |  7 |  28942442626229688 |  tdb1 |  IO |  BufFileWrite |  00: 01: 34 |  0:46:06
 |  8 |  28942442626229688 |  tdb1 |  LWLock |  العازلة |  00: 01: 05 |  0:46:06
 |  9 |  28942442626229688 |  tdb1 |  IO |  DataFileRead |  00: 00: 44 |  0:46:06
 |  10 |  28942442626229688 |  tdb1 |  IO |  BufFileRead |  00: 00: 37 |  0:46:06
 |  11 |  28942442626229688 |  tdb1 |  LWLock |  buffer_io |  00: 00: 35 |  0:46:06
 |  12 |  28942442626229688 |  tdb1 |  العميل |  ClientRead |  00: 00: 05 |  0:46:06
 |  13 |  28942442626229688 |  tdb1 |  IPC |  MessageQueueReceive |  00: 00: 03 |  0:46:06
 |  14 |  28942442626229688 |  tdb1 |  IPC |  BgWorkerShutdown |  00: 00: 01 |  0:46:06
 |  15 |  389015618226997618 |  tdb1 |  قفل |  معاملة |  03: 55: 09 |  4:14:15
 |  16 |  389015618226997618 |  tdb1 |  IO |  DataFileRead |  03: 23: 09 |  4:14:15
 |  17 |  389015618226997618 |  tdb1 |  LWLock |  العازلة |  00: 12: 09 |  4:14:15
 |  18 |  389015618226997618 |  tdb1 |  LWLock |  buffer_io |  00: 10: 18 |  4:14:15
 |  19 |  389015618226997618 |  tdb1 |  قفل |  tuple |  00: 00: 35 |  4:14:15
 |  20 |  389015618226997618 |  tdb1 |  LWLock |  WALWriteLock |  00: 00: 02 |  4:14:15
 |  21 |  389015618226997618 |  tdb1 |  IO |  DataFileWrite |  00: 00: 01 |  4:14:15
 |  22 |  389015618226997618 |  tdb1 |  LWLock |  SyncScanLock |  00: 00: 01 |  4:14:15
 |  23 |  389015618226997618 |  tdb1 |  العميل |  ClientRead |  00: 00: 01 |  4:14:15
 |  24 |  734234407411547467 |  tdb1 |  العميل |  ClientRead |  00: 00: 11 |
 |  25 |  734234407411547467 |  tdb1 |  LWLock |  العازلة |  00: 00: 05 |
 |  26 |  734234407411547467 |  tdb1 |  IO |  DataFileRead |  00: 00: 02 |
 |  27 |  1237430309438971376 |  tdb1 |  LWLock |  العازلة |  00: 02: 18 |  2:45:40
 |  28 |  1237430309438971376 |  tdb1 |  IO |  DataFileRead |  00: 00: 27 |  2:45:40
 |  29 |  1237430309438971376 |  tdb1 |  العميل |  ClientRead |  00: 00: 02 |  2:45:40
 |  30 |  2404820632950544954 |  tdb1 |  العميل |  ClientRead |  00: 00: 01 |
 |  31 |  2515308626622579467 |  tdb1 |  العميل |  ClientRead |  00: 00: 02 |
 |  32 |  4710212362688288619 |  tdb1 |  LWLock |  العازلة |  00: 03: 08 |  2:18:21
 |  33 |  4710212362688288619 |  tdb1 |  IO |  DataFileRead |  00: 00: 22 |  2:18:21
 |  34 |  4710212362688288619 |  tdb1 |  العميل |  ClientRead |  00: 00: 06 |  2:18:21
 |  35 |  4710212362688288619 |  tdb1 |  LWLock |  buffer_io |  00: 00: 02 |  2:18:21
 |  36 |  9150846928388977274 |  tdb1 |  IO |  DataFileRead |  00: 01: 19 |
 |  37 |  9150846928388977274 |  tdb1 |  LWLock |  العازلة |  00: 00: 34 |
 |  38 |  9150846928388977274 |  tdb1 |  العميل |  ClientRead |  00: 00: 10 |
 |  39 |  9150846928388977274 |  tdb1 |  LWLock |  buffer_io |  00: 00: 01 |
 + ----- + ------------------------- + ---------- + ------ -------------- + -------------------- + -------------- ------ + -------------------- 

إحصائيات SQL عميل - استعلامات TOP


طلبات الاستلام مرة أخرى ، ومع ذلك ، تافهة وتوفير مساحة ، لا تعطى.

أمثلة
  + ------------------------------------------------- -----------------------------------
 |  عميل SQL مرتبة حسب الوقت المنقضي
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + --------------------
 |  الوقت المنقضي |  مكالمات |  ٪ dbtime |  ٪ وحدة المعالجة المركزية |  ٪ IO |  dbname |  queryid
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + --------------------
 |  04: 14: 15 |  19 |  3.1 |  10.83 |  11.52 |  tdb1 |  389015618226997618
 |  02: 45: 40 |  746 |  2.02 |  4.23 |  0.08 |  tdb1 |  1237430309438971376
 |  02: 18: 21 |  749 |  1.69 |  3.39 |  0.1 |  tdb1 |  4710212362688288619
 |  00: 46: 06 |  375 |  0.56 |  0.94 |  0.41 |  tdb1 |  28942442626229688
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + --------------------
 |  عميل SQL مرتبة حسب وقت وحدة المعالجة المركزية
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  وقت وحدة المعالجة المركزية |  مكالمات |  ٪ dbtime | total_time |  ٪ وحدة المعالجة المركزية |  ٪ IO |  dbname |  queryid
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  02: 59: 49 |  19 |  3.1 |  04: 14: 15 |  10.83 |  11.52 |  tdb1 |  389015618226997618
 |  01: 10: 12 |  746 |  2.02 |  02: 45: 40 |  4.23 |  0.08 |  tdb1 |  1237430309438971376
 |  00: 56: 15 |  749 |  1.69 |  02: 18: 21 |  3.39 |  0.1 |  tdb1 |  4710212362688288619
 |  00: 15: 35 |  375 |  0.56 |  00: 46: 06 |  0.94 |  0.41 |  tdb1 |  28942442626229688
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  عميل SQL مرتبة حسب المستخدم I / O وقت الانتظار
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  وقت io_wait |  مكالمات |  ٪ dbtime | total_time |  ٪ وحدة المعالجة المركزية |  ٪ IO |  dbname |  queryid
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  03: 23: 10 |  19 |  3.1 |  04: 14: 15 |  10.83 |  11.52 |  tdb1 |  389015618226997618
 |  00: 02: 54 |  375 |  0.56 |  00: 46: 06 |  0.94 |  0.41 |  tdb1 |  28942442626229688
 |  00: 00: 27 |  746 |  2.02 |  02: 45: 40 |  4.23 |  0.08 |  tdb1 |  1237430309438971376
 |  00: 00: 22 |  749 |  1.69 |  02: 18: 21 |  3.39 |  0.1 |  tdb1 |  4710212362688288619
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  عميل SQL مرتبة حسب قراءات المخازن المؤقتة المشتركة
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  يقرأ مخازن |  مكالمات |  ٪ dbtime | total_time |  ٪ وحدة المعالجة المركزية |  ٪ IO |  dbname |  queryid
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  1056388566 |  19 |  3.1 |  04: 14: 15 |  10.83 |  11.52 |  tdb1 |  389015618226997618
 |  11709251 |  375 |  0.56 |  00: 46: 06 |  0.94 |  0.41 |  tdb1 |  28942442626229688
 |  3439004 |  746 |  2.02 |  02: 45: 40 |  4.23 |  0.08 |  tdb1 |  1237430309438971376
 |  3373330 |  749 |  1.69 |  02: 18: 21 |  3.39 |  0.1 |  tdb1 |  4710212362688288619
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  عميل SQL مرتبة حسب القرص يقرأ الوقت
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  قراءة الوقت |  مكالمات |  ٪ dbtime | total_time |  ٪ وحدة المعالجة المركزية |  ٪ IO |  dbname |  queryid
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  02: 16: 30 |  19 |  3.1 |  04: 14: 15 |  10.83 |  11.52 |  tdb1 |  389015618226997618
 |  00: 04: 50 |  375 |  0.56 |  00: 46: 06 |  0.94 |  0.41 |  tdb1 |  28942442626229688
 |  00: 01: 10 |  749 |  1.69 |  02: 18: 21 |  3.39 |  0.1 |  tdb1 |  4710212362688288619
 |  00: 00: 57 |  746 |  2.02 |  02: 45: 40 |  4.23 |  0.08 |  tdb1 |  1237430309438971376
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  عميل SQL مرتبة حسب عمليات الإعدام
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  مكالمات |  الصفوف |  ٪ dbtime | total_time |  ٪ وحدة المعالجة المركزية |  ٪ IO |  dbname |  queryid
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  749 |  749 |  1.69 |  02: 18: 21 |  3.39 |  0.1 |  tdb1 |  4710212362688288619
 |  746 |  746 |  2.02 |  02: 45: 40 |  4.23 |  0.08 |  tdb1 |  1237430309438971376
 |  375 |  0 |  0.56 |  00: 46: 06 |  0.94 |  0.41 |  tdb1 |  28942442626229688
 |  19 |  19 |  3.1 |  04: 14: 15 |  10.83 |  11.52 |  tdb1 |  389015618226997618
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ -------- 

يؤدي


باستخدام الطلبات المقدمة والتقرير الناتج عنها ، يمكنك الحصول على صورة أكثر اكتمالاً لتحليل وحل مشكلات تدهور الأداء للطلبات الفردية والمجموعة بأكملها.

تنمية


حتى الآن ، خطط التطوير هي كما يلي:

  • تكملة الإبلاغ مع سجل القفل. يتم اختبار الطلبات وسيتم تقديمها قريبًا.
  • استخدم ملحق TimescaleDB لتخزين محفوظات pg_stat_activity و pg_locks.
  • قم بإعداد حل الدفعات على جيثب للنشر الشامل على قواعد الإنتاج.

أن تستمر ...

Source: https://habr.com/ru/post/ar467575/


All Articles