ãšã³ãžã㢠- ã©ãã³èªãã翻蚳 - ã€ã³ã¹ãã¬ãŒã·ã§ã³ãåŸãã
ãšã³ãžãã¢ã¯äœã§ãã§ããŸãã (c) R. ãã£ãŒãŒã«ã
ãšãã°ã©ãã
ãŸãã¯ãããŒã¿ããŒã¹ç®¡çè
ãéå»ã®ããã°ã©ãã³ã°ãæãåºãå¿
èŠãããçç±ã«ã€ããŠã®è©±ã
åºæ
ãã¹ãŠã®ååãå€æŽãããŸããã äžèŽã¯ã©ã³ãã ã§ãã å 容ã¯ãããŸã§èè ã®å人çãªæèŠã§ãã
ä¿èšŒã®åŠèª: äºå®ãããŠããäžé£ã®èšäºã§ã¯ã䜿çšãããããŒãã«ãšã¹ã¯ãªããã®è©³çŽ°ãã€æ£ç¢ºãªèª¬æã¯ãããŸããã çŽ æããçŸç¶ã®ãŸãŸãããã«äœ¿çšããããšã¯ã§ããŸããã
ãŸããææã®éãå€ãã®ã§ã
第äºã«ãå®éã®é¡§å®¢ã®çç£æ ç¹ãšã®ç·å¯ãã®ããã§ãã
ãããã£ãŠãèšäºã«ã¯æãäžè¬çãªåœ¢åŒã®ã¢ã€ãã¢ãšèª¬æã®ã¿ãå«ãŸããŸãã
ããããå°æ¥çã«ã¯ãã·ã¹ãã ã GitHub ã«æçš¿ã§ããã¬ãã«ãŸã§æé·ãããããããŸããããããã§ãªããããããŸããã æéã衚瀺ãããŸãã
ç©èªã®å§ãŸãââ
æãäžè¬çãªèšèã§èšãã°ããã®çµæäœãèµ·ãã£ãã®ã - ã
ãªããããã¹ãŠãå¿ èŠãªã®ã§ãããã?
ããŠããŸãå¿ããªãããã«ãéè·åŸã®èŒãããæ¥ã
ãæãåºããŠãã ããã
XNUMXã€ç®ã¯ãæžãããå
容ãäœç³»åããããšã§ãã ç§èªèº«ãæã
æ··ä¹±ãå§ããããå¥ã
ã®éšåãå¿ãããããããšããããŸãã
ãŸãããããŠæãéèŠãªããšã¯ãããããããã誰ãã«ãšã£ãŠåœ¹ç«ã¡ãè»èŒªã®åçºæãçæéããé¿ããã®ã«åœ¹ç«ã€ãããããŸããã èšãæããã°ãïŒããããã¹ããŒã§ã¯ãªãïŒèªåã®ã«ã«ããæ¹åããããšã§ãã ãªããªãããã®äžã§æã䟡å€ã®ãããã®ã¯ã¢ã€ãã¢ã ããã§ãã äž»ãªããšã¯ã¢ã€ãã¢ãèŠã€ããããšã§ãã ãããŠããã®ã¢ã€ãã¢ãçŸå®ã«ç§»ãããšã¯ããã§ã«çŽç²ã«æè¡çãªåé¡ã§ãã
ããã§ã¯ããã£ããå§ããŸããã...
åé¡ã®å®åŒåã
ãããŸãïŒ
PostgreSQL(10.5)ãæ··åè² è· (OLTP+DSS)ãäžè² è·ããè»œè² è·ãAWS ã¯ã©ãŠãã§ãã¹ããããŠããŸãã
ããŒã¿ããŒã¹ç£èŠã¯ãªããã€ã³ãã©ã¹ãã©ã¯ãã£ç£èŠã¯æå°éã®æ§æã§æšæºã® AWS ããŒã«ãšããŠæäŸãããŸãã
å¿ é ïŒ
ããŒã¿ããŒã¹ã®ããã©ãŒãã³ã¹ãšã¹ããŒã¿ã¹ãç£èŠãã倧éã®ããŒã¿ããŒã¹ ã¯ãšãªãæé©åããããã®åææ
å ±ãèŠã€ããŠå
¥æããŸãã
ãœãªã¥ãŒã·ã§ã³ã®ç°¡åãªçŽ¹ä»ãŸãã¯åæ
ãŸãã¯ããšã³ãžãã¢ã«ãšã£ãŠã®ã¡ãªãããšãã©ãã«ã®æ¯èŒåæã®èŠ³ç¹ããåé¡è§£æ±ºã®éžæè¢ãåæãããã®ã¡ãªãããšãã¡ãªãããæ åœè ãªã¹ãã«èŒã£ãŠããã¯ãã®äººã«ä»»ããŠã¿ãŸãããã管çã®ã
ãªãã·ã§ã³ 1 - ããªã³ããã³ãã§äœæ¥ããã
ãã¹ãŠããã®ãŸãŸã«ããŠãããŸãã 顧客ãããŒã¿ããŒã¹ãã¢ããªã±ãŒã·ã§ã³ã®å¥å
šæ§ãããã©ãŒãã³ã¹ã«æºè¶³ã§ããªãå Žåã¯ãé»åã¡ãŒã«ã§ããŸãã¯ãã±ãã ããã¯ã¹ã«ã€ã³ã·ãã³ããäœæã㊠DBA ãšã³ãžãã¢ã«éç¥ããŸãã
éç¥ãåãåã£ããšã³ãžãã¢ã¯ãåé¡ãç解ãã解決çãææ¡ãããããã¹ãŠãèªåçã«è§£æ±ºããããããã«ããŠãããã«ãã¹ãŠãå¿ããããããšãæåŸ
ããŠåé¡ãæ£äžãããŸãã
ãžã³ãžã£ãŒãã¬ãããšããŒãããææ²å·ãšéèµ·ãžã³ãžã£ãŒãã¬ãããšããŒããïŒ
1. äœèšãªããšã¯äœãããªã
2. å€ã«åºãŠæ±ããæ©äŒã¯åžžã«ãããŸãã
3. äžäººã§éãããæéãããããããã
ãããéèµ·:
1. é
ããæ©ããã顧客ã¯ãã®äžçã«ãããååšã®æ¬è³ªãšæ®éçãªæ£çŸ©ã«ã€ããŠèããããäžåºŠèªåããã§ããã - ãªãç§ã¯åœŒãã«ãéãæãã®ã§ããïŒ çµæã¯åžžã«åãã§ããå¯äžã®åé¡ã¯ã顧客ããã€é£œããŠæãæ¯ã£ãŠå¥ããåãããã§ãã ãããŠãã£ãŒããŒã¯ç©ºã§ãã æ²ããã§ããã
2. ãšã³ãžãã¢ã®è²æã¯ãŒãã
3. äœæ¥ãšç©ã¿èŸŒã¿ã®ã¹ã±ãžã¥ãŒã«èšå®ãé£ãã
ãªãã·ã§ã³2 - ãã¿ã³ããªã³ã§èžããéŽãå±¥ããŠå±¥ããŠã
段èœ1-ãªãç£èŠã·ã¹ãã ãå¿
èŠãªã®ããšãããšããªã¯ãšã¹ãã¯ãã¹ãŠåãä»ããŸãã ããŒã¿ ãã£ã¯ã·ã§ããªãšåçãã¥ãŒã«å¯ŸããŠããããçš®é¡ã®ã¯ãšãªã倧éã«èµ·åããããããçš®é¡ã®ã«ãŠã³ã¿ãŒããªã³ã«ãããã¹ãŠãããŒãã«ã«åã蟌ã¿ãããã°ãªã¹ããšããŒãã«ãå®æçã«åæããŸãã ãã®çµæãçŸãããŸãã¯ããŸãçŸãããªãã°ã©ããè¡šãã¬ããŒããäœæãããŸãã éèŠãªããšã¯ãããã¯ãã£ãšãã£ãšã§ãã
段èœ2-ã¢ã¯ãã£ããã£ãçæããããããã¹ãŠã®åæãå®è¡ããŸãã
段èœ3-ç§ãã¡ã¯ããææžãæºåããŠããŸãããããåã«ãããŒã¿ããŒã¹ãã©ã®ããã«è£
åãããããšããææžãšåŒã³ãŸãã
段èœ4- 顧客ã¯ããã®çŽ æŽãããã°ã©ããå³ãèŠãŠãåäŸãã¿ãçŽ æŽãªèªä¿¡ãæ±ããŠããŸããããã§ãããã«ãã¹ãŠãããŸãããã§ãããã ãããŠãç°¡åãã€èŠçãªãçµæžçãªãœãŒã¹ãææŸãããšãã§ããŸãã çµå¶é£ãåœç€Ÿã®ãšã³ãžãã¢ãäžçæžåœåããŠããããšã確信ããŠããŸãã æ倧ç©èŒéã
段èœ5- ã¹ããã 1 ãå®æçã«ç¹°ãè¿ããŸãã
ãžã³ãžã£ãŒãã¬ãããšããŒãããææ²å·ãšéèµ·ãžã³ãžã£ãŒãã¬ãããšããŒããïŒ
1. ãããŒãžã£ãŒãšãšã³ãžãã¢ã®ç掻ã¯ã·ã³ãã«ã§äºæž¬å¯èœã§ã掻åã«æºã¡ãŠããŸãã ãã¹ãŠãè³ããã§ã誰ããå¿ããã
2. 顧客ã®ç掻ãæªããããŸããã顧客ã¯ãå°ãææ
¢ããã°ãã¹ãŠããŸããããšåžžã«ç¢ºä¿¡ããŠããŸãã è¯ããªã£ãŠã¯ããªãããŸãããã®äžçã¯äžå
¬å¹³ã ãæ¥äžã§ã¯å¹žéã«ãªãã ããã
ãããéèµ·:
1. é
ããæ©ãããåãããšãããå°ãå®äŸ¡ã«æäŸãããããè³¢æãªåæ§ã®ãµãŒãã¹ã®ãããã€ããŒãç»å Žããã§ãããã ãããŠçµæãåããªãããªããã£ãšãéãæãå¿
èŠãããã®ã§ããããã ããã¯åã³ãã£ãŒããŒã®æ¶æ»
ã«ã€ãªãããŸãã
2. éå±ã§ãã ã©ããªã«å°ããªæå³ã®ãã掻åãããªããšéå±ãªããšã§ãããã
3. 以åã®ããŒãžã§ã³ãšåæ§ - éçºã¯ãããŸããã ãã ãããšã³ãžãã¢ã«ãšã£ãŠã®ãã€ãã¹ç¹ã¯ãæåã®ãªãã·ã§ã³ãšã¯ç°ãªããIDB ãåžžã«çæããå¿
èŠãããããšã§ãã ããã«ã¯æéãããããŸãã ããã¯ããªãã®æãã人ã®å©çã®ããã«è²»ããããšãã§ããŸãã ããªãã¯èªåã®äžè©±ãããããšãã§ããªãã®ã§ã誰ããããªãã®ããšãæ°ã«ãããŠããŸãã
ãªãã·ã§ã³ 3 - èªè»¢è»ãçºæããå¿ èŠã¯ãããŸãããèªè»¢è»ãè³Œå ¥ããŠä¹ãå¿ èŠããããŸãã
ä»ç€Ÿã®ãšã³ãžãã¢ã¯ããããæ¿ç¥ã§ããŒã«ãšäžç·ã«ãã¶ãé£ã¹ãŠããŸãïŒããã90幎代ã®ãµã³ã¯ãããã«ãã«ã¯ã®èŒãããæ代ã§ããïŒã äœæããããããã°ãããåäœããŠããç£èŠã·ã¹ãã ã䜿çšããŸããããäžè¬çã«èšã£ãŠãããã㯠(å°ãªããšãäœæè
ã«ã¯) å©çããããããŸãã
ãžã³ãžã£ãŒãã¬ãããšããŒãããææ²å·ãšéèµ·ãžã³ãžã£ãŒãã¬ãããšããŒããïŒ
1. ãã§ã«çºæãããŠãããã®ãçºæããã®ã«æéãç¡é§ã«ããå¿
èŠã¯ãããŸããã åã£ãŠäœ¿ã£ãŠãã ããã
2. ç£èŠã·ã¹ãã ã¯æãè
ã«ãã£ãŠæžããããã®ã§ã¯ãªãããã¡ãã䟿å©ã§ãã
3. 皌åäžã®ç£èŠã·ã¹ãã ã¯éåžžããã£ã«ã¿ãªã³ã°ãããæçšãªæ
å ±ãæäŸããŸãã
ãããéèµ·:
1. ãã®å Žåã®ãšã³ãžãã¢ã¯ãšã³ãžãã¢ã§ã¯ãªããåãªãä»äººã®è£œåã®ãŠãŒã¶ãŒããŸãã¯ãŠãŒã¶ãŒã§ãã
2. 顧客ã¯ãéåžžã¯ç解ããããªããã®ã賌å
¥ããå¿
èŠãããããšãçŽåŸããå¿
èŠãããã賌å
¥ãã¹ãã§ã¯ãããŸãããéåžžããã®å¹Žã®äºç®ã¯æ¿èªãããŠãããå€æŽãããããšã¯ãããŸããã 次ã«ãå¥ã®ãªãœãŒã¹ãå²ãåœãŠãç¹å®ã®ã·ã¹ãã çšã«æ§æããå¿
èŠããããŸãã ãããã®ã ãŸããæ¯æããæ¯æãããããŠå床æ¯æãå¿
èŠããããŸãã ãããŠé¡§å®¢ã¯ã±ãã§ãã ããããã®äººçã®æšæºã§ãã
ã©ãããããã§ã«ãã·ã§ãã¹ããŒïŒ ããªãã®è³ªåã¯éåžžã«é©åã§ãã ïŒãšïŒ
ãã®ç¹å®ã®ã±ãŒã¹ãšçŸåšã®ç¶æ³ã§ã¯ãå°ãç°ãªãæ¹æ³ã§å®è¡ã§ããŸãã èªåãã¡ã§ç£èŠã·ã¹ãã ãäœã£ãŠã¿ãŸãããã
ãã¡ãããèšèã®å®å
šãªæå³ã§ã·ã¹ãã ã§ã¯ãããŸããããããã¯ããŸãã«ã倧声ã§ããããŸããããšã§ãããå°ãªããšãäœããã®æ¹æ³ã§èªåã«ãšã£ãŠæ¥œã«ãªããããã©ãŒãã³ã¹ã®ã€ã³ã·ãã³ãã解決ããããã«ããå€ãã®æ
å ±ãåéã§ããããã«ããå¿
èŠããããŸãã ç¶æ³ã«é¥ããªãããã«ããããã«ããããã«è¡ã£ãŠãã ãããã©ãã«ãããããããŸããããããèŠã€ããŠãã ãããäœãããããŸãããã
ãã®ãªãã·ã§ã³ã®é·æãšçæã¯æ¬¡ã®ãšããã§ãã
é·æïŒ
1. é¢çœãã§ããã ãŸããå°ãªããšããããŒã¿ãã¡ã€ã«ã®çž®å°ãè¡šé åã®å€æŽãªã©ããšããå®æ°ããã¯èå³æ·±ãã§ãã
2. ãããã¯æ°ããã¹ãã«ãšæ°ããéçºã§ãã é
ããæ©ãããåœç¶ã®ãžã³ãžã£ãŒãã¬ãããšããŒãããæã«å
¥ãã§ãããã
çæïŒ
1. ä»äºãããªããã°ãªããŸããã ããããåãã
2. ãã¹ãŠã®æŽ»åã®æå³ãšèŠç¹ãå®æçã«èª¬æããå¿
èŠããããŸãã
3. ãšã³ãžãã¢ãå©çšã§ããå¯äžã®ãªãœãŒã¹ã§ããæéã¯å®å®ã«ãã£ãŠå¶éãããŠãããããäœããç ç²ã«ããå¿
èŠããããŸãã
4. ææªã§æãäžæå¿«ãªåºæ¥äº ãã®çµæããããºãã§ããªããã«ãšã«ã§ããªããæªç¥ã®å°åç©ãã®ãããªãŽããåºãŠãããããããŸããã
äœããå±éºã«ããããªã人ã¯ã·ã£ã³ãã³ã飲ã¿ãŸããã
ããã§ã楜ããããšãå§ãŸããŸãã
äžè¬çãªã¢ã€ã㢠- æŠç¥å³
(ã€ã©ã¹ãã¯èšäºããåŒçš «
説æïŒ
- ã¿ãŒã²ãã ããŒã¿ããŒã¹ã¯ãæšæºã® PostgreSQL æ¡åŒµæ©èœãpg_stat_statementsããšãšãã«ã€ã³ã¹ããŒã«ãããŸãã
- ç£èŠããŒã¿ããŒã¹ã§ã¯ãåæ段é㧠pg_stat_statements ã®å±¥æŽãä¿åããå°æ¥ã®ã¡ããªã¯ã¹ãšç£èŠãæ§æããããã®äžé£ã®ãµãŒãã¹ ããŒãã«ãäœæããŸãã
- ã¢ãã¿ãªã³ã° ãã¹ãäžã§ããã±ãã ã·ã¹ãã ã§ã€ã³ã·ãã³ããçæããããã®ã¹ã¯ãªãããå«ããäžé£ã® bash ã¹ã¯ãªãããäœæããŸãã
ãµãŒãã¹ããŒãã«
ãŸããERD ãç°¡ç¥åããå³ãæçµçã«äœãèµ·ãã£ãã:
ããŒãã«ã®ç°¡åãªèª¬æçµç¹ - ãã¹ããã€ã³ã¹ã¿ã³ã¹ãžã®æ¥ç¶ãã€ã³ã
ããŒã¿ããŒã¹ - ããŒã¿ããŒã¹ãªãã·ã§ã³
pg_stat_history - ã¿ãŒã²ãã ããŒã¿ããŒã¹ã® pg_stat_statements ãã¥ãŒã®äžæã¹ãããã·ã§ãããä¿åããããã®å±¥æŽããŒãã«
ã¡ããªãã¯çšèªé - ããã©ãŒãã³ã¹ææšã®èŸæž
metric_config - åã
ã®ã¡ããªã¯ã¹ã®æ§æ
ã¡ããªã㯠- ç£èŠãããŠãããªã¯ãšã¹ãã®ç¹å®ã®ã¡ããªãã¯
metric_alert_history - ããã©ãŒãã³ã¹èŠåã®å±¥æŽ
ãã°ã¯ãšãª - AWS ããããŠã³ããŒããã PostgreSQL ãã° ãã¡ã€ã«ãã解æãããã¬ã³ãŒããä¿åããããã®ãµãŒãã¹ ããŒãã«
ããŒã¹ã©ã€ã³ - ããŒã¹ãšããŠäœ¿çšãããæéã®ãã©ã¡ãŒã¿
ãã§ãã¯ãã€ã³ã - ããŒã¿ããŒã¹ã®ã¹ããŒã¿ã¹ã確èªããããã®ã¡ããªã¯ã¹ã®æ§æ
ãã§ãã¯ãã€ã³ã_ã¢ã©ãŒã_å±¥æŽ â ããŒã¿ããŒã¹ãã«ã¹ãã§ãã¯ã¡ããªã¯ã¹ã®èŠåå±¥æŽ
pg_stat_db_queries â ã¢ã¯ãã£ããªãªã¯ãšã¹ãã®ãµãŒãã¹ ããŒãã«
掻åèšé² â ã¢ã¯ãã£ãã㣠ãã° ãµãŒãã¹ ããŒãã«
ãã©ãããªã€ã â ãã©ããæ§æãµãŒãã¹ããŒãã«
ã¹ããŒãž 1 - ããã©ãŒãã³ã¹çµ±èšãåéããã¬ããŒããååŸãã
ããŒãã«ã¯çµ±èšæ
å ±ãä¿åããããã«äœ¿çšãããŸãã pg_stat_history
pg_stat_history ããŒãã«æ§é
ããŒãã«ãpublic.pg_stat_historyãå | ã¿ã€ã | 修食å---------------------+---------- ---+---- -------------------------------- ID | æŽæ° | null ã§ã¯ãããŸãã ããã©ã«ã nextval('pg_stat_history_id_seq'::regclass) snapshot_timestamp | ã¿ã€ã ãŸãŒã³ãªãã®ã¿ã€ã ã¹ã¿ã³ã | ããŒã¿ããŒã¹ID | æŽæ° | dbid | ãªã€ã | ãŠãŒã¶ãŒID | ãªã€ã | ã¯ãšãªID | ããã°ã€ã³ã | ã¯ãšãª | ããã¹ã | åŒã³åºã | ããã°ã€ã³ã | åèšæé | å粟床 | åæé | å粟床 | æ倧æé | å粟床 | å¹³åæé | å粟床 | stddev_time | å粟床 | è¡ | ããã°ã€ã³ã | å ±æ_blks_hit | ããã°ã€ã³ã | å ±æ_blks_read | ããã°ã€ã³ã | å ±æ_blks_dirtied | ããã°ã€ã³ã | å ±æ_blks_write | ããã°ã€ã³ã | ããŒã«ã«ãããã¯ããã | ããã°ã€ã³ã | ããŒã«ã«_blks_read | ããã°ã€ã³ã | ããŒã«ã«_blks_dirtied | ããã°ã€ã³ã | local_blks_write | ããã°ã€ã³ã | temp_blks_read | ããã°ã€ã³ã | temp_blks_write | ããã°ã€ã³ã | ãããã¯èªã¿åãæé | å粟床 | ãããã¯æžã蟌ã¿æé | å粟床 | ããŒã¹ã©ã€ã³ ID | æŽæ° | ã€ã³ããã¯ã¹: "pg_stat_history_pkey" PRIMARY KEYãbtree (id) "database_idx" btree (database_id) "queryid_idx" btree (queryid) "snapshot_timestamp_idx" btree (snapshot_timestamp) å€éšããŒå¶çŽ: "database_id_fk" FOREIGN KEY (database_id) REFERENCES database(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')
total_time å¥ã® SQL TOP10
åãåãã
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
-------------------------------------------------- ------------------------------------ | åèšå®è¡æéããšã® SQL ããã 10 | #| ã¯ãšãªID| é»è©±| %| ãåŒã³åºããŸãåèšæé (ããªç§) | dbtime % +--------+----------+----------+-----------+------ --------------------+---------- | 1| 821760255| 2| .00001|00:03:23.141( 203141.681 ããªç§)| 5.42 | 2| 4152624390| 2| .00001|00:03:13.929( 193929.215 ããªç§)| 5.17 | 3| 1484454471| 4| .00001|00:02:09.129( 129129.057 ããªç§)| 3.44 | 4| 655729273| 1| .00000|00:02:01.869( 121869.981 ããªç§)| 3.25 | 5| 2460318461| 1| .00000|00:01:33.113( 93113.835 ããªç§)| 2.48 | 6| 2194493487| 4| .00001|00:00:17.377( 17377.868 ããªç§)| .46 | 7| 1053044345| 1| .00000|00:00:06.156( 6156.352 ããªç§)| .16 | 8| 3644780286| 1| .00000|00:00:01.063( 1063.830 ããªç§)| .03
åèš I/O æéããšã® SQL TOP10
åãåãã
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 æéããšã® SQL ã®ããã 10 | #| ã¯ãšãªID| é»è©±| %| ãåŒã³åºããŸãI/O æé (ããªç§)|db I/O æé % +----+-----------+-----------+------ ----------+------------------------------+----------- -- | 1| 4152624390| 2| .00001|00:08:31.616( 511616.592 ããªç§)| 31.06æ2æ¥ | 821760255| 2| 00001| .00|08:27.099:507099.036( 30.78 ããªç§)| 3 | 655729273| 1| 00000| .00|05:02.209:302209.137( 18.35 ããªç§)| 4 | 2460318461| 1| 00000| .00|04:05.981:245981.117( 14.93 ããªç§)| 5 | 1484454471| 4| 00001| .00|00:39.144:39144.221( 2.38 ããªç§)| 6 | 2194493487| 4| 00001| .00|00:18.182:18182.816( 1.10 ããªç§)| 7 | 1053044345| 1| 00000| .00|00:16.611:16611.722( 1.01 ããªç§)| 8 | 3644780286| 1| 00000| .00|00:00.436:436.205( 03 ããªç§)| .XNUMX
æ倧å®è¡æéå¥ã® SQL TOP10
åãåãã
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
-------------------------------------------------- ------------------------------------ | SQL ã®æ倧å®è¡æéå¥ããã 10 | #| ã¹ãããã·ã§ãã| ã¹ãããã·ã§ããID| ã¯ãšãªID| max_time (ããªç§) +------+---------------------+-----------+--------- -------------------------------------------- | 1| 05.04.2019/01/03 4169:655729273| 00| 02| 01.869:121869.981:2(04.04.2019ããªç§) | 17| 00/4153/821760255 00:01| 41.570| 101570.841| 3:04.04.2019:16( 00 ããªç§) | 4146| 821760255/00/01 41.570:101570.841| 4| 04.04.2019| 16:00:4144( 4152624390 ããªç§) | 00| 01/36.964/96964.607 5:04.04.2019| 17| 00| 4151:4152624390:00(01ããªç§) | 36.964| 96964.607/6/05.04.2019 10:00| 4188| 1484454471| 00:01:33.452(93452.150ããªç§) | 7| 04.04.2019/17/00 4150:2460318461 | 00| 01| 33.113:93113.835:8(04.04.2019ããªç§) | 15| 00/4140/1484454471 00:00| 11.892| 11892.302| 9:04.04.2019:16( 00 ããªç§) | 4145| 1484454471/00/00 11.892:11892.302| 10| 04.04.2019| 17:00:4152(1484454471ããªç§) | 00| 00/11.892/11892.302 XNUMX:XNUMX| XNUMX| XNUMX| XNUMX:XNUMX:XNUMX(XNUMXããªç§) | XNUMX| XNUMX/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX:XNUMX:XNUMX(XNUMXããªç§)
TOP10 SQL by SHAREDãããã¡èªã¿åã/æžã蟌ã¿
åãåãã
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
-------------------------------------------------- ------------------------------------ | å ±æãããã¡èªã¿åã/æžã蟌ã¿ã«ãã SQL ã®ããã 10 | #| ã¹ãããã·ã§ãã| ã¹ãããã·ã§ããID| ã¯ãšãªID| å ±æãããã¯ã®èªã¿åã| å ±æãããã¯æžã蟌㿠+--------+---------------------+----------+---------- -+---------------------+--------------------- | 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 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 ãã¹ãã°ã©ã | åèšé話æ°: 33851920 | æå°æé : 00:00:01.063 | æ倧æé : 00:02:01.869 ---------------------------------- -------- ---------------------------- | æå°æç¶æé| æ倧æç¶æé| é»è©± +---------------------------------+------------- ----------+---------- | 00:00:01.063(1063.830ããªç§) | 00:00:13.144( 13144.445 ããªç§) | 9 | 00:00:13.144( 13144.445 ããªç§) | 00:00:25.225(25225.060ããªç§) | 0 | 00:00:25.225(25225.060ããªç§) | 00:00:37.305(37305.675ããªç§) | 0 | 00:00:37.305(37305.675ããªç§) | 00:00:49.386(49386.290ããªç§) | 0 | 00:00:49.386(49386.290ããªç§) | 00:01:01.466(61466.906ããªç§) | 0 | 00:01:01.466(61466.906ããªç§) | 00:01:13.547( 73547.521 ããªç§) | 0 | 00:01:13.547( 73547.521 ããªç§) | 00:01:25.628(85628.136ããªç§) | 0 | 00:01:25.628(85628.136ããªç§) | 00:01:37.708(97708.751ããªç§) | 4 | 00:01:37.708(97708.751ããªç§) | 00:01:49.789(109789.366ããªç§) | 2 | 00:01:49.789(109789.366ããªç§) | 00:02:01.869(121869.981ããªç§) | 0
10 ç§ãããã®ã¯ãšãªæ°ã«ããããã XNUMX ã®ã¹ãããã·ã§ãã
ãªã¯ãšã¹ã
--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
|------------------------------------------------- -------------------------------------- | QueryPerSeconds æ°é ã«äžŠã¹ããã TOP10 ã¹ãããã·ã§ãã -------------------------------------- ------ -------------------------------------------- ------ ------------------------------------------ | #| ã¹ãããã·ã§ãã| ã¹ãããã·ã§ããID| é»è©±| åèšããŒã¿ããŒã¹æé| QPS | I/O æé | I/O æé % +-----+---------------------+----------+---------- ----+----------------------------+---------- ------------------------+---------------------- | 1| 04.04.2019/20/04 4161:5758631| 00| 06| 30.513:390513.926:1573.396( 00 ããªç§)| 00| 01.470:1470.110:376(2ããªç§)| .04.04.2019 | 17| 00/4149/3529197 00:11| 48.830| 708830.618| 980.332:00:12( 47.834 ããªç§)| 767834.052| 108.324:3:04.04.2019( 16 ããªç§)| 00 | 4143| 3525360/00/10 13.492:613492.351| 979.267| 00| 08:41.396:521396.555( 84.988 ããªç§)| 4| 04.04.2019:21:03( 4163 ããªç§)| 2781536 | 00| 03/06.470/186470.979 785.745:00| 00| 00.249| 249.865:134:5(04.04.2019ããªç§)| 19| 03:4159:2890362( 00 ããªç§)| .03 | 16.784| 196784.755/776.979/00 00:01.441| 1441.386| 732| 6:04.04.2019:14(00ããªç§)| 4137| 2397326:00:04( 43.033 ããªç§)| .283033.854 | 665.924| 00/00/00.024 24.505:009| 7| 04.04.2019| 15:00:4139( 2394416 ããªç§)| 00| 04:51.435:291435.010( 665.116 ããªç§)| .00 | 00| 12.025/12025.895/4.126 8:04.04.2019| 13| 00| 4135:2373043:00( 04 ããªç§)| 26.791| 266791.988:659.179:00(00ããªç§)| 00.064 | 64.261| 024/9/05.04.2019 01:03 | 4167| 4387191| 00:06:51.380( 411380.293 ããªç§)| 609.332| 00:05:18.847( 318847.407 ããªç§)| .77.507 | 10| 04.04.2019/18/01 4157:1145596| 00| 01| 19.217:79217.372:313.004( 00 ããªç§)| 00| 01.319:1319.676:1.666( XNUMX ããªç§)| XNUMX | XNUMX| XNUMX/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX:XNUMX:XNUMX( XNUMX ããªç§)| XNUMX| XNUMX:XNUMX:XNUMX(XNUMXããªç§)| 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
åèš
ã芧ã®ãšãããéåžžã«ç°¡åãªæ¹æ³ã§ãã¯ãŒã¯ããŒããšããŒã¿ããŒã¹ã®ç¶æ ã«é¢ããå€ãã®æçšãªæ å ±ãååŸã§ããŸãã
泚ïŒã¯ãšãªã§ã¯ãšãª ID ãä¿®æ£ãããšãå¥ã®ãªã¯ãšã¹ãã®å±¥æŽãååŸãããŸã (ã¹ããŒã¹ãç¯çŽããããã«ãå¥ã®ãªã¯ãšã¹ãã®ã¬ããŒãã¯çç¥ãããŠããŸã)ã
ãããã£ãŠãã¯ãšãªã®ããã©ãŒãã³ã¹ã«é¢ããçµ±èšããŒã¿ãå©çšå¯èœã§ãããåéãããŸãã
第äžæ®µéãçµ±èšããŒã¿ã®åéããå®äºããŸããã
第 XNUMX 段éã®ãããã©ãŒãã³ã¹ææšã®èšå®ãã«é²ãããšãã§ããŸãã
ããããããã¯ãŸãå¥ã®è©±ã§ãã
ç¶ç¶ããã«ã¯...
åºæïŒ habr.com