د PostgreSQL پوښتنو د فعالیت څارنه. 1 برخه - راپور ورکول

انجنیر - له لاتین څخه ژباړل شوی - الهام شوی.
یو انجنیر هر څه کولی شي. (c) R. ډیزل.
Epigraphs.
د PostgreSQL پوښتنو د فعالیت څارنه. 1 برخه - راپور ورکول
یا د دې په اړه یوه کیسه چې ولې د ډیټابیس مدیر اړتیا لري د خپل برنامه تیر یاد وساتي.

وړاندیز

ټول نومونه بدل شوي دي. تصادفونه تصادفي دي. مواد یوازې د لیکوال شخصي نظر څرګندوي.

د تضمین ردول: د مقالو پلان شوې لړۍ به د کارول شوي جدولونو او سکریپټونو مفصل او دقیق توضیحات ونلري. مواد سمدلاسه "AS IS" نشي کارول کیدی.
لومړی، د موادو د لوی مقدار له امله،
دوهم، د اصلي پیرودونکي د تولید بنسټ سره د نږدې اړیکو له امله.
له همدې امله، مقالې به یوازې په عمومي بڼه کې نظریات او توضیحات ولري.
شاید په راتلونکي کې سیسټم به په GitHub کې د پوسټ کولو کچې ته وده ورکړي ، یا شاید نه. وخت به وښيي.

د کیسې پیل - "ایا تاسو په یاد ولرئ چې دا ټول څنګه پیل شوي".
په پایله کې څه پیښ شوي، په ډیری عمومي شرایطو کې - "ترکیب د PostgreSQL فعالیت ښه کولو لپاره د یوې میتود په توګه»

زه ولې دې ټولو ته اړتیا لرم؟

ښه، لومړی، د دې لپاره چې هېر نه شي، په تقاعد کې د غوره ورځو یادونه.
دوهم، د هغه څه سیستماتیک کول چې لیکل شوي. ځکه چې ځینې وختونه زه مغشوش کېږم او ځینې برخې هیروم.

ښه، او ترټولو مهمه خبره دا ده چې دا ممکن د یو چا لپاره په کار وي او د دوی سره مرسته وکړي چې د څرخ له نوي کولو او د ریک راټولولو مخه ونیسي. په بل عبارت، خپل کار ته وده ورکړئ (نه د خابروف). ځکه چې په دې نړۍ کې تر ټولو ارزښتناک شی فکر دی. اصلي خبره دا ده چې یو نظر پیدا کړي. مګر په حقیقت کې د نظر بدلول یو خالص تخنیکي پوښتنه ده.

نو، راځئ چې لږ څه پیل کړو ...

د ستونزې جوړښت.

شته:

PostgreSQL(10.5) ډیټابیس، د مخلوط بار ډول (OLTP+DSS)، د منځنۍ رڼا بار، د AWS کلاوډ کې موقعیت لري.
د ډیټابیس څارنه شتون نلري؛ د زیربنا څارنه د معیاري AWS وسیلو په بڼه په لږترلږه ترتیب کې چمتو کیږي.

دا اړین دی:

د ډیټابیس فعالیت او حالت وڅارئ، د درنو ډیټابیس پوښتنو غوره کولو لپاره لومړني معلومات ومومئ او ولرئ.

د حل انتخابونو لنډه پیژندنه یا تحلیل

د پیل کولو لپاره ، راځئ چې د انجینر لپاره د ګټو او زیانونو د پرتلې تحلیل له نظره د ستونزې حل کولو اختیارونو تحلیل کولو هڅه وکړو ، او اجازه راکړئ هغه څوک چې د کارمندانو مهال ویش سره سم یې مستحق دي د ګټو سره معامله وکړي او د مدیریت زیانونه.

1 اختیار - "په غوښتنه کار کول"

موږ هرڅه لکه څنګه چې پریږدو. که چیرې پیرودونکی د ډیټابیس فعالیت ، فعالیت یا غوښتنلیک کې د یو څه څخه راضي نه وي ، نو هغه به د DBA انجینرانو ته د بریښنالیک له لارې یا د ټیکټ ټری کې د پیښې رامینځته کولو سره خبر کړي.
انجنیر به د خبرتیا په ترلاسه کولو سره، ستونزه درک کړي، د حل لاره به وړاندې کړي یا ستونزه په شاتنۍ برنر کې واچوي، په دې هیله چې هرڅه به پخپله حل شي، او په هرصورت، هرڅه به ژر هیر شي.
جنجربریډ او ډونټس، زخمونه او ډنډونهجنجربریډ او ډونټس:
1. هیڅ اضافي کار ته اړتیا نشته.
2. تل د عذر جوړولو او د ګډوډۍ فرصت شتون لري.
3. ډیر وخت چې تاسو کولی شئ په خپل اختیار کې مصرف کړئ.
زخمونه او ټپونه:
1. ډیر ژر یا وروسته، پیرودونکی به په دې نړۍ کې د موجودیت او نړیوال عدالت په اړه فکر وکړي او یو ځل بیا له ځانه پوښتنه وکړي - زه ولې دوی ته خپلې پیسې ورکوم؟ پایله تل ورته وي - یوازینۍ پوښتنه دا ده کله چې پیرودونکي ستړي شي او الوداع به وکړي. او فیډر به خالي وي. دا غمجن دی.
2. د انجنیرۍ پراختیا - صفر.
3. د کار په پلان کولو او بارولو کې ستونزې

2 اختیار- "د تیمورین سره نڅا کول، بخار کول او بوټان اچول"

