pg_profile,這款工具是個(gè)戰(zhàn)斗民族寫(xiě)的。我們之所以選擇這款工具是因?yàn)樗銐蚝?jiǎn)單,和OracleAWR報(bào)告工作方式很像。而且它最大的優(yōu)點(diǎn)是用純粹pl/pgsql編寫(xiě),勿需使用任何外部庫(kù)或者軟件。
接下來(lái)我們看下怎么安裝和配置pg_profile,并通過(guò)報(bào)告分析問(wèn)題。
首先需要配置數(shù)據(jù)庫(kù)相關(guān)StatisticsCollector參數(shù),具體配置參數(shù)如下:
track_activities = on track_counts = on track_io_timing = on track_functions = all/p1 |
這四個(gè)參數(shù)建議打開(kāi),不然使用會(huì)有一些影響。其中track_activities和track_counts默認(rèn)是打開(kāi)的。track_activities允許監(jiān)控當(dāng)前被任意服務(wù)器進(jìn)程執(zhí)行的命令。track_counts控制是否收集關(guān)于表和索引訪(fǎng)問(wèn)的統(tǒng)計(jì)信息。track_io_timing啟用對(duì)塊讀寫(xiě)次數(shù)的監(jiān)控。參數(shù)track_functions啟用對(duì)用戶(hù)定義函數(shù)使用的跟蹤。
打開(kāi)上述4個(gè)參數(shù)之后,還需要配置pg_stat_statements
pg_stat_statements.max是跟蹤語(yǔ)句的最大數(shù)目(即pg_stat_statements視圖中行的最大數(shù)量)。如果語(yǔ)句超過(guò)這個(gè)數(shù)量,最少被執(zhí)行的語(yǔ)句的信息將會(huì)被丟棄。作者說(shuō)此參數(shù)的設(shè)置太低可能會(huì)導(dǎo)致在抽取樣本之前會(huì)清除某些語(yǔ)句的統(tǒng)計(jì)信息。建議設(shè)置大一些。當(dāng)前參數(shù)我們?cè)O(shè)置的50000,足夠使用。
pg_stat_statements.track指定top可以跟蹤頂層語(yǔ)句(直接由客戶(hù)端發(fā)出的語(yǔ)句),指定all還可以跟蹤嵌套的語(yǔ)句(例如在函數(shù)中調(diào)用的語(yǔ)句),指定none則禁用語(yǔ)句統(tǒng)計(jì)信息收集。默認(rèn)值是top。如果你設(shè)置的是all,作者說(shuō)可能會(huì)影響報(bào)告中%Totalfields字段的精確值。
上面參數(shù)修改稍為簡(jiǎn)單,因?yàn)榛旧隙际悄J(rèn)打開(kāi)的。只有少數(shù)沒(méi)開(kāi),打開(kāi)也不需要重啟。
1.下載安裝文件上傳到服務(wù)器。
在服務(wù)器解壓文件,并存放到PG安裝目錄的extension文件夾下
tar xzf pg_profile- |
2.安裝擴(kuò)展
這里有兩種方式安裝,一種是公共模式安裝,這種安裝方式最簡(jiǎn)單。第二種是獨(dú)立Schema安裝,這種安裝將在自己創(chuàng)建的Schema中建自己的表,視圖,序列和函數(shù),可以和其他用戶(hù)有效的進(jìn)行隔離。我選擇了第二種安裝方式。
postgres=# CREATE EXTENSION dblink;
postgres=# CREATE EXTENSIONpg_stat_statements;
postgres=# CREATE SCHEMA profile;
postgres=# CREATE EXTENSION pg_profileSCHEMA profile;
默認(rèn)pg_profile需要使用dblink和pg_stat_statements擴(kuò)展包,這兩個(gè)屬于系統(tǒng)自帶插件,可選插件是pg_stat_kcache
還可以安裝pg_stat_kcache數(shù)據(jù),提供有關(guān)語(yǔ)句CPU使用率和文件系統(tǒng)負(fù)載的信息,因?yàn)槭巧a(chǎn)環(huán)境,我這里沒(méi)有多帶帶編譯安裝這個(gè)插件。
接下來(lái)我們可以執(zhí)行函數(shù)創(chuàng)建快照。
postgres=# SELECT profile.snapshot(); snapshot ------------------------ (local,OK,00:00:01.08) |
執(zhí)行完成之后,可以通過(guò)profile.show_samples()函數(shù),查看生成的快照。
postgres=# select profile.show_samples(); show_samples --------------------------------- (1,"2020-10-15 16:46:37+08",,,) (2,"2020-10-15 16:47:12+08",,,) (3,"2020-10-15 16:47:24+08",,,) (4,"2020-10-15 17:11:43+08",,,) (5,"2020-10-15 17:16:26+08",,,) (6,"2020-10-15 17:32:27+08",,,) (7,"2020-10-15 17:57:29+08",,,) (8,"2020-10-16 10:40:17+08",,,) (9,"2020-10-16 11:00:55+08",,,) (9 rows) |
當(dāng)前總共有9個(gè)快照,執(zhí)行profile.get_report命令,取2個(gè)時(shí)間段就可以生成AWR報(bào)告了。如果要生產(chǎn)對(duì)比報(bào)告,可以執(zhí)行profile.get_diffreport命令。
psql -qtc "select profile.get_report(8,9)" --output awr_report_postgres_8_9.html |
如果要每半個(gè)小時(shí)生成快照,需要把腳本放在contab下執(zhí)行。
*/30 * * * * psql -c SELECT profile.snapshot() > /tmp/pg_awr.log 2>&1 |
報(bào)告輸出如下所示,這里我修改了一下存儲(chǔ)過(guò)程,稍微把標(biāo)題改動(dòng)了一下。大家有興趣也可以自行修改想要的標(biāo)題還有樣式。
報(bào)告總共有6個(gè)部分:
第一部分是服務(wù)器統(tǒng)計(jì)。包含了數(shù)據(jù)庫(kù)在此快照期間的統(tǒng)計(jì)信息,例如事務(wù)數(shù)、內(nèi)存命中率、元組的操作統(tǒng)計(jì)等、數(shù)據(jù)庫(kù)的調(diào)用次數(shù)等、數(shù)據(jù)庫(kù)聚簇的統(tǒng)計(jì)信息,表空間的增長(zhǎng)等等。
第二部分是我們熟悉的TopSQL。包括了執(zhí)行時(shí)長(zhǎng)、執(zhí)行次數(shù)、執(zhí)行消耗I/O、執(zhí)行消耗的邏輯讀等topN的排序,還包含了完整的SQL語(yǔ)句。
第三部分是Schema的對(duì)象信息。包含了Top對(duì)象的信息,類(lèi)似于OracleAWR報(bào)告的segmentstatistics部分,從這里我們可以輕松定位DML最頻繁的表、增長(zhǎng)最快的表等等。
第四部分是用戶(hù)函數(shù)統(tǒng)計(jì)。可以看到我們自建的to_char使用次數(shù)最多。
第五部分是Vacuum相關(guān)統(tǒng)計(jì)
第六部分是報(bào)告快照期間的參數(shù)設(shè)置
pg_profile的介紹就到這里,相對(duì)于Oracle的awr報(bào)告還是有一定的差距的。但是好在開(kāi)源軟件可以自行進(jìn)行增強(qiáng)。當(dāng)前執(zhí)行快照的函數(shù)是take_sample(),當(dāng)執(zhí)行該函數(shù)的時(shí)候,會(huì)采集相關(guān)信息存入我們創(chuàng)建的schema的相關(guān)表中,如下圖所示:
如果要增加新的指標(biāo),只需要?jiǎng)?chuàng)建相關(guān)表,增加與之相關(guān)的insert語(yǔ)句采集就可以了。
而get_report函數(shù),則是生成html報(bào)告的函數(shù),在這里需要把我們新增的一些指標(biāo)給顯示出來(lái)。
參考文檔:
http://postgres.cn/docs/12/monitoring-stats.html
http://postgres.cn/docs/12/pgstatstatements.html
https://github.com/zubkov-andrei/pg_profile
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/130109.html
摘要:最近研究了的兩種集群方案,分別是和,在這里總結(jié)一下二者的機(jī)制結(jié)構(gòu)優(yōu)劣測(cè)試結(jié)果等。其中的前身的,的前身是。為了避免單點(diǎn)故障,可以為所有節(jié)點(diǎn)配置對(duì)應(yīng)的節(jié)點(diǎn)。測(cè)試測(cè)試結(jié)果測(cè)試結(jié)果顯示,兩種集群與單機(jī)的性能指標(biāo)幾乎一致,無(wú)法分辨高下。 最近研究了PG的兩種集群方案,分別是Pgpool-II和Postgres-XL,在這里總結(jié)一下二者的機(jī)制、結(jié)構(gòu)、優(yōu)劣、測(cè)試結(jié)果等。 1、 Pgpool-I...
摘要:接上篇初識(shí)寫(xiě)一下簡(jiǎn)稱(chēng)的部署與測(cè)試。如果執(zhí)行報(bào)錯(cuò)則根據(jù)提示安裝相應(yīng)的庫(kù)即可,如等。默認(rèn)的安裝目錄是,和原生相同,很順手。 接上篇《初識(shí)Postgres-XL》https://segmentfault.com/a/11...寫(xiě)一下Postgres-XL(簡(jiǎn)稱(chēng)PGXL)的部署與測(cè)試。 第一節(jié) 安裝安裝很簡(jiǎn)單,源碼安裝,和PG的安裝基本相同,可能比PG多一個(gè)依賴(lài)庫(kù)。在所有節(jié)點(diǎn)上執(zhí)行相同操作。 ...
摘要:表示用戶(hù)操作花費(fèi)的時(shí)間,包括時(shí)間和等待事件。當(dāng)內(nèi)存中排序空間不足時(shí),使用臨時(shí)表空間進(jìn)行排序,這個(gè)是內(nèi)存排序?qū)偱判虻陌俜直取_^(guò)低說(shuō)明有大量排序在臨時(shí)表空間進(jìn)行。要確保,否則存在嚴(yán)重的性能問(wèn)題,比如綁定等會(huì)影響該參數(shù)。 Oracle中的AWR,全稱(chēng)為Automatic Workload Repository,自動(dòng)負(fù)載信息庫(kù)。它收集關(guān)于特定數(shù)據(jù)庫(kù)的操作統(tǒng)計(jì)信息和其他統(tǒng)計(jì)信息,Oracle以...
閱讀 1493·2023-01-11 13:20
閱讀 1851·2023-01-11 13:20
閱讀 1290·2023-01-11 13:20
閱讀 2041·2023-01-11 13:20
閱讀 4243·2023-01-11 13:20
閱讀 2948·2023-01-11 13:20
閱讀 1581·2023-01-11 13:20
閱讀 3853·2023-01-11 13:20