في محاولة لخلق التناظرية الرماد ل PostgreSQL

بيان المشكلة


لتحسين استعلامات PostgreSQL ، تعد القدرة على تحليل محفوظات النشاط ، ولا سيما - التوقعات ، والأقفال ، وإحصائيات الجدول ، مطلوبة للغاية.

الخيارات المتاحة


أداة تحليل الحملات التاريخية أو "AWR for Postgres" : حل مثير للاهتمام للغاية ، ولكن لا يوجد تاريخ من pg_stat_activity و pg_locks.

تمديد Pgsentinel :
" يتم تخزين كافة المعلومات المتراكمة في ذاكرة الوصول العشوائي فقط ، ويتم تنظيم كمية الذاكرة المستهلكة بعدد آخر السجلات المخزنة.

تتم إضافة حقل queryid - نفس queryid من ملحق pg_stat_statements (مطلوب تثبيت أولي). "

بالطبع ، سيساعد هذا الأمر إلى حد كبير ، ولكن مصدر الإزعاج هو الفقرة الأولى ، " يتم تخزين جميع المعلومات المتراكمة في ذاكرة الوصول العشوائي فقط " ، أي لدينا تأثير على القاعدة المستهدفة. بالإضافة إلى ذلك ، لا يوجد سجل تأمين وإحصائيات الجدول. أي بشكل عام ، الحل غير مكتمل: " لا توجد حزمة جاهزة للتثبيت بعد. يُقترح تنزيل المصادر وبناء المكتبة بنفسك. أولاً ، تحتاج إلى تثبيت الحزمة "devel" لخادمك وكتابة المسار إلى pg_config في متغير PATH. ".

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

تحذير.
نظرًا لحداثة الموضوع وعدم اكتمال فترة الاختبار ، فإن المقال مخصص للإرشاد فقط ، وليس كمجموعة من الملخصات والنتائج الوسيطة.
سيتم إعداد مواد أكثر تفصيلا في وقت لاحق ، في أجزاء.


الخطوط العريضة لمتطلبات الحل


من الضروري تطوير أداة لتخزين:

عرض تاريخ Pg_stat_activity
سجل قفل الجلسة باستخدام طريقة العرض pg_locks

متطلبات القرار هو تقليل التأثير على قاعدة البيانات الهدف.

الفكرة العامة هي أن وكيل جمع البيانات يتم إطلاقه ليس في قاعدة البيانات الهدف ، ولكن في قاعدة بيانات المراقبة كخدمة systemd. نعم ، من الممكن فقدان بعض البيانات ، لكن هذا ليس ضروريًا للإبلاغ ، لكن لا يوجد تأثير على قاعدة البيانات الهدف من الذاكرة ومساحة القرص. وفي حالة استخدام تجمع اتصال ، يكون التأثير على عمليات المستخدم ضئيلًا.

مراحل التنفيذ


1. الجداول الخدمة


لتخزين الجداول ، يتم استخدام مخطط منفصل حتى لا يعقد تحليل الجداول الرئيسية المستخدمة.

DROP SCHEMA IF EXISTS activity_hist ; CREATE SCHEMA activity_hist AUTHORIZATION monitor ; 

هام: لم يتم إنشاء المخطط في قاعدة البيانات الهدف ، ولكن في قاعدة بيانات المراقبة.

عرض تاريخ Pg_stat_activity


استخدم الجدول لتخزين اللقطات الحالية لطريقة العرض pg_stat_activity

activity_hist.history_pg_stat_activity:
 --ACTIVITY_HIST.HISTORY_PG_STAT_ACTIVITY DROP TABLE IF EXISTS activity_hist.history_pg_stat_activity; CREATE TABLE activity_hist.history_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 with time zone , xact_start timestamp with time zone , query_start timestamp with time zone , state_change timestamp with time zone , wait_event_type text , wait_event text , state text , backend_xid xid , backend_xmin xid , query text , backend_type text , queryid bigint ); 

لتسريع الإدراج - لا فهارس أو قيود.

لتخزين المحفوظات مباشرةً ، يتم استخدام جدول مقسم:

activity_hist.archive_pg_stat_activity:
 DROP TABLE IF EXISTS activity_hist.archive_pg_stat_activity; CREATE TABLE activity_hist.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 with time zone , xact_start timestamp with time zone , query_start timestamp with time zone , state_change timestamp with time zone , wait_event_type text , wait_event text , state text , backend_xid xid , backend_xmin xid , query text , backend_type text , queryid bigint ) PARTITION BY RANGE (timepoint); 

نظرًا لعدم وجود متطلبات لسرعة الإدراج في هذه الحالة ، تم إنشاء بعض الفهارس لتسريع إعداد التقارير.

جلسة قفل التاريخ


لتخزين لقطات قفل الجلسة الحالية ، استخدم الجدول:

activity_hist.history_locking:
 --ACTIVITY_HIST.HISTORY_LOCKING DROP TABLE IF EXISTS activity_hist.history_locking; CREATE TABLE activity_hist.history_locking ( timepoint timestamp without time zone , locktype text , relation oid , mode text , tid xid , vtid text , pid integer , blocking_pids integer[] , granted boolean ); 

أيضا ، لتسريع الإدراج - لا فهارس أو قيود.

لتخزين المحفوظات مباشرةً ، يتم استخدام جدول مقسم:

activity_hist.archive_locking:
 DROP TABLE IF EXISTS activity_hist.archive_locking; CREATE TABLE activity_hist.archive_locking ( timepoint timestamp without time zone , locktype text , relation oid , mode text , tid xid , vtid text , pid integer , blocking_pids integer[] , granted boolean ) PARTITION BY RANGE (timepoint); 

نظرًا لعدم وجود متطلبات لسرعة الإدراج في هذه الحالة ، تم إنشاء بعض الفهارس لتسريع إعداد التقارير.

2. ملء التاريخ الحالي


لالتقاط لقطات من العرض مباشرةً ، يتم استخدام برنامج نصي bash يقوم بتشغيل وظيفة plpgsql.