پراګراف 1- ولې موږ د څارنې سیسټم ته اړتیا لرو، موږ به د غوښتنو سره هرڅه ترلاسه کړو. موږ د ډیټا قاموس او متحرک لیدونو ته د هر ډول پوښتنو یوه ډله چلوو ، هر ډول کاونټرونه چالان کوو ، هرڅه په جدولونو کې اچوو ، او په دوره توګه لیستونه او میزونه تحلیل کوو. د پایلې په توګه، موږ ښکلي یا ډیر ښکلي ګرافونه، میزونه، راپورونه لرو. اصلي شی دا دی چې ډیر څه ولرئ.
پراګراف 2- موږ فعالیت رامینځته کوو او د دې ټولو تحلیل پیل کوو.
پراګراف 3- موږ یو مشخص سند چمتو کوو، موږ دا سند په ساده ډول وایو - "موږ باید څنګه ډیټابیس جوړ کړو."
پراګراف 4- پیرودونکی، د ګرافونو او شمیرو دا ټول ښایست ویني، په ماشومتوب، بې رحمه باور کې دی - اوس به هرڅه ژر زموږ لپاره کار وکړي. او، هغه په ​​​​اسانۍ او بې درده توګه د خپلو مالي سرچینو سره برخه اخلي. مدیریت هم ډاډه دی چې زموږ انجنیران ښه کار کوي. په اعظمي حد کې بار کول.
پراګراف 5- لومړی ګام په منظم ډول تکرار کړئ.
جنجربریډ او ډونټس، زخمونه او ډنډونهجنجربریډ او ډونټس:
1. د مدیرانو او انجینرانو ژوند ساده، د وړاندوینې وړ او له فعالیت څخه ډک دی. هر څه ګونګ دي، هرڅوک بوخت دي.
2. د پیرودونکي ژوند هم بد نه دی - هغه تل ډاډه وي چې هغه یوازې لږ صبر ته اړتیا لري او هرڅه به سم شي. دا ښه نه کیږي، ښه، نړۍ غیر عادلانه ده، په راتلونکي ژوند کې به تاسو بختور وي.
زخمونه او ټپونه:
1. ډیر ژر یا وروسته به د ورته خدماتو یو ګړندی چمتو کونکی وي چې ورته کار وکړي مګر یو څه ارزانه. او که پایله ورته وي، ولې نور پیسې ورکړئ؟ چې بیا به د فیډر د ورکیدو لامل شي.
2. ستړی کوونکی دی. هر بې معنی فعالیت څومره ستړی کوونکی دی.
3. لکه څنګه چې په تیرو نسخو کې، هیڅ پرمختګ شتون نلري. مګر د انجینر لپاره ، نیمګړتیا دا ده چې د لومړي اختیار برعکس ، تاسو اړتیا لرئ په دوامداره توګه IBD تولید کړئ. او دا وخت نیسي. کوم چې تاسو کولی شئ د خپل عزیز د ګټې لپاره مصرف کړئ. ځکه چې تاسو د خپل ځان ساتنه نشئ کولی، هیڅوک ستاسو په اړه سپکاوی نه کوي.

3 اختیار - تاسو اړتیا نلرئ یو بایسکل اختراع کړئ، تاسو یوازې اړتیا لرئ چې دا واخلئ او په هغې کې سپاره شئ.

دا د هیڅ شی لپاره ندي چې د نورو شرکتونو انجینران د بیر سره پیزا خوري (او په 90s کې د سینټ پیټرزبورګ ویاړ ورځې). راځئ چې د څارنې سیسټمونه وکاروو چې جوړ شوي، ډیبګ شوي او کار کوي، او په عمومي توګه ګټه پورته کوي (ښه، لږترلږه د دوی جوړونکو ته).
جنجربریډ او ډونټس، زخمونه او ډنډونهجنجربریډ او ډونټس:
1. د هغه څه په راوړلو کې د وخت ضایع کولو ته اړتیا نشته چې دمخه اختراع شوي وي. واخلئ او وکاروئ.
2. د څارنې سیسټمونه د احمقانو لخوا نه لیکل کیږي او البته، ګټور دي.
3. د څارنې کاري سیسټمونه معمولا ګټور فلټر شوي معلومات چمتو کوي.
زخمونه او ټپونه:
1. په دې قضیه کې انجنیر انجنیر نه دی، مګر یوازې د بل چا د محصول کاروونکي یا کاروونکي.
2. پیرودونکی باید د یو څه پیرودلو په اړتیا باندې قانع وي چې په عمومي توګه، هغه نه غواړي پوه شي، او باید نه وي، او په عمومي توګه د کال بودیجه تصویب شوې او بدلون نه کوي. بیا تاسو اړتیا لرئ جلا سرچینې تخصیص کړئ او د ځانګړي سیسټم لپاره یې تنظیم کړئ. هغوی. لومړی تاسو اړتیا لرئ پیسې ورکړئ، پیسې ورکړئ او بیا تادیه وکړئ. او پیرودونکي بخل کوي. دا د دې ژوند معمول دی.

څه وکړي - Chernyshevsky؟ ستاسو پوښتنه ډیره اړینه ده. (سره)

په دې ځانګړې قضیه او اوسني وضعیت کې، تاسو کولی شئ دا په یو څه توپیر سره ترسره کړئ - راځئ چې خپل د څارنې سیسټم جوړ کړو.
د PostgreSQL پوښتنو د فعالیت څارنه. 1 برخه - راپور ورکول
ښه، یو سیسټم نه، البته، د کلمې په بشپړ معنی کې، دا خورا لوړ او مغرور دی، مګر لږترلږه یو څه ستاسو دنده اسانه کړئ او د فعالیت پیښو حل کولو لپاره نور معلومات راټول کړئ. د دې لپاره چې ځان په داسې حالت کې ونه مومئ - "هلته لاړ شه، زه نه پوهیږم چیرته، یو څه ومومئ، زه نه پوهیږم څه."

