PostgreSQL技術(shù)大講堂 - 第34講:調(diào)優(yōu)工具pgBagder部署
最新學(xué)訊:近期OCP認(rèn)證正在報(bào)名中,因考試人員較多請(qǐng)盡快報(bào)名獲取最近考試時(shí)間,報(bào)名費(fèi)用請(qǐng)聯(lián)系在線老師,甲骨文官方認(rèn)證,報(bào)名從速!
我要咨詢
PostgreSQL從小白到專家,是從入門(mén)逐漸能力提升的一個(gè)系列教程,內(nèi)容包括對(duì)PG基礎(chǔ)的認(rèn)知、包括安裝使用、包括角色權(quán)限、包括維護(hù)管理、、等內(nèi)容,希望對(duì)熱愛(ài)PG、學(xué)習(xí)PG的同學(xué)們有幫助,歡迎持續(xù)關(guān)注CUUG PG技術(shù)大講堂。
第34講:調(diào)優(yōu)工具pgBagder部署
第34講:11月18日(周六)19:30-20:30,往期文檔及視頻,聯(lián)系CUUG
內(nèi)容1 : 日志分析器pgBadger簡(jiǎn)介
內(nèi)容2 : pgBadger部署
內(nèi)容3 : 如何產(chǎn)生類似于AWR報(bào)告
內(nèi)容4 : 基于:一小時(shí)、一天、一周、一月的報(bào)告
內(nèi)容5 : 如何分析pgBadger
第34講:調(diào)優(yōu)工具pgBagder部署
pgBadger簡(jiǎn)介
pgBadger是一個(gè)PostgreSQL日志分析器,它是為提高速度而構(gòu)建的,具有來(lái)自PostgreSQL日志文件的完整報(bào)告。它是一個(gè)小型的Perl腳本,性能優(yōu)于任何其他PostgreSQL日志分析器。
pgBadger可以自動(dòng)檢測(cè)日志文件格式(syslog、stderr、csvlog或jsonlog)。它被設(shè)計(jì)用來(lái)解析巨大的日志文件和壓縮文件。支持的壓縮格式有g(shù)zip、bzip2、lz4、xz、zip和zstd。
還可以使用命令行選項(xiàng)將pgBadger限制為僅報(bào)告錯(cuò)誤或刪除報(bào)告的任何部分。
pgBadger支持在postgresql.conf文件中通過(guò)log_line_prefix 自定義的任何格式,只要它至少指定%t和%p模式。
pgBadger允許通過(guò)使用指定CPU數(shù)量的-j選項(xiàng)并行處理單個(gè)日志文件或多個(gè)文件。
如果要保存系統(tǒng)性能,也可以使用log_duration 替代log_min_duration_statement來(lái)僅報(bào)告持續(xù)時(shí)間和查詢數(shù)。
pgBadger特性
· pgBadger報(bào)告有關(guān)SQL查詢的所有信息:
總體統(tǒng)計(jì)數(shù)據(jù)。
等待最頻繁的查詢。
等待時(shí)間最長(zhǎng)的查詢。
生成最多臨時(shí)文件的查詢。
生成最大臨時(shí)文件的查詢。
最慢的查詢。
占用時(shí)間最多的查詢。
最頻繁的查詢。
最常見(jiàn)的錯(cuò)誤。
查詢時(shí)間直方圖。
會(huì)話時(shí)間柱狀圖。
參與熱門(mén)查詢的用戶。
頂級(jí)查詢中涉及的應(yīng)用程序。
產(chǎn)生最多取消的查詢。
查詢大部分被取消。
最耗時(shí)的準(zhǔn)備/綁定查詢。
· 還提供分為五分鐘的小時(shí)圖表
SQL查詢統(tǒng)計(jì)信息。
臨時(shí)文件統(tǒng)計(jì)。
檢查點(diǎn)統(tǒng)計(jì)。
自動(dòng)真空和自動(dòng)分析統(tǒng)計(jì)數(shù)據(jù)。
取消的查詢。
錯(cuò)誤事件(死機(jī)、致命、錯(cuò)誤和警告)。
錯(cuò)誤類分布。
· 一些關(guān)于分布的餅圖:
鎖定統(tǒng)計(jì)信息。
按類型查詢(選擇/插入/更新/刪除)。
每個(gè)數(shù)據(jù)庫(kù)/應(yīng)用程序的查詢類型分布。
每個(gè)數(shù)據(jù)庫(kù)/用戶/客戶端/應(yīng)用程序的會(huì)話數(shù)。
每個(gè)數(shù)據(jù)庫(kù)/用戶/客戶端/應(yīng)用程序的連接數(shù)。
根據(jù)表格自動(dòng)真空和自動(dòng)分析。
每個(gè)用戶的查詢數(shù)和每個(gè)用戶的總持續(xù)時(shí)間。
所有圖表都是可縮放的,可以保存為PNG圖像。報(bào)告的SQL查詢將自動(dòng)突出顯示和美化。
· 可以解析PgBouncer日志文件并創(chuàng)建以下報(bào)告
請(qǐng)求吞吐量
字節(jié)I/O吞吐量
查詢平均持續(xù)時(shí)間
同時(shí)舉行的會(huì)議
會(huì)話時(shí)間柱狀圖
每個(gè)數(shù)據(jù)庫(kù)的會(huì)話數(shù)
每個(gè)用戶的會(huì)話數(shù)
每個(gè)主機(jī)的會(huì)話數(shù)
已建立的聯(lián)系
每個(gè)數(shù)據(jù)庫(kù)的連接數(shù)
每個(gè)用戶的連接數(shù)
每個(gè)主機(jī)的連接數(shù)
使用最多的保留池
最常見(jiàn)錯(cuò)誤/事件
pgBadger報(bào)告模式
· pgBadger報(bào)告模式
一小時(shí)一個(gè)報(bào)告
每天一個(gè)報(bào)告
每周一個(gè)累積報(bào)告的增量報(bào)告
每月一個(gè)報(bào)告
多個(gè)進(jìn)程處理一個(gè)日志
多個(gè)進(jìn)程處理多個(gè)日志
pgBadger部署
· 官方下載地址
http://github.com/darold/pgbadger/releases
· 編譯與安裝(root用戶)
1、解壓后進(jìn)入該安裝目錄
# unzip pgbadger-master.zip
# cd pgbadger-master
2、編譯并安裝:
# perl Makefile.PL
# make && make install
3、默認(rèn)安裝目錄:
/usr/local/bin/pgbadger
postgresql.conf配置
logging_collector = on
log_directory = 'pg_log‘
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
log_autovacuum_min_duration = 0
log_rotation_size=10240
--例如,對(duì)于“stderr”日志格式,日志行前綴必須至少為:
log_line_prefix = '%t [%p]: '
--日志行前綴可以添加用戶、數(shù)據(jù)庫(kù)名稱、應(yīng)用程序名稱和客戶端ip地址,如下所示:
log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h '
--或者對(duì)于syslog日志文件格式:
log_line_prefix = 'user=%u,db=%d,app=%a,client=%h '
--日志消息支持英文,不支持中文:
lc_messages='en_US.UTF-8'
lc_messages='C‘
--記錄的日志語(yǔ)句
假如:log_statement=all
則:不會(huì)使用(log_min_duration_statement)記錄任何內(nèi)容
所以:log_min_duration_statement=0 #記錄所有的統(tǒng)計(jì)信息包含實(shí)際的查詢字符串
警告:不要同時(shí)啟用log_min_duration_statement、log_duration and log_statement ,這將導(dǎo)致錯(cuò)誤的計(jì)數(shù)器值。注意,這也會(huì)大大增加日志的大小。log_min_duration_statement應(yīng)始終首選。
如何產(chǎn)生報(bào)告
當(dāng)有許多小的日志文件和許多CPU時(shí),一次將一個(gè)內(nèi)核專用于一個(gè)日志文件會(huì)更快。要啟用此行為,必須改用-J N選項(xiàng)。對(duì)于每個(gè)10MB的200個(gè)日志文件,-J選項(xiàng)的使用開(kāi)始變得非常有效,有8個(gè)內(nèi)核。使用此方法,您將確保不會(huì)丟失報(bào)表中的任何查詢。
一個(gè)在服務(wù)器上完成的基準(zhǔn)測(cè)試,有8個(gè)CPU和9.5GB的單個(gè)文件。
Option | 1 CPU | 2 CPU | 4 CPU | 8 CPU
--------+---------+-------+-------+------
-j | 1h41m18 | 50m25 | 25m39 | 15m58
-J | 1h41m18 | 54m28 | 41m16 | 34m45
200個(gè)日志文件,每個(gè)10MB,總共2GB,結(jié)果略有不同:
Option | 1 CPU | 2 CPU | 4 CPU | 8 CPU
--------+-------+-------+-------+------
-j | 20m15 | 9m56 | 5m20 | 4m20
-J | 20m15 | 9m49 | 5m00 | 2m40
--產(chǎn)生一個(gè)小時(shí)的日志報(bào)告:
$ pgbadger -q /usr/local/pg12.2/data/pg_log/postgresql-2020-06-19_00*.log \
-o /home/postgres/www/pg_reports/day-06-19-00.html
--產(chǎn)生每日和每周的日志報(bào)告:
$ pgbadger -I -q /usr/local/pg12.2/data/pg_log/* \
-O /home/postgres/www/pg_reports/ \
-f stderr
在這種模式下,pgBadger將在輸出目錄中創(chuàng)建一個(gè)自動(dòng)增量文件。這意味著可以在每周旋轉(zhuǎn)的日志文件上每天以這種模式運(yùn)行pgBadger,并且它不會(huì)對(duì)日志條目計(jì)數(shù)兩次,可以使用crontab進(jìn)行定時(shí)運(yùn)行。
--重建報(bào)告:
pgbadger -X -I -O /home/postgres/www/pg_reports/ --rebuild
此時(shí)在reports目錄下產(chǎn)生創(chuàng)建一個(gè)目錄,里面包含js文件,同時(shí)在另外一個(gè)目錄下創(chuàng)建一個(gè)目錄week-25,存放index文件。
它還將更新所有資源文件(JS和CSS)。如果報(bào)表是使用此選項(xiàng)生成的,請(qǐng)使用-E或--explode。
--默認(rèn)情況下,增量模式下的pgBadger只計(jì)算每日和每周報(bào)告。如果需要每月累積報(bào)告,則必須使用單獨(dú)的命令指定要生成的報(bào)告。例如,為2019年8月編制一份報(bào)告:
pgbadger --month-report 2919-08 /path/to/incremantal/reports/
JSON FORMAT
JSON格式有利于與其他語(yǔ)言共享數(shù)據(jù),這使得pgBadger結(jié)果很容易集成到其他監(jiān)控工具(如Cacti或Graphite)中。
報(bào)告界面一
報(bào)告界面二
CUUG PostgreSQL技術(shù)大講堂系列公開(kāi)課,往期視頻及文檔,請(qǐng)聯(lián)系CUUG客服。
- 冉乃綱-老師CUUG金牌講師
- 冉老師 CUUG金牌講師 Oracle及RedHat高級(jí)講師、Unix/Linux 資深專家...[詳細(xì)了解老師]

- 陳衛(wèi)星-老師CUUG金牌講師
- 陳老師 CUUG金牌講師 精通Oracle管理、備份恢復(fù)、性能優(yōu)化 11年Ora...[詳細(xì)了解老師]