get_current_activity.sh
 #!/bin/bash ######################################################### #get_current_activity.sh ERROR_FILE='/home/demon/get_current_activity'$(date +%Y%m%d-)'T'$(date +%H)$(date +%M)$(date +%S) host=$1 s_name=$2 s_pass=$3 psql -A -t -q -v ON_ERROR_STOP=1 -c "SELECT activity_hist.get_current_activity( '$host' , '$s_name' , '$s_pass' )" >/dev/null 2>$ERROR_FILE line_count=`cat $ERROR_FILE | wc -l` if [[ $line_count != '0' ]]; then rm -f /home/demon/*.err >/dev/null 2>/dev/null cp $ERROR_FILE $ERROR_FILE'.err' >/dev/null 2>/dev/null fi rm $ERROR_FILE >/dev/null 2>/dev/null exit 0 

تقوم وظيفة plpgsql dblink بالوصول إلى طرق العرض في قاعدة البيانات الهدف وإدراج صفوف في جداول الخدمة في قاعدة بيانات المراقبة.

get_current_activity.sql
 CREATE OR REPLACE FUNCTION activity_hist.get_current_activity( current_host text , current_s_name text , current_s_pass text ) RETURNS BOOLEAN AS $$ DECLARE database_rec record; dblink_str text ; BEGIN EXECUTE 'SELECT dblink_connect(''LINK1'',''host='||current_host||' port=5432 dbname=postgres'|| ' user='||current_s_name||' password='||current_s_pass|| ' '')'; -------------------------------------------------------------------- --GET pg_stat_activity stats INSERT INTO activity_hist.history_pg_stat_activity ( SELECT * FROM dblink('LINK1', 'SELECT now() , datid , datname , pid , usesysid , usename , application_name , client_addr , client_hostname , client_port , backend_start , xact_start , query_start , state_change , wait_event_type , wait_event , state , backend_xid , backend_xmin , query , backend_type FROM pg_stat_activity ') AS t ( 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 with time zone , xact_start timestamp with time zone , query_start timestamp with time zone , state_change timestamp with time zone , wait_event_type text , wait_event text , state text , backend_xid xid , backend_xmin xid , query text , backend_type text ) ); --------------------------------------- --ACTIVITY_HIST.HISTORY_LOCKING INSERT INTO activity_hist.history_locking ( SELECT * FROM dblink('LINK1', 'SELECT now() , lock.locktype, lock.relation, lock.mode, lock.transactionid as tid, lock.virtualtransaction as vtid, lock.pid, pg_blocking_pids(lock.pid), lock.granted FROM pg_catalog.pg_locks lock LEFT JOIN pg_catalog.pg_database db ON db.oid = lock.database WHERE NOT lock.pid = pg_backend_pid() ') AS t ( timepoint timestamp without time zone , locktype text , relation oid , mode text , tid xid , vtid text , pid integer , blocking_pids integer[] , granted boolean ) ); PERFORM dblink_disconnect('LINK1'); RETURN TRUE ; END $$ LANGUAGE plpgsql; 

لجمع لقطات من العرض ، يتم استخدام خدمة systemd ، واثنين من البرامج النصية:

pg_current_activity.service
 # /etc/systemd/system/pg_current_activity.service [Unit] Description=Collect history of pg_stat_activity , pg_locks Wants=pg_current_activity.timer [Service] Type=forking StartLimitIntervalSec=0 ExecStart=/home/postgres/pgutils/demon/get_current_activity.sh XXXX postgres postgres [Install] WantedBy=multi-user.target 

pg_current_activity.timer
 # /etc/systemd/system/pg_current_activity.timer [Unit] Description=Run pg_current_activity.sh every 1 second Requires=pg_current_activity.service [Timer] Unit=pg_current_activity.service OnCalendar=*:*:0/1 AccuracySec=1 [Install] WantedBy=timers.target 


تعيين حقوق البرامج النصية:
# chmod 755 pg_current_activity.timer
# chmod 755 pg_current_activity.service

نبدأ الخدمة:
# systemctl الخفي إعادة تحميل
# systemctl start pg_current_activity.service

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

من الضروري تنظيم أرشفة البيانات.

3. أرشفة التاريخ


للأرشفة ، يتم استخدام الجداول المقسمة *.

يتم إنشاء أقسام جديدة كل ساعة ، بينما يتم حذف البيانات القديمة من الجداول * ، لذلك لا يتغير حجم السجل * الجداول كثيرًا ولا تتناقص سرعة الإدراج مع مرور الوقت.

يتم تنفيذ إنشاء أقسام جديدة بواسطة دالة plpgsql activity_hist.archive_current_activity. خوارزمية العملية بسيطة للغاية (باستخدام مثال القسم لجدول archive_pg_stat_activity).

إنشاء وملء قسم جديد
 EXECUTE format( 'CREATE TABLE ' || partition_name || ' PARTITION OF activity_hist.archive_pg_stat_activity FOR VALUES FROM ( %L ) TO ( %L ) ' , to_char(date_trunc('year', partition_min_range ),'YYYY')||'-'|| to_char(date_trunc('month', partition_min_range ),'MM')||'-'|| to_char(date_trunc('day', partition_min_range ),'DD')||' '|| to_char(date_trunc('hour', partition_min_range ),'HH24')||':00', to_char(date_trunc('year', partition_max_range ),'YYYY')||'-'|| to_char(date_trunc('month', partition_max_range ),'MM')||'-'|| to_char(date_trunc('day', partition_max_range ),'DD')||' '|| to_char(date_trunc('hour', partition_max_range ),'HH24')||':00' ); INSERT INTO activity_hist.archive_pg_stat_activity ( SELECT * FROM activity_hist.history_pg_stat_activity WHERE timepoint BETWEEN partition_min_range AND partition_max_range ); 

إنشاء الفهارس
 EXECUTE format ( 'CREATE INDEX '||index_name|| ' ON '||partition_name||' ( wait_event_type , backend_type , timepoint )' ); EXECUTE format ('CREATE INDEX '||index_name|| ' ON '||partition_name||' ( wait_event_type , backend_type , timepoint , queryid )' ); 

احذف البيانات القديمة من جدول history_pg_stat_activity
 DELETE FROM activity_hist.history_pg_stat_activity WHERE timepoint < partition_max_range; 

بالطبع ، يتم حذف الأقسام القديمة بشكل دوري باعتبارها غير ضرورية.