د دې اختیار ګټې او زیانونه څه دي:

پرو:
1. دا په زړه پوری دی. ښه، لږترلږه دا د دوامداره "ډیټ فایل کمول، د میز ځای بدلول، او نور" څخه ډیر په زړه پوري دي.
2. دا نوي مهارتونه او نوي پرمختګ دي. کوم چې، ژر یا وروسته به تاسو ته ښه مستحق جنجربرډ او ډونټس درکړي.
ضمیمه:
1. تاسو باید کار وکړئ. سخت کار وکړئ.
2. تاسو باید په منظمه توګه د ټولو فعالیتونو معنی او امکانات تشریح کړئ.
3. یو څه باید قرباني شي، ځکه چې انجنیر ته یوازینۍ سرچینه شتون لري - وخت - د کائنات لخوا محدود دی.
4. تر ټولو بد او ناخوښه شی - پایله کیدای شي سپکاوی وي لکه "نه موږک، نه یو چونګښه، مګر یو نامعلوم حیوان."

هغه څوک چې خطر نه اخلي شیمپین نه څښي.
نو - تفریح ​​​​پیل کیږي.

عمومي مفکوره - په منظم ډول

د PostgreSQL پوښتنو د فعالیت څارنه. 1 برخه - راپور ورکول
(انځور د مقالې څخه اخیستل شوی «ترکیب د PostgreSQL فعالیت ښه کولو لپاره د یوې میتود په توګه»)

توضيح:

  • معیاري PostgreSQL توسیع "pg_stat_statements" په هدف ډیټابیس کې نصب شوی.
  • د څارنې په ډیټابیس کې، موږ په لومړي پړاو کې د pg_stat_statements تاریخ ذخیره کولو او په راتلونکي کې د میټریکونو تنظیم کولو او څارنې لپاره د خدماتو میزونو یو سیټ رامینځته کوو.
  • د څارنې کوربه کې، موږ د باش سکریپټونو سیټ جوړوو، په شمول د ټیکټ سیسټم کې د پیښو رامینځته کولو لپاره.

د خدمت میزونه

لومړی، یو سکیماتیک ساده شوی ERD، په پای کې څه پیښ شوي:
د PostgreSQL پوښتنو د فعالیت څارنه. 1 برخه - راپور ورکول
د جدولونو لنډ تفصیلد پای ټکی - کوربه، د مثال سره د پیوستون نقطه
ډیټابیس - د ډیټابیس پیرامیټونه
pg_stat_history - د هدف ډیټابیس pg_stat_statements لید لنډمهاله عکسونو ذخیره کولو لپاره تاریخي میز
metric_glossary - د فعالیت میټریک قاموس
metric_config - د انفرادي میټریکونو ترتیب
متريک - د غوښتنې لپاره یو ځانګړی میټریک چې څارل کیږي
metric_alert_history - د فعالیت خبرداری تاریخ
log_query - د AWS څخه ډاونلوډ شوي د PostgreSQL لاګ فایل څخه د پارس شوي ریکارډونو ذخیره کولو لپاره د خدماتو میز
لومړنۍ کرښه - د هغه وخت پیرامیټونه چې د اساس په توګه کارول کیږي
چیک پوسټ - د ډیټابیس حالت چک کولو لپاره د میټریکونو ترتیب
checkpoint_alert_history - د ډیټابیس د روغتیا چک میټریکونو خبرداری تاریخ
pg_stat_db_queries - د فعال غوښتنو خدمت جدول
فعاليت_لاګ - د فعالیت لاګ خدمت جدول
trap_oid - د جال ترتیب کولو خدماتو میز

مرحله 1 - د فعالیت په اړه احصایوي معلومات راټول کړئ او راپورونه ترلاسه کړئ

یو جدول د احصایوي معلوماتو ذخیره کولو لپاره کارول کیږي pg_stat_history
pg_stat_history جدول جوړښت

                                          جدول "public.pg_stat_history" کالم | ډول | تعدیل کوونکي------------------------------------------------------------ ------------------------------------------------------ id | عدد | null default nextval('pg_stat_history_id_seq'::regclass) snapshot_timestamp | د مهال ویش پرته د مهال ویش | database_id | عدد | dbid | oid | userid | oid | queryid | bigint | پوښتنه | متن | زنګونه | bigint | ټول_وخت | دوه ګونی دقت | دقیق_ وخت | دوه ګونی دقت | max_time | دوه ګونی دقت | مانا_وخت | دوه ګونی دقت | stddev_time | دوه ګونی دقت | قطارونه | 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 | دوه ګونی دقت | blk_write_time | دوه ګونی دقت | baseline_id | عدد | شاخصونه: "pg_stat_history_pkey" PRIMARY KEY، btree (id) "database_idx" btree (database_id) "queryid_idx" btree (queryid) "snapshot_timestamp_idx" btree (snapshot_timestamp) "بهرني کلیدي: IG_databaseKES" (IG_fd_kdase FORE) id) د حوالې ډیټابیس (id ) د ړنګولو کیسکیډ باندې

لکه څنګه چې تاسو لیدلی شئ، میز یوازې د مجموعي لید ډاټا دی pg_stat_statements په هدف ډیټابیس کې.

د دې جدول کارول خورا ساده دي

