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