التقارير الأساسية


في الواقع ، لماذا يتم كل هذا. لتلقي التقارير عن بُعد جدًا ، تذكرنا تقريبًا بـ Oracle AWR.
من المهم أن تضيف أنه من أجل تلقي التقارير ، من الضروري بناء علاقة بين عرضي pg_stat_activity و pg_stat_statements. يتم ربط الجداول عن طريق إضافة عمود "queryid" إلى الجداول "history_pg_stat_activity" ، "archive_pg_stat_activity". طريقة إضافة قيمة عمود خارج نطاق هذه المقالة ، وهي موصوفة هنا - pg_stat_statements + pg_stat_activity + loq_query = pg_ash؟ .

إجمالي وقت وحدة المعالجة المركزية للاستعلام


الاستعلام:
 WITH hist AS ( SELECT aa.query ,aa.queryid , count(*) * interval '1 second' 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 datname != 'postgres' AND ( aa.wait_event_type IS NULL ) ANDaa.state = 'active' GROUP BY aa.wait_event_type , aa.wait_event , aa.query ,aa.queryid UNION SELECT ha.query ,ha.queryid, count(*) * interval '1 second' AS duration FROM activity_hist.history_pg_stat_activity_for_reports ha 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 datname != 'postgres' AND ( ha.wait_event_type IS NULL )AND ha.state = 'active' GROUP BY ha.wait_event_type , ha.wait_event , ha.query ,ha.queryid ) SELECT query , queryid , SUM( duration ) as duration FROM hist GROUP BY query , queryid ORDER BY 3 DESC فاصل ' WITH hist AS ( SELECT aa.query ,aa.queryid , count(*) * interval '1 second' 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 datname != 'postgres' AND ( aa.wait_event_type IS NULL ) ANDaa.state = 'active' GROUP BY aa.wait_event_type , aa.wait_event , aa.query ,aa.queryid UNION SELECT ha.query ,ha.queryid, count(*) * interval '1 second' AS duration FROM activity_hist.history_pg_stat_activity_for_reports ha 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 datname != 'postgres' AND ( ha.wait_event_type IS NULL )AND ha.state = 'active' GROUP BY ha.wait_event_type , ha.wait_event , ha.query ,ha.queryid ) SELECT query , queryid , SUM( duration ) as duration FROM hist GROUP BY query , queryid ORDER BY 3 DESC * فاصل ' WITH hist AS ( SELECT aa.query ,aa.queryid , count(*) * interval '1 second' 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 datname != 'postgres' AND ( aa.wait_event_type IS NULL ) ANDaa.state = 'active' GROUP BY aa.wait_event_type , aa.wait_event , aa.query ,aa.queryid UNION SELECT ha.query ,ha.queryid, count(*) * interval '1 second' AS duration FROM activity_hist.history_pg_stat_activity_for_reports ha 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 datname != 'postgres' AND ( ha.wait_event_type IS NULL )AND ha.state = 'active' GROUP BY ha.wait_event_type , ha.wait_event , ha.query ,ha.queryid ) SELECT query , queryid , SUM( duration ) as duration FROM hist GROUP BY query , queryid ORDER BY 3 DESC الخلفية "وdatname! =' بوستجرس 'AND (aa.wait_event_type باطل) ANDaa.state = WITH hist AS ( SELECT aa.query ,aa.queryid , count(*) * interval '1 second' 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 datname != 'postgres' AND ( aa.wait_event_type IS NULL ) ANDaa.state = 'active' GROUP BY aa.wait_event_type , aa.wait_event , aa.query ,aa.queryid UNION SELECT ha.query ,ha.queryid, count(*) * interval '1 second' AS duration FROM activity_hist.history_pg_stat_activity_for_reports ha 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 datname != 'postgres' AND ( ha.wait_event_type IS NULL )AND ha.state = 'active' GROUP BY ha.wait_event_type , ha.wait_event , ha.query ,ha.queryid ) SELECT query , queryid , SUM( duration ) as duration FROM hist GROUP BY query , queryid ORDER BY 3 DESC 

مثال:
 ------------------------------------------------------------------- | TOTAL CPU TIME FOR QUERIES : 07:47:36 +----+----------------------------------------+-------------------- | #| queryid| duration +----+----------------------------------------+-------------------- | 1| 389015618226997618| 04:28:58 | 2| | 01:07:29 | 3| 1237430309438971376| 00:59:38 | 4| 4710212362688288619| 00:50:48 | 5| 28942442626229688| 00:15:50 | 6| 9150846928388977274| 00:04:46 | 7| -6572922443698419129| 00:00:06 | 8| | 00:00:01 +----+----------------------------------------+-------------------- 


إجمالي فترات الانتظار لطلبات البحث


الاستعلام:
 WITH hist AS ( SELECT aa.query ,aa.queryid , count(*) * interval '1 second' 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 datname != 'postgres' AND ( aa.wait_event_type IS NOT NULL ) GROUP BY aa.wait_event_type , aa.wait_event , aa.query ,aa.queryid UNION SELECT ha.query ,ha.queryid, count(*) * interval '1 second' AS duration FROM activity_hist.history_pg_stat_activity_for_reports ha 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 datname != 'postgres' AND ( ha.wait_event_type IS NOT NULL ) GROUP BY ha.wait_event_type , ha.wait_event , ha.query ,ha.queryid ) SELECT query , queryid , SUM( duration ) as duration FROM hist GROUP BY query , queryid ORDER BY 3 DESC 

مثال:
 ------------------------------------------------------------------- | TOTAL WAITINGS TIME FOR QUERIES : 21:55:04 +----+----------------------------------------+-------------------- | #| queryid| duration +----+----------------------------------------+-------------------- | 1| 389015618226997618| 16:19:05 | 2| | 03:47:04 | 3| 8085340880788646241| 00:40:20 | 4| 4710212362688288619| 00:13:35 | 5| 9150846928388977274| 00:12:25 | 6| 28942442626229688| 00:11:32 | 7| 1237430309438971376| 00:09:45 | 8| 2649515222348904837| 00:09:37 | 9| | 00:03:45 | 10| 3167065002719415275| 00:02:20 | 11| 5731212217001535134| 00:02:13 | 12| 8304755792398128062| 00:01:31 | 13| 2649515222348904837| 00:00:59 | 14| 2649515222348904837| 00:00:22 | 15| | 00:00:12 | 16| 3422818749220588372| 00:00:08 | 17| -5730801771815999400| 00:00:03 | 18| -1473395109729441239| 00:00:02 | 19| 2404820632950544954| 00:00:02 | 20| -6572922443698419129| 00:00:02 | 21| 2369289265278398647| 00:00:01 | 22| 180077086776069052| 00:00:01 +----+----------------------------------------+-------------------- 