pg_stat_history د هر ساعت لپاره د پوښتنو اجرا کولو راټول شوي احصایې استازیتوب کوي. د هر ساعت په پیل کې، د میز ډکولو وروسته، احصایې pg_stat_statements سره بیا تنظیم کړئ pg_stat_statements_reset().
نوټ: احصایې د پوښتنو لپاره راټول شوي چې د اجرا کولو موده له 1 ثانیو څخه ډیر وي.
د pg_stat_history جدول ډکول

--pg_stat_history.sql
CREATE OR REPLACE FUNCTION pg_stat_history( ) RETURNS boolean AS $$
DECLARE
  endpoint_rec record ;
  database_rec record ;
  pg_stat_snapshot record ;
  current_snapshot_timestamp timestamp without time zone;
BEGIN
  current_snapshot_timestamp = date_trunc('minute',now());  
  
  FOR endpoint_rec IN SELECT * FROM endpoint 
  LOOP
    FOR database_rec IN SELECT * FROM database WHERE endpoint_id = endpoint_rec.id 
	  LOOP
	    
		RAISE NOTICE 'NEW SHAPSHOT IS CREATING';
		
		--Connect to the target DB	  
	    EXECUTE 'SELECT dblink_connect(''LINK1'',''host='||endpoint_rec.host||' dbname='||database_rec.name||' user=USER password=PASSWORD '')';
 
        RAISE NOTICE 'host % and dbname % ',endpoint_rec.host,database_rec.name;
		RAISE NOTICE 'Creating snapshot of pg_stat_statements for database %',database_rec.name;
		
		SELECT 
	      *
		INTO 
		  pg_stat_snapshot
	    FROM dblink('LINK1',
	      'SELECT 
	       dbid , SUM(calls),SUM(total_time),SUM(rows) ,SUM(shared_blks_hit) ,SUM(shared_blks_read) ,SUM(shared_blks_dirtied) ,SUM(shared_blks_written) , 
           SUM(local_blks_hit) , SUM(local_blks_read) , SUM(local_blks_dirtied) , SUM(local_blks_written) , SUM(temp_blks_read) , SUM(temp_blks_written) , SUM(blk_read_time) , SUM(blk_write_time)
	       FROM pg_stat_statements WHERE dbid=(SELECT oid from pg_database where datname=current_database() ) 
		   GROUP BY dbid
  	      '
	               )
	      AS t
	       ( dbid oid , calls bigint , 
  	         total_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	  
	       );
		 
		INSERT INTO pg_stat_history
          ( 
		    snapshot_timestamp  ,database_id  ,
			dbid , calls  ,total_time ,
            rows ,shared_blks_hit  ,shared_blks_read  ,shared_blks_dirtied  ,shared_blks_written ,local_blks_hit , 	 	
            local_blks_read,local_blks_dirtied,local_blks_written,temp_blks_read,temp_blks_written, 	
            blk_read_time, blk_write_time 
		  )		  
	    VALUES
	      (
	       current_snapshot_timestamp ,
		   database_rec.id ,
	       pg_stat_snapshot.dbid ,pg_stat_snapshot.calls,
	       pg_stat_snapshot.total_time,
	       pg_stat_snapshot.rows ,pg_stat_snapshot.shared_blks_hit ,pg_stat_snapshot.shared_blks_read ,pg_stat_snapshot.shared_blks_dirtied ,pg_stat_snapshot.shared_blks_written , 
           pg_stat_snapshot.local_blks_hit , pg_stat_snapshot.local_blks_read , pg_stat_snapshot.local_blks_dirtied , pg_stat_snapshot.local_blks_written , 
	       pg_stat_snapshot.temp_blks_read , pg_stat_snapshot.temp_blks_written , pg_stat_snapshot.blk_read_time , pg_stat_snapshot.blk_write_time 	   
	      );		   
		  
        RAISE NOTICE 'Creating snapshot of pg_stat_statements for queries with min_time more than 1000ms';
	
        FOR pg_stat_snapshot IN
          --All queries with max_time greater than 1000 ms
	      SELECT 
	        *
	      FROM dblink('LINK1',
	        'SELECT 
	         dbid , userid ,queryid,query,calls,total_time,min_time ,max_time,mean_time, stddev_time ,rows ,shared_blks_hit ,
			 shared_blks_read ,shared_blks_dirtied ,shared_blks_written , 
             local_blks_hit , local_blks_read , local_blks_dirtied , 
			 local_blks_written , temp_blks_read , temp_blks_written , blk_read_time , 
			 blk_write_time
	         FROM pg_stat_statements 
			 WHERE dbid=(SELECT oid from pg_database where datname=current_database() AND min_time >= 1000 ) 
  	        '

	                  )
	        AS t
	         ( 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	  
	         )
	    LOOP
		  INSERT INTO pg_stat_history
          ( 
		    snapshot_timestamp  ,database_id  ,
			dbid ,userid  , queryid  , query  , calls  ,total_time ,min_time ,max_time ,mean_time ,stddev_time ,
            rows ,shared_blks_hit  ,shared_blks_read  ,shared_blks_dirtied  ,shared_blks_written ,local_blks_hit , 	 	
            local_blks_read,local_blks_dirtied,local_blks_written,temp_blks_read,temp_blks_written, 	
            blk_read_time, blk_write_time 
		  )		  
	      VALUES
	      (
	       current_snapshot_timestamp ,
		   database_rec.id ,
	       pg_stat_snapshot.dbid ,pg_stat_snapshot.userid ,pg_stat_snapshot.queryid,pg_stat_snapshot.query,pg_stat_snapshot.calls,
	       pg_stat_snapshot.total_time,pg_stat_snapshot.min_time ,pg_stat_snapshot.max_time,pg_stat_snapshot.mean_time, pg_stat_snapshot.stddev_time ,
	       pg_stat_snapshot.rows ,pg_stat_snapshot.shared_blks_hit ,pg_stat_snapshot.shared_blks_read ,pg_stat_snapshot.shared_blks_dirtied ,pg_stat_snapshot.shared_blks_written , 
           pg_stat_snapshot.local_blks_hit , pg_stat_snapshot.local_blks_read , pg_stat_snapshot.local_blks_dirtied , pg_stat_snapshot.local_blks_written , 
	       pg_stat_snapshot.temp_blks_read , pg_stat_snapshot.temp_blks_written , pg_stat_snapshot.blk_read_time , pg_stat_snapshot.blk_write_time 	   
	      );
		  
        END LOOP;

        PERFORM dblink_disconnect('LINK1');  
				
	  END LOOP ;--FOR database_rec IN SELECT * FROM database WHERE endpoint_id = endpoint_rec.id 
    
  END LOOP;

RETURN TRUE;  
END
$$ LANGUAGE plpgsql;

د پایلې په توګه، په میز کې د یو څه مودې وروسته pg_stat_history موږ به د جدول مینځپانګې د عکسونو مجموعه ولرو pg_stat_statements هدف ډیټابیس.

په حقیقت کې راپور ورکول

د ساده پوښتنو په کارولو سره تاسو کولی شئ خورا ګټور او په زړه پوري راپورونه ترلاسه کړئ.

د یوې ټاکلې مودې لپاره راټول شوي معلومات

غوښتنه

SELECT 
  database_id , 
  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
FROM 
  pg_stat_history
WHERE 
  queryid IS NULL AND
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
GROUP BY database_id ;

د DB وخت

to_char( وقفه '1 ملی ثانیه' * pg_total_stat_history_rec.total_time, 'HH24:MI:SS.MS')

I/O وخت

to_char( وقفه '1 ملی ثانیه' * ( pg_total_stat_history_rec.blk_read_time + pg_total_stat_history_rec.blk_write_time ), 'HH24:MI:SS.MS')

TOP10 SQL by total_time

غوښتنه

SELECT 
  queryid , 
  SUM(calls) AS calls ,
  SUM(total_time)  AS total_time  	
FROM 
  pg_stat_history
WHERE 
  queryid IS NOT NULL AND 
  database_id = DATABASE_ID AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT 
GROUP BY queryid 
ORDER BY 3 DESC 
LIMIT 10
------------------------------------------------------------------ ----------------------------------- | TOP10 SQL د ټول اجرا وخت | #| queryid| زنګونه | زنګونه %| ټول_ وخت (ms) | د وخت % ------ --------------------------- +------------ | ۱| 1| 821760255| .2|00001:00:03( 23.141 ms.)| 203141.681 | 5.42| 2| 4152624390| .2|00001:00:03( 13.929 ms.)| 193929.215 | 5.17| 3| ۴| .1484454471|4:00001:00( 02 ms.)| 09.129 | ۴| 129129.057| ۱| .3.44|4:655729273:1( 00000 ms.)| 00 | 02| 01.869| ۱| .121869.981|3.25:5:2460318461( 1 ms.)| 00000 | ۶| 00| ۴| .01|33.113:93113.835:2.48( 6 ms.)| .2194493487 | 4| 00001| ۱| .00|00:17.377:17377.868( 46 ms.)| .7 | ۸| 1053044345| ۱| .1|00000:00:00( 06.156 ms.)| .6156.352

TOP10 SQL د ټول I/O وخت له مخې

غوښتنه

SELECT 
  queryid , 
  SUM(calls) AS calls ,
  SUM(blk_read_time + blk_write_time)  AS io_time
FROM 
  pg_stat_history
WHERE 
  queryid IS NOT NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
GROUP BY  queryid 
ORDER BY 3 DESC 
LIMIT 10
------------------------------------------------------------------ --------------------------------------------------- | د ټولو I/O وخت لخوا غوره 10 SQL | #| queryid| زنګونه | زنګونه %| I/O وخت (ms)|db I/O وخت٪ +------+------------+---------+ --------------------------------------------------------------------------- ------ -- | ۱| 1| 4152624390| .2|00001:00:08( 31.616 ms.)| 511616.592 | 31.06| 2| 821760255| .2|00001:00:08( 27.099 ms.)| 507099.036 | 30.78| 3| ۱| .655729273|1:00000:00( 05 ms.)| 02.209 | ۴| 302209.137| ۱| .18.35|4:2460318461:1( 00000 ms.)| 00 | 04| 05.981| ۴| .245981.117|14.93:5:1484454471( 4 ms.)| 00001 | ۶| 00| ۴| .00|39.144:39144.221:2.38( 6 ms.)| 2194493487 | 4| 00001| ۱| .00|00:18.182:18182.816( 1.10 ms.)| 7 | ۸| 1053044345| ۱| .1|00000:00:00( 16.611 ms.)| .16611.722

TOP10 د اجرا کولو اعظمي وخت لخوا SQL

غوښتنه

SELECT 
  id AS snapshotid , 
  queryid , 
  snapshot_timestamp ,  
  max_time 
FROM 
  pg_stat_history 
WHERE 
  queryid IS NOT NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
ORDER BY 4 DESC 
LIMIT 10