في انتظار الاستفسارات


عمليات البحث ذات الصلة:
 WITH hist AS ( SELECT aa.wait_event_type , aa.wait_event 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 datname != 'postgres' AND aa.wait_event IS NOT NULL GROUP BY aa.wait_event_type , aa.wait_event UNION SELECT ha.wait_event_type , ha.wait_event FROM activity_hist.history_pg_stat_activity_for_reports ha 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 datname != 'postgres' AND ha.wait_event IS NOT NULL GROUP BY ha.wait_event_type , ha.wait_event ) SELECT wait_event_type , wait_event FROM hist GROUP BY wait_event_type , wait_event ORDER BY 1 ASC,2 ASC ---------------------------------------------------------------------- WITH hist AS ( SELECT aa.wait_event_type , aa.wait_event , aa.query ,aa.queryid , count(*) * interval '1 second' 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 datname != 'postgres' AND ( aa.wait_event_type = waitings_stat_rec.wait_event_type AND aa.wait_event = waitings_stat_rec.wait_event ) GROUP BY aa.wait_event_type , aa.wait_event , aa.query ,aa.queryid UNION SELECT ha.wait_event_type , ha.wait_event , ha.query ,ha.queryid, count(*) * interval '1 second' AS duration FROM activity_hist.history_pg_stat_activity_for_reports ha 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 datname != 'postgres' AND ( ha.wait_event_type = waitings_stat_rec.wait_event_type AND ha.wait_event = waitings_stat_rec.wait_event ) GROUP BY ha.wait_event_type , ha.wait_event , ha.query ,ha.queryid ) SELECT query , queryid , SUM( duration ) as duration FROM hist GROUP BY query , queryid ORDER BY 3 DESC 

مثال:
 ------------------------------------------------ | WAITINGS FOR QUERIES +----------------------------------------------- | wait_event_type = Client| | wait_event = ClientRead| | Total time = 00:46:56| ------------------------------------------------ | #| queryid| duration +-----+--------------------+-------------------- | 1| 8085340880788646241| 00:40:20 | 2| | 00:03:45 | 3| 5731212217001535134| 00:01:53 | 4| | 00:00:12 | 5| 9150846928388977274| 00:00:09 | 6| 3422818749220588372| 00:00:08 | 7| 1237430309438971376| 00:00:06 | 8| 28942442626229688| 00:00:05 | 9| 4710212362688288619| 00:00:05 | 10|-5730801771815999400| 00:00:03 | 11| 8304755792398128062| 00:00:02 | 12|-6572922443698419129| 00:00:02 | 13|-1473395109729441239| 00:00:02 | 14| 2404820632950544954| 00:00:02 | 15| 180077086776069052| 00:00:01 | 16| 2369289265278398647| 00:00:01 +----------------------------------------------- | wait_event_type = IO| | wait_event = BufFileRead| | Total time = 00:00:38| ------------------------------------------------ | #| queryid| duration +-----+--------------------+-------------------- | 1| 28942442626229688| 00:00:38 +----------------------------------------------- 

تاريخ العمليات المقفلة


الاستعلام:
 SELECT MIN(date_trunc('second',timepoint)) AS started , count(*) * interval '1 second' as duration , pid , blocking_pids , relation , mode , locktype FROM activity_hist.archive_locking al 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 NOT granted AND locktype = 'relation' GROUP BY pid , blocking_pids , relation , mode , locktype UNION SELECT MIN(date_trunc('second',timepoint)) AS started , count(*) * interval '1 second' as duration , pid , blocking_pids , relation , mode , locktype FROM activity_hist.history_locking 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 NOT granted AND locktype = 'relation' GROUP BY pid , blocking_pids , relation , mode , locktype ORDER BY 1 

مثال:
  -------------------------------------------------- -------------------------------------------------- ---------------------------------
 |  تاريخ العمليات المقفلة
 + ----- + ---------- + -------------------- + ---------- + -------------------- + -------------------- + -------- ------------ + --------------------
 |  # |  PID |  بدأ |  المدة |  blocking_pids |  العلاقة |  وضع |  locktype
 + ----- + ---------- + -------------------- + ---------- + -------------------- + -------------------- + -------- ------------ + --------------------
 |  1 |  26224 |  2019-09-02 19: 32: 16 |  00: 01: 45 |  {26211} |  16541 |  AccessShareLock |  علاقة
 |  2 |  26390 |  2019-09-02 19: 34: 03 |  00: 00: 53 |  {26211} |  16541 |  AccessShareLock |  علاقة
 |  3 |  26391 |  2019-09-02 19: 34: 03 |  00: 00: 53 |  {26211} |  16541 |  AccessShareLock |  علاقة
 |  4 |  26531 |  2019-09-02 19: 35: 27 |  00: 00: 12 |  {26211} |  16541 |  AccessShareLock |  علاقة
 |  5 |  27284 |  2019-09-02 19: 44: 02 |  00: 00: 19 |  {27276} |  16541 |  AccessShareLock |  علاقة
 |  6 |  27283 |  2019-09-02 19: 44: 02 |  00: 00: 19 |  {27276} |  16541 |  AccessShareLock |  علاقة
 |  7 |  27286 |  2019-09-02 19: 44: 02 |  00: 00: 19 |  {27276} |  16541 |  AccessShareLock |  علاقة
 |  8 |  27423 |  2019-09-02 19:45:24 |  00: 00: 12 |  {27394} |  16541 |  AccessShareLock |  علاقة
 |  9 |  27648 |  2019-09-02 19: 48: 06 |  00: 00: 20 |  {27647} |  16541 |  AccessShareLock |  علاقة
 |  10 |  27650 |  2019-09-02 19: 48: 06 |  00: 00: 20 |  {27647} |  16541 |  AccessShareLock |  علاقة
 |  11 |  27735 |  2019-09-02 19: 49: 08 |  00: 00: 06 |  {27650} |  16541 |  AccessExclusiveLock |  علاقة
 |  12 |  28380 |  2019-09-02 19: 56: 03 |  00: 01: 56 |  {28379} |  16541 |  AccessShareLock |  علاقة
 |  13 |  28379 |  2019-09-02 19: 56: 03 |  00: 00: 01 |  28377 |  16541 |  AccessExclusiveLock |  علاقة
 |  |  |  |  |  28376 |  | 