------------------------------------------------------------------ ------------------------------------------------------------------ | غوره 10 SQL د اعظمي اجرا کولو وخت | #| سنیپ شاټ| snapshotID| queryid| max_time (ms) +------------------------- +-------------------------+------ --+--------------------------------------| ۱| 1/05.04.2019/01 03:4169| 655729273| 00| 02:01.869:121869.981( 2 ms.) | 04.04.2019| 17/00/4153 821760255:00| 01| 41.570| 101570.841:3:04.04.2019( 16 ms.) | 00| 4146/821760255/00 01:41.570| 101570.841| 4| 04.04.2019:16:00( 4144 ms.) | ۴| 4152624390/00/01 36.964:96964.607| 5| 04.04.2019| 17:00:4151(4152624390 ms.) | 00| 01/36.964/96964.607 6:05.04.2019| 10| 00| 4188:1484454471:00(01 ms.) | ۶| 33.452/93452.150/7 04.04.2019:17| 00| 4150| 2460318461:00:01 (33.113 ms.) | 93113.835| 8/04.04.2019/15 00:4140| 1484454471| 00| 00:11.892:11892.302(9 ms.) | ۸| 04.04.2019/16/00 4145:1484454471| 00| 00| 11.892:11892.302:10 (04.04.2019 ms.) | ۹| 17/00/4152 1484454471:00| 00| 11.892| 11892.302:XNUMX:XNUMX (XNUMX ms.) | ۱۰| XNUMX/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX:XNUMX:XNUMX (XNUMX ms.)

TOP10 SQL د شریک بفر لخوا لوستل / لیکل

غوښتنه

SELECT 
  id AS snapshotid , 
  queryid ,
  snapshot_timestamp , 
  shared_blks_read , 
  shared_blks_written 
FROM 
  pg_stat_history
WHERE 
  queryid IS NOT NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT AND
  ( shared_blks_read > 0 OR shared_blks_written > 0 )
ORDER BY 4 DESC  , 5 DESC 
LIMIT 10
------------------------------------------------------------------ ------------------------------------------------------------------| د شریک شوي بفر لخوا غوره 10 SQL لوستل / لیکل | #| سنیپ شاټ| snapshotID| queryid| شریک شوي بلاکونه لوستل شریک شوي بلاکونه لیکي +----------------------------------------------- ---------------------------------------------------------------------- | ۱| 1/04.04.2019/17 00:4153| 821760255| 797308| 0| 2 | 04.04.2019| 16/00/4146 821760255:797308| 0| 3| 05.04.2019| 01 | 03| 4169/655729273/797158 0:4| 04.04.2019| 16| 00| 4144 | ۴| 4152624390/756514/0 5:04.04.2019| 17| 00| 4151| 4152624390 | 756514| 0/6/04.04.2019 17:00| 4150| 2460318461| 734117| 0 | ۶| 7/04.04.2019/17 00:4155| 3644780286| 52973| 0| 8 | 05.04.2019| 01/03/4168 1053044345:52818| 0| 9| 04.04.2019| 15 | ۸| 00/4141/2194493487 52813:0| 10| 04.04.2019| 16| 00 | ۹| 4147/2194493487/52813 0:XNUMX| XNUMX| XNUMX| XNUMX| XNUMX | ۱۰| XNUMX/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX| XNUMX ---------------------------------------------------------------------------------- ------------------------------------------------------------------

د غوښتنو د ویش هسټوګرام د اعظمي اجرا کولو وخت لخوا

غوښتنې

SELECT  
  MIN(max_time) AS hist_min  , 
  MAX(max_time) AS hist_max , 
  (( MAX(max_time) - MIN(min_time) ) / hist_columns ) as hist_width
FROM 
  pg_stat_history 
WHERE 
  queryid IS NOT NULL AND
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT ;

SELECT 
  SUM(calls) AS calls
FROM 
  pg_stat_history 
WHERE 
  queryid IS NOT NULL AND
  database_id =DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT AND 
  ( max_time >= hist_current_min AND  max_time < hist_current_max ) ;
|---------------------------------------------------------------- ---------------------------------------------------------------------------------- | MAX_TIME HISTOGRAM | ټول زنګونه: 33851920 | MIN TIME: 00:00:01.063 | MAX وخت: 00:02:01.869 ------------------------------------------------------------------ ------------------------------------------------------------------ | دقیقه موده| اعظمي موده| زنګونه +-------------------------------------------- --------------------------------- | 00:00:01.063 (1063.830 ms.) | 00:00:13.144( 13144.445 ms.) | ۹ | 9:00:00( 13.144 ms.) | 13144.445:00:00( 25.225 ms.) | 25225.060 | 0:00:00( 25.225 ms.) | 25225.060:00:00( 37.305 ms.) | 37305.675 | 0:00:00( 37.305 ms.) | 37305.675:00:00 (49.386 ms.) | 49386.290 | 0:00:00 (49.386 ms.) | 49386.290:00:01 (01.466 ms.) | 61466.906 | 0:00:01 (01.466 ms.) | 61466.906:00:01 (13.547 ms.) | 73547.521 | 0:00:01 (13.547 ms.) | 73547.521:00:01( 25.628 ms.) | 85628.136 | 0:00:01( 25.628 ms.) | 85628.136:00:01 (37.708 ms.) | ۴ | 97708.751:4:00 (01 ms.) | 37.708:97708.751:00 (01 ms.) | 49.789 | 109789.366:2:00 (01 ms.) | 49.789:109789.366:00( 02 ms.) | 01.869

په هره ثانیه کې د پوښتنې له مخې TOP10 سنیپ شاټونه

غوښتنې

--pg_qps.sql
--Calculate Query Per Second 
CREATE OR REPLACE FUNCTION pg_qps( pg_stat_history_id integer ) RETURNS double precision AS $$
DECLARE
 pg_stat_history_rec record ;
 prev_pg_stat_history_id integer ;
 prev_pg_stat_history_rec record;
 total_seconds double precision ;
 result double precision;