حظر عمليات التاريخ


عمليات البحث ذات الصلة:
 SELECT blocking_pids FROM activity_hist.archive_locking al 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 NOT granted AND locktype = 'relation' GROUP BY blocking_pids UNION SELECT blocking_pids FROM activity_hist.history_locking 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 NOT granted AND locktype = 'relation' GROUP BY blocking_pids ORDER BY 1 --------------------------------------------------------------- SELECT pid , usename , application_name , datname , MIN(date_trunc('second',timepoint)) as started , count(*) * interval '1 second' as duration , state , query FROM activity_hist.archive_pg_stat_activity WHERE pid= current_pid AND timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') GROUP BY pid , usename , application_name , datname , state_change, state , query UNION SELECT pid , usename , application_name , datname , MIN(date_trunc('second',timepoint)) as started , count(*) * interval '1 second' as duration , state , query FROM activity_hist.history_pg_stat_activity_for_reports WHERE pid= current_pid AND timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') GROUP BY pid , usename , application_name , datname , state_change, state , query ORDER BY 5 , 1 

مثال:
  -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -----------------------
 حظر عمليات التاريخ
 + ---- + ---------- + ---------- + -------------------- + - --------- + -------------------- + ------------------- - + ------------------------------ + ----------------- -----------------------
 |  # |  PID |  اسم المستخدم |  application_name |  البيانات |  بدأ |  المدة |  الدولة |  سؤال
 + ---- + ---------- + ---------- + -------------------- + - --------- + -------------------- + ------------------- - + ------------------------------ + ----------------- -----------------------
 |  1 |  26211 |  tuser |  psql |  tdb1 |  2019-09-02 19: 31: 54 |  00: 00: 04 |  الخمول |
 |  2 |  26211 |  tuser |  psql |  tdb1 |  2019-09-02 19: 31: 58 |  00: 00: 06 |  الخمول في المعاملة |  تبدأ.
 |  3 |  26211 |  tuser |  psql |  tdb1 |  2019-09-02 19: 32: 16 |  00: 01: 45 |  الخمول في المعاملة |  قفل الجدول wafer_data.
 |  4 |  26211 |  tuser |  psql |  tdb1 |  2019-09-02 19: 35: 54 |  00: 01: 23 |  الخمول |  الالتزام.
 |  5 |  26211 |  tuser |  psql |  tdb1 |  2019-09-02 19: 38: 46 |  00: 00: 02 |  الخمول في المعاملة |  تبدأ.
 |  6 |  26211 |  tuser |  psql |  tdb1 |  2019-09-02 19: 38: 54 |  00: 00: 08 |  الخمول في المعاملة |  قفل الجدول wafer_data.
 |  7 |  26211 |  tuser |  psql |  tdb1 |  2019-09-02 19: 39: 08 |  00: 42: 42 |  الخمول |  الالتزام.
 |  8 |  26211 |  tuser |  psql |  tdb1 |  2019-09-03 07: 12: 07 |  00: 00: 52 |  نشط |  حدد test_del () ؛


التنمية.


الاستعلامات الأساسية المبينة والتقارير المستلمة تبسط الحياة بالفعل عند تحليل حوادث الأداء.
استنادًا إلى الاستعلامات الأساسية ، يمكنك الحصول على تقرير يذكرك تقريباً بـ Oracle AWR.
تقرير ملخص العينة
  + ------------------------------------------------- -----------------------------------
 |  التقرير الموحد للنشاط والانتظار.  التاريخ: 09/03/2019 14:08
 | ------------------------------------------------- -----------------------------------
 |  المضيف: XXXX
 |  BEGIN_SNAPSHOT: 09/02/2019 14:08 END_SNAPSHOT: 09/03/2019 14:00
 | ------------------------------------------------- -----------------------------------
 |  حجم قاعدة البيانات الحالية:
 |  قاعدة البيانات: الشاشة
 |  الحجم (MB): 1370.00
 | ------------------------------------------------- -----------------------------------
 |  الكتلة وحدة المعالجة المركزية الوقت: 19:44:22
 |  وقت انتظار المجموعة: 78:49:16
 |
 |  SQL DBTIME: 65:53:09
 |  مزود وحدة المعالجة المركزية الوقت: 19:05:21
 |  وقت انتظار SQL: 21:50:46
 |  SQL IOTIME: 20:53:00
 |  SQL قراءة الوقت: 20:52:55
 |  وقت كتابة SQL: 00:00:05
 |
 |  مكالمات SQL: 311293
 -------------------------------------------------- -----------
 |  تقرأ كتل SQL المشتركة: 13351563334
 |  كتل حصة SQL: 2775427045
 |  كتل SQL المشتركة ضرب / قراءة٪: 20.79
 |  كتل SQL المشتركة: 21105
 |  تمت مشاركة كتل SQL المكتوبة: 3656
 |
 |  كتل SQL المؤقتة تقرأ: 7464932
 |  كتب SQL المؤقتة: 10176024
 -------------------------------------------------- -----------
 |
 |  إحصائيات الانتظار
 |
 + ------------------------------------------------- -----------------------------------
 |  أفضل 10 عمليات انتظار حسب إجمالي وقت الانتظار لعمليات النظام
 + ----- + ------------------------------ + ------------ -------- + --------------------
 |  # |  wait_event_type |  wait_event |  مدة
 + ----- + ------------------------------ + ------------ -------- + --------------------
 |  1 |  النشاط |  LogicalLauncherMain |  11:21:01
 |  2 |  النشاط |  CheckpointerMain |  11:20:35
 |  3 |  النشاط |  AutoV VacuumMain |  11:20:31
 |  4 |  النشاط |  والوريترمان |  11:19:35
 |  5 |  النشاط |  BgWriterMain |  10:14:19
 |  6 |  النشاط |  BgWriterHibernate |  1:06:04
 |  7 |  النشاط |  WalSenderMain |  0:04:05
 |  8 |  العميل |  ClientWrite |  0:04:00
 |  9 |  IO |  BufFileWrite |  0:02:45
 |  10 |  LWLock |  العازلة |  0:02:14
 + ----- + ------------------------------ + ------------ -------- + --------------------
 |  أفضل 10 عمليات انتظار حسب إجمالي وقت الانتظار لعمليات العملاء
 + ----- + ------------------------------ + ------------ -------- + -------------------- + ----------
 |  # |  wait_event_type |  wait_event |  المدة |  ٪ dbtime
 + ----- + ------------------------------ + ------------ -------- + -------------------- + ----------
 |  1 |  قفل |  معاملة |  11: 55: 37 |  18.1
 |  2 |  IO |  DataFileRead |  07: 19: 43 |  11.12
 |  3 |  العميل |  ClientRead |  00: 46: 54 |  1.19
 |  4 |  قفل |  العلاقة |  00: 40: 37 |  1.03
 |  5 |  LWLock |  العازلة |  00: 31: 08 |  0.79
 |  6 |  LWLock |  buffer_io |  00: 22: 12 |  0.56
 |  7 |  مهلة |  PgSleep |  00: 10: 58 |  0.28
 |  8 |  قفل |  tuple |  00: 01: 30 |  0.04
 |  9 |  IO |  BufFileWrite |  00: 01: 16 |  0.03
 |  10 |  IO |  BufFileRead |  00: 00: 37 |  0.02
 + ----- + ------------------------------ + ------------ -------- + -------------------- + ----------
 |  أنواع الانتظار بوقت الانتظار الكلي ، لعمليات النظام
 + ----- + ------------------------------ + ------------ --------
 |  # |  wait_event_type |  مدة
 + ----- + ------------------------------ + ------------ --------
 |  1 |  النشاط |  56:46:10
 |  2 |  IO |  0:05:13
 |  3 |  العميل |  0:04:00
 |  4 |  LWLock |  0:03:07
 + ----- + ------------------------------ + ------------ --------
 |  أنواع الانتظار في إجمالي وقت الانتظار ، لعمليات العملاء
 + ----- + ------------------------------ + ------------ -------- + --------------------
 |  # |  wait_event_type |  المدة |  ٪ dbtime
 + ----- + ------------------------------ + ------------ -------- + --------------------
 |  1 |  قفل |  12: 37: 44 |  19.17
 |  2 |  IO |  07: 21: 40 |  11.17
 |  3 |  LWLock |  00: 53: 26 |  1.35
 |  4 |  العميل |  00: 46: 54 |  1.19
 |  5 |  مهلة |  00: 10: 58 |  0.28
 |  6 |  IPC |  00: 00: 04 |  0
 + ----- + ------------------------------ + ------------ -------- + --------------------
 |  في انتظار عمليات النظام
 + ----- + ----------------------------- + ---------- + - ------------------ + ---------------------- + -------- ------------
 |  # |  backend_type |  dbname |  wait_event_type |  wait_event |  مدة
 + ----- + ----------------------------- + ---------- + - ------------------ + ---------------------- + -------- ------------
 |  1 |  قاذفة النسخ المتماثل المنطقي |  |  النشاط |  LogicalLauncherMain |  11:21:01
 |  2 |  checkpointer |  |  النشاط |  CheckpointerMain |  11:20:35
 |  3 |  قاذفة autov Vacuum |  |  النشاط |  AutoV VacuumMain |  11:20:31
 |  4 |  كاتب الخط |  |  النشاط |  والوريترمان |  11:19:35
 |  5 |  كاتب الخلفية |  |  النشاط |  BgWriterMain |  10:14:19
 |  6 |  كاتب الخلفية |  |  النشاط |  BgWriterHibernate |  1:06:04
 |  7 |  walsender |  |  النشاط |  WalSenderMain |  0:04:05
 |  8 |  walsender |  |  العميل |  ClientWrite |  0:04:00
 |  9 |  عامل مواز |  tdb1 |  IO |  BufFileWrite |  0:02:45
 |  10 |  عامل مواز |  tdb1 |  LWLock |  العازلة |  0:02:05
 |  11 |  عامل مواز |  tdb1 |  IO |  DataFileRead |  0:01:10
 |  12 |  عامل مواز |  tdb1 |  IO |  BufFileRead |  0:01:05
 |  13 |  عامل مواز |  tdb1 |  LWLock |  buffer_io |  0:00:45
 |  14 |  عامل فراغ تلقائي |  tdb1 |  LWLock |  العازلة |  0:00:09
 |  15 |  كاتب الخط |  |  IO |  الكتابة |  0:00:08
 |  16 |  كاتب الخط |  |  LWLock |  WALWriteLock |  0:00:04
 |  17 |  كاتب الخلفية |  |  LWLock |  WALWriteLock |  0:00:03
 |  18 |  كاتب الخلفية |  |  IO |  الكتابة |  0:00:02
 |  19 |  كاتب الخلفية |  |  IO |  DataFileWrite |  0:00:02
 |  20 |  checkpointer |  |  IO |  ControlFileSyncUpdate |  0:00:01
 |  21 |  عامل فراغ تلقائي |  tdb1 |  LWLock |  buffer_io |  0:00:01
 + ----- + ----------------------------- + ---------- + - ------------------ + ---------------------- + -------- ------------
 |  في انتظار SQL
 + ----- + ------------------------- + ---------- + ------ -------------- + -------------------- + -------------- ------ + ----------
 |  # |  queryid |  dbname |  wait_event_type |  wait_event |  المدة |  ٪ dbtime
 + ----- + ------------------------- + ---------- + ------ -------------- + -------------------- + -------------- ------ + ----------
 |  1 |  389015618226997618 |  tdb1 |  قفل |  معاملة |  09: 47: 43 |  14.87
 |  2 |  389015618226997618 |  tdb1 |  IO |  DataFileRead |  05: 47: 07 |  8.78
 |  3 |  |  tdb1 |  قفل |  معاملة |  02: 07: 54 |  3.24
 |  4 |  |  tdb1 |  IO |  DataFileRead |  01: 30: 24 |  2.29
 |  5 |  8085340880788646241 |  tdb1 |  العميل |  ClientRead |  00: 40: 20 |  1.02
 |  6 |  389015618226997618 |  tdb1 |  LWLock |  العازلة |  00: 20: 41 |  0.52
 |  7 |  389015618226997618 |  tdb1 |  LWLock |  buffer_io |  00: 17: 30 |  0.44
 |  8 |  2649515222348904837 |  tdb1 |  مهلة |  PgSleep |  00: 10: 58 |  0.28
 |  9 |  4710212362688288619 |  tdb1 |  قفل |  العلاقة |  00: 10: 44 |  0.27
 |  10 |  9150846928388977274 |  tdb1 |  قفل |  العلاقة |  00: 10: 24 |  0.26
 |  11 |  28942442626229688 |  tdb1 |  قفل |  العلاقة |  00: 07: 48 |  0.2
 |  12 |  1237430309438971376 |  tdb1 |  قفل |  العلاقة |  00: 07: 32 |  0.19
 |  13 |  |  tdb1 |  LWLock |  العازلة |  00: 04: 32 |  0.11
 |  14 |  |  tdb1 |  LWLock |  buffer_io |  00: 04: 13 |  0.11
 |  15 |  |  tdb1 |  العميل |  ClientRead |  00: 03: 57 |  0.1
 |  16 |  4710212362688288619 |  tdb1 |  LWLock |  العازلة |  00: 02: 26 |  0.06
 |  17 |  3167065002719415275 |  tdb1 |  قفل |  العلاقة |  00: 02: 20 |  0.06
 |  18 |  5731212217001535134 |  tdb1 |  العميل |  ClientRead |  00: 01: 53 |  0.05
 |  19 |  1237430309438971376 |  tdb1 |  LWLock |  العازلة |  00: 01: 42 |  0.04
 |  20 |  389015618226997618 |  tdb1 |  قفل |  tuple |  00: 01: 30 |  0.04
 |  21 |  8304755792398128062 |  tdb1 |  قفل |  العلاقة |  00: 01: 29 |  0.04
 |  22 |  28942442626229688 |  tdb1 |  IO |  BufFileWrite |  00: 01: 16 |  0.03
 |  23 |  9150846928388977274 |  tdb1 |  IO |  DataFileRead |  00: 01: 07 |  0.03
 |  24 |  28942442626229688 |  tdb1 |  LWLock |  العازلة |  00: 01: 03 |  0.03
 |  25 |  9150846928388977274 |  tdb1 |  LWLock |  العازلة |  00: 00: 44 |  0.02
 |  26 |  28942442626229688 |  tdb1 |  IO |  BufFileRead |  00: 00: 37 |  0.02
 |  27 |  28942442626229688 |  tdb1 |  LWLock |  buffer_io |  00: 00: 25 |  0.01
 |  28 |  1237430309438971376 |  tdb1 |  IO |  DataFileRead |  00: 00: 24 |  0.01
 |  29 |  28942442626229688 |  tdb1 |  IO |  DataFileRead |  00: 00: 22 |  0.01
 |  30 |  5731212217001535134 |  tdb1 |  قفل |  العلاقة |  00: 00: 20 |  0.01
 |  31 |  4710212362688288619 |  tdb1 |  IO |  DataFileRead |  00: 00: 19 |  0.01
 |  32 |  9150846928388977274 |  tdb1 |  العميل |  ClientRead |  00: 00: 09 |  0
 |  33 |  3422818749220588372 |  tdb1 |  العميل |  ClientRead |  00: 00: 08 |  0
 |  34 |  1237430309438971376 |  tdb1 |  العميل |  ClientRead |  00: 00: 06 |  0
 |  35 |  389015618226997618 |  tdb1 |  LWLock |  المخزن المؤقت |  00: 00: 05 |  0
 |  36 |  4710212362688288619 |  tdb1 |  العميل |  ClientRead |  00: 00: 05 |  0
 |  37 |  4710212362688288619 |  tdb1 |  LWLock |  buffer_io |  00: 00: 04 |  0
 |  38 |  28942442626229688 |  tdb1 |  العميل |  ClientRead |  00: 00: 04 |  0
 |  39 |  28942442626229688 |  tdb1 |  IPC |  ParallelFinish |  00: 00: 03 |  0
 |  40 |  389015618226997618 |  tdb1 |  IO |  DataFileWrite |  00: 00: 02 |  0
 |  41 |  -5730801771815999400 |  tdb1 |  العميل |  ClientRead |  00: 00: 02 |  0
 |  42 |  2404820632950544954 |  tdb1 |  العميل |  ClientRead |  00: 00: 02 |  0
 |  43 |  -6572922443698419129 |  tdb1 |  العميل |  ClientRead |  00: 00: 02 |  0
 |  44 |  8304755792398128062 |  tdb1 |  العميل |  ClientRead |  00: 00: 02 |  0
 |  45 |  -1473395109729441239 |  tdb1 |  العميل |  ClientRead |  00: 00: 02 |  0
 |  46 |  |  tdb1 |  LWLock |  المخزن المؤقت |  00: 00: 01 |  0
 |  47 |  180077086776069052 |  tdb1 |  العميل |  ClientRead |  00: 00: 01 |  0
 |  48 |  |  tdb1 |  IO |  DataFileWrite |  00: 00: 01 |  0
 |  49 |  28942442626229688 |  tdb1 |  IPC |  MessageQueueReceive |  00: 00: 01 |  0
 |  50 |  2369289265278398647 |  tdb1 |  العميل |  ClientRead |  00: 00: 01 |  0
 |  51 |  9150846928388977274 |  tdb1 |  IO |  DataFileWrite |  00: 00: 01 |  0
 + ----- + ------------------------- + ---------- + ------ -------------- + -------------------- + -------------- ------ + ----------
 |
 |  إحصائيات SQL العميل
 |
 + ------------------------------------------------- -----------------------------------
 |  عميل SQL مرتبة حسب الوقت المنقضي
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + --------------------
 |  الوقت المنقضي |  مكالمات |  ٪ dbtime |  ٪ وحدة المعالجة المركزية |  ٪ IO |  dbname |  queryid
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + --------------------
 |  06: 43: 19 |  36 |  10.2 |  85 سبتمبر  17.38 |  tdb1 |  389015618226997618
 |  02: 06: 53 |  715 |  3.21 |  0.85 |  0.06 |  tdb1 |  1237430309438971376
 |  01: 52: 07 |  720 |  2.84 |  1.19 |  0.08 |  tdb1 |  4710212362688288619
 |  00: 39: 03 |  357 |  0.99 |  1.02 |  0.33 |  tdb1 |  28942442626229688
 |  00: 22: 00 |  8 |  0.56 |  0.96 |  0 |  tdb1 |  2649515222348904837
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + --------------------
 |  عميل SQL مرتبة حسب وقت وحدة المعالجة المركزية
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  وقت وحدة المعالجة المركزية |  مكالمات |  ٪ dbtime | total_time |  ٪ وحدة المعالجة المركزية |  ٪ IO |  dbname |  queryid
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  16: 14: 38 |  36 |  10.2 |  06: 43: 19 |  85 سبتمبر  17.38 |  tdb1 |  389015618226997618
 |  00: 13: 38 |  720 |  2.84 |  01: 52: 07 |  1.19 |  0.08 |  tdb1 |  4710212362688288619
 |  00: 11: 39 |  357 |  0.99 |  00: 39: 03 |  1.02 |  0.33 |  tdb1 |  28942442626229688
 |  00: 10: 58 |  8 |  0.56 |  00: 22: 00 |  0.96 |  0 |  tdb1 |  2649515222348904837
 |  00: 09: 44 |  715 |  3.21 |  02: 06: 53 |  0.85 |  0.06 |  tdb1 |  1237430309438971376
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  عميل SQL مرتبة حسب المستخدم I / O وقت الانتظار
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  وقت io_wait |  مكالمات |  ٪ dbtime | total_time |  ٪ وحدة المعالجة المركزية |  ٪ IO |  dbname |  queryid
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  05: 47: 09 |  36 |  10.2 |  06: 43: 19 |  85 سبتمبر  17.38 |  tdb1 |  389015618226997618
 |  00: 02: 15 |  357 |  0.99 |  00: 39: 03 |  1.02 |  0.33 |  tdb1 |  28942442626229688
 |  00: 00: 24 |  715 |  3.21 |  02: 06: 53 |  0.85 |  0.06 |  tdb1 |  1237430309438971376
 |  00: 00: 19 |  720 |  2.84 |  01: 52: 07 |  1.19 |  0.08 |  tdb1 |  4710212362688288619
 |  00: 00: 00 |  8 |  0.56 |  00: 22: 00 |  0.96 |  0 |  tdb1 |  2649515222348904837
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  عميل SQL مرتبة حسب قراءات المخازن المؤقتة المشتركة
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  يقرأ مخازن |  مكالمات |  ٪ dbtime | total_time |  ٪ وحدة المعالجة المركزية |  ٪ IO |  dbname |  queryid
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  2562353244 |  36 |  10.2 |  06: 43: 19 |  85 سبتمبر  17.38 |  tdb1 |  389015618226997618
 |  11041689 |  357 |  0.99 |  00: 39: 03 |  1.02 |  0.33 |  tdb1 |  28942442626229688
 |  3303551 |  715 |  3.21 |  02: 06: 53 |  0.85 |  0.06 |  tdb1 |  1237430309438971376
 |  3242892 |  720 |  2.84 |  01: 52: 07 |  1.19 |  0.08 |  tdb1 |  4710212362688288619
 |  0 |  8 |  0.56 |  00: 22: 00 |  0.96 |  0 |  tdb1 |  2649515222348904837
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  عميل SQL مرتبة حسب القرص يقرأ الوقت
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  قراءة الوقت |  مكالمات |  ٪ dbtime | total_time |  ٪ وحدة المعالجة المركزية |  ٪ IO |  dbname |  queryid
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  03: 37: 46 |  36 |  10.2 |  06: 43: 19 |  85 سبتمبر  17.38 |  tdb1 |  389015618226997618
 |  00: 04: 07 |  357 |  0.99 |  00: 39: 03 |  1.02 |  0.33 |  tdb1 |  28942442626229688
 |  00: 00: 59 |  720 |  2.84 |  01: 52: 07 |  1.19 |  0.08 |  tdb1 |  4710212362688288619
 |  00: 00: 42 |  715 |  3.21 |  02: 06: 53 |  0.85 |  0.06 |  tdb1 |  1237430309438971376
 |  00: 00: 00 |  8 |  0.56 |  00: 22: 00 |  0.96 |  0 |  tdb1 |  2649515222348904837
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  عميل SQL مرتبة حسب عمليات الإعدام
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  مكالمات |  الصفوف |  ٪ dbtime | total_time |  ٪ وحدة المعالجة المركزية |  ٪ IO |  dbname |  queryid
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  720 |  720 |  2.84 |  01: 52: 07 |  1.19 |  0.08 |  tdb1 |  4710212362688288619
 |  715 |  715 |  3.21 |  02: 06: 53 |  0.85 |  0.06 |  tdb1 |  1237430309438971376
 |  357 |  0 |  0.99 |  00: 39: 03 |  1.02 |  0.33 |  tdb1 |  28942442626229688
 |  36 |  36 |  10.2 |  06: 43: 19 |  85 سبتمبر  17.38 |  tdb1 |  389015618226997618
 |  8 |  8 |  0.56 |  00: 22: 00 |  0.96 |  0 |  tdb1 |  2649515222348904837
 + -------------------- + ---------- + ---------- + ------ ---- + ---------- + ---------- + ---------- + ------------ --------
 |  قائمة كاملة من نص SQL
 ----------------------------------------------
 ...

أن تستمر. الخطوة التالية هي تكوين سجل القفل (pg_stat_locks) ، وهو وصف أكثر تفصيلاً لعملية ملء الجداول.

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


All Articles