BEGIN 
  result = 0 ;
  
  SELECT *
  INTO pg_stat_history_rec
  FROM 
    pg_stat_history
  WHERE id = pg_stat_history_id ;

  IF pg_stat_history_rec.snapshot_timestamp IS NULL 
  THEN
    RAISE EXCEPTION 'ERROR - Not found pg_stat_history for id = %',pg_stat_history_id;
  END IF ;  
  
 --RAISE NOTICE 'pg_stat_history_id = % , snapshot_timestamp = %', pg_stat_history_id , 
 pg_stat_history_rec.snapshot_timestamp ;
  
  SELECT 
    MAX(id)   
  INTO
    prev_pg_stat_history_id
  FROM
    pg_stat_history
  WHERE 
    database_id = pg_stat_history_rec.database_id AND
	queryid IS NULL AND
	id < pg_stat_history_rec.id ;

  IF prev_pg_stat_history_id IS NULL 
  THEN
    RAISE NOTICE 'Not found previous pg_stat_history shapshot for id = %',pg_stat_history_id;
	RETURN NULL ;
  END IF;
  
  SELECT *
  INTO prev_pg_stat_history_rec
  FROM 
    pg_stat_history
  WHERE id = prev_pg_stat_history_id ;
  
  --RAISE NOTICE 'prev_pg_stat_history_id = % , prev_snapshot_timestamp = %', prev_pg_stat_history_id , prev_pg_stat_history_rec.snapshot_timestamp ;    

  total_seconds = extract(epoch from ( pg_stat_history_rec.snapshot_timestamp - prev_pg_stat_history_rec.snapshot_timestamp ));
  
  --RAISE NOTICE 'total_seconds = % ', total_seconds ;    
  
  --RAISE NOTICE 'calls = % ', pg_stat_history_rec.calls ;      
  
  IF total_seconds > 0 
  THEN
    result = pg_stat_history_rec.calls / total_seconds ;
  ELSE
   result = 0 ; 
  END IF;
   
 RETURN result ;
END
$$ LANGUAGE plpgsql;


SELECT 
  id , 
  snapshot_timestamp ,
  calls , 	
  total_time , 
  ( select pg_qps( id )) AS QPS ,
  blk_read_time ,
  blk_write_time
FROM 
  pg_stat_history
WHERE 
  queryid IS NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT AND
  ( select pg_qps( id )) IS NOT NULL 
ORDER BY 5 DESC 
LIMIT 10
|---------------------------------------------------------------- ---------------------------------------------------------------------------------- | غوره 10 سنیپ شاټونه د QueryPerSeconds شمیرو لخوا ترتیب شوي ------------------------------------------------------ ------------------------------------------------------------------ ------------------------------------------------------------------ | #| عکسونه| snapshotID| زنګونه | ټول dbtime| QPS| I/O وخت| I/O وخت % +-------------------------------------------- -------------------------------------------------------- ---------------------------- +------------| ۱| 1/04.04.2019/20 04:4161| 5758631| 00| 06:30.513:390513.926( 1573.396 ms.)| 00| 00:01.470:1470.110( 376 ms.)| .2 | 04.04.2019| 17/00/4149 3529197:00| 11| 48.830| 708830.618:980.332:00( 12 ms.)| 47.834 | 767834.052:108.324:3( 04.04.2019 ms.)| 16 | 00| 4143/3525360/00 10:13.492| 613492.351| 979.267| 00:08:41.396( 521396.555 ms.)| 84.988 | 4:04.04.2019:21(03 ms.)| 4163 | ۴| 2781536/00/03 06.470:186470.979| 785.745| 00| 00:00.249:249.865( 134 ms.)| 5| 04.04.2019:19:03(4159 ms.)| .۱۳۴ | 2890362| 00 03:16.784| 196784.755| 776.979| 00:00:01.441( 1441.386 ms.)| 732 | 6:04.04.2019:14( 00 ms.)| .4137 | ۶| 2397326/00/04 43.033:283033.854| 665.924| ۲۳۹۷۳۲۶| 00:00:00.024( 24.505 ms.)| 009| 7:04.04.2019:15(00 ms.)| .4139 | 2394416| 00/04/51.435 291435.010:665.116| 00| 00| 12.025:12025.895:4.126( 8 ms.)| 04.04.2019| 13:00:4135( 2373043 ms.)| 00 | ۸| 04 26.791:266791.988| 659.179| ۲۳۷۳۰۴۳| 00:00:00.064( 64.261 ms.)| 024 | 9:05.04.2019:01( 03 ms.)| .4167 | ۹| 4387191/00/06 51.380:411380.293| 609.332| 00| 05:18.847:318847.407( 77.507 ms.)| 10 | 04.04.2019:18:01( 4157 ms.)| 1145596 | ۱۰| 00/01/19.217 79217.372:313.004| 00| 00| 01.319:1319.676:1.666( XNUMX ms.)| XNUMX| XNUMX:XNUMX:XNUMX( XNUMX ms.)| XNUMX

د QueryPerSeconds او I/O وخت سره د ساعته اجرا کولو تاریخ

غوښتنه

SELECT 
  id , 
  snapshot_timestamp ,
  calls , 	
  total_time , 
  ( select pg_qps( id )) AS QPS ,
  blk_read_time ,
  blk_write_time
FROM 
  pg_stat_history
WHERE 
  queryid IS NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
ORDER BY 2
|-----------------------------------------------------------------------------------------------
| HOURLY EXECUTION HISTORY  WITH QueryPerSeconds and I/O Time
-----------------------------------------------------------------------------------------------------------------------------------------------
| QUERY PER SECOND HISTORY
|    #|          snapshot| snapshotID|      calls|                      total dbtime|        QPS|                          I/O time| I/O time %
+-----+------------------+-----------+-----------+----------------------------------+-----------+----------------------------------+-----------
|    1|  04.04.2019 11:00|       4131|       3747|  00:00:00.835(       835.374 ms.)|      1.041|  00:00:00.000(          .000 ms.)|       .000
|    2|  04.04.2019 12:00|       4133|    1002722|  00:01:52.419(    112419.376 ms.)|    278.534|  00:00:00.149(       149.105 ms.)|       .133
|    3|  04.04.2019 13:00|       4135|    2373043|  00:04:26.791(    266791.988 ms.)|    659.179|  00:00:00.064(        64.261 ms.)|       .024
|    4|  04.04.2019 14:00|       4137|    2397326|  00:04:43.033(    283033.854 ms.)|    665.924|  00:00:00.024(        24.505 ms.)|       .009
|    5|  04.04.2019 15:00|       4139|    2394416|  00:04:51.435(    291435.010 ms.)|    665.116|  00:00:12.025(     12025.895 ms.)|      4.126
|    6|  04.04.2019 16:00|       4143|    3525360|  00:10:13.492(    613492.351 ms.)|    979.267|  00:08:41.396(    521396.555 ms.)|     84.988
|    7|  04.04.2019 17:00|       4149|    3529197|  00:11:48.830(    708830.618 ms.)|    980.332|  00:12:47.834(    767834.052 ms.)|    108.324
|    8|  04.04.2019 18:01|       4157|    1145596|  00:01:19.217(     79217.372 ms.)|    313.004|  00:00:01.319(      1319.676 ms.)|      1.666
|    9|  04.04.2019 19:03|       4159|    2890362|  00:03:16.784(    196784.755 ms.)|    776.979|  00:00:01.441(      1441.386 ms.)|       .732
|   10|  04.04.2019 20:04|       4161|    5758631|  00:06:30.513(    390513.926 ms.)|   1573.396|  00:00:01.470(      1470.110 ms.)|       .376
|   11|  04.04.2019 21:03|       4163|    2781536|  00:03:06.470(    186470.979 ms.)|    785.745|  00:00:00.249(       249.865 ms.)|       .134
|   12|  04.04.2019 23:03|       4165|    1443155|  00:01:34.467(     94467.539 ms.)|    200.438|  00:00:00.015(        15.287 ms.)|       .016
|   13|  05.04.2019 01:03|       4167|    4387191|  00:06:51.380(    411380.293 ms.)|    609.332|  00:05:18.847(    318847.407 ms.)|     77.507
|   14|  05.04.2019 02:03|       4171|     189852|  00:00:10.989(     10989.899 ms.)|     52.737|  00:00:00.539(       539.110 ms.)|      4.906
|   15|  05.04.2019 03:01|       4173|       3627|  00:00:00.103(       103.000 ms.)|      1.042|  00:00:00.004(         4.131 ms.)|      4.010
|   16|  05.04.2019 04:00|       4175|       3627|  00:00:00.085(        85.235 ms.)|      1.025|  00:00:00.003(         3.811 ms.)|      4.471
|   17|  05.04.2019 05:00|       4177|       3747|  00:00:00.849(       849.454 ms.)|      1.041|  00:00:00.006(         6.124 ms.)|       .721
|   18|  05.04.2019 06:00|       4179|       3747|  00:00:00.849(       849.561 ms.)|      1.041|  00:00:00.000(          .051 ms.)|       .006
|   19|  05.04.2019 07:00|       4181|       3747|  00:00:00.839(       839.416 ms.)|      1.041|  00:00:00.000(          .062 ms.)|       .007
|   20|  05.04.2019 08:00|       4183|       3747|  00:00:00.846(       846.382 ms.)|      1.041|  00:00:00.000(          .007 ms.)|       .001
|   21|  05.04.2019 09:00|       4185|       3747|  00:00:00.855(       855.426 ms.)|      1.041|  00:00:00.000(          .065 ms.)|       .008
|   22|  05.04.2019 10:00|       4187|       3797|  00:01:40.150(    100150.165 ms.)|      1.055|  00:00:21.845(     21845.217 ms.)|     21.812

د ټولو SQL انتخابونو متن

غوښتنه

SELECT 
  queryid , 
  query 
FROM 
  pg_stat_history
WHERE 
  queryid IS NOT NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
GROUP BY queryid , query

نتیجه

لکه څنګه چې تاسو لیدلی شئ ، د کافي ساده وسیلو په کارولو سره ، تاسو کولی شئ د ډیټابیس د کاري بار او حالت په اړه ډیر ګټور معلومات ترلاسه کړئ.

یادونه:که موږ په پوښتنو کې queryid ثبت کړو، موږ به د جلا پوښتنې لپاره تاریخ ترلاسه کړو (د ځای خوندي کولو لپاره، د جلا پوښتنې لپاره راپورونه پریښودل شوي).

نو، د پوښتنې فعالیت احصایوي معلومات شتون لري او راټول شوي.
لومړی پړاو "د احصایوي معلوماتو راټولول" بشپړ شوی.

تاسو کولی شئ دوهم پړاو ته لاړ شئ - "د فعالیت میټریک تنظیم کول".
د PostgreSQL پوښتنو د فعالیت څارنه. 1 برخه - راپور ورکول

مګر دا په بشپړه توګه مختلف کیسه ده.

نور بیا…

سرچینه: www.habr.com

Add a comment