PostgreSQL 15 stats collector 在取消後是如何實現的原有功能的
在POSTGRESQL 15 有一個重要的功能去掉了stats collector 在說為什麼去掉這個stats collector 的問題前,我們先得弄清出stats collector 到底是一個什麼功能。
首先stats collector 並不是有些同學理解的對於表的 analyze,實際上這個功能統計了表和索引的訪問情況,同時也跟蹤每個表的行數以及表進行vacuum 和analyze的活動記錄,另外在自己的程式中,還可以檢視其他程式正在操作的情況,也是透過 stats collector來進行的。
統計資訊的收集也有引數可以進行調整,如 track_counts, track_function, track_activities 等都可以開啟會關閉,減少或增加統計資訊收集的內容,增加或減少系統的負擔。
那麼與收集資訊有關的部分儲存在(部分VIEW 並不全)
透過下面的語句可以檢視當前正在工作的
SELECT pg_stat_get_backend_pid(s.backendid) AS procpid,
pg_stat_get_backend_activity(s.backendid) AS current_queryFROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;
那麼說了這麼多,在PG15 中為什麼要替換了這個功能,那麼必然是有問題
才進行替換。
其中潛在的因素是
1 基於PG15 之前的需要收集的資訊來自於每個backend 程式,而針對每
個程式的資訊的收集不是一個容易完美實現的事情,
2 每個程式需要將資訊傳送給 stats collector 程式,傳送的方式是通
過UDP的方式進行,但基於UDP的方式的路徑並不是一個可靠的模式
其中會包含一些問題,如state statistics , stats collector 工作的情況,
autovacuum 工作捕捉的問題。
3 效能的消耗也是一個傳統使用 stat statistics 的問題,如
我們可以從下圖PG14中檢視到,
DEBUG: writing stats file "pg_stat_tmp/global.stat"
DEBUG: writing stats file "pg_stat_tmp/db_0.stat"
DEBUG: autovacuum: processing database "postgres"
DEBUG: received inquiry for database 13881
DEBUG: writing stats file "pg_stat_tmp/global.stat"
DEBUG: writing stats file "pg_stat_tmp/db_13881.stat"
DEBUG: writing stats file "pg_stat_tmp/db_0.stat"
相關的儲存空間,來儲存相關的資料的目錄 (介於PG14)
基於這些問題,PG15 做出了絕大的改造,將原有在檔案系統或者檔案中
實現的state statistics 實現的方式轉移到了 dynamic shared memory 中。
以前,統計資料收集器透過UDP接收統計資料更新,並透過定期將統計數
據寫入臨時檔案來共享統計資料。這些檔案可以達到幾十兆位元組,每秒
寫入兩次。
現在統計資訊儲存在共享記憶體中。變數編號物件的統計資訊儲存在dshash
雜湊表中(由動態共享記憶體支援)。固定編號的統計資料儲存在普通共享內
存中。
* Each statistics kind is handled in a dedicated file:
但是在系統運作的過程中,難免會有系統異常,導致的系統崩潰,而在這樣的情況下,統計資訊在記憶體中並不能安全的全部重新整理到我們的磁碟系統中,所以如果遇到系統的崩潰則記憶體中的統計資訊會被拋棄掉。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024924/viewspace-2937151/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PostgreSQL 15: stats collector程式最佳化掉了SQL
- PostgreSQL類似OracleMERGE功能的實現SQLOracle
- 揭秘仿比心app原始碼的開發背後,功能是如何實現的APP原始碼
- SharePoint Server 2016 在原有功能的基礎上增加的內容Server
- postgresql使用pgagent來實現job功能SQL
- 臭名昭著的手機驗證碼功能是如何實現的
- 【PostgreSQL 】PostgreSQL 15對distinct的優化SQL優化
- 短影片軟體開發是如何實現美顏功能的
- 百萬級日活 App 的螢幕錄製功能是如何實現的APP
- python的爬蟲功能如何實現Python爬蟲
- php+redis實現超時取消訂單功能PHPRedis
- Golang 的 goroutine 是如何實現的?Golang
- PostgreSQL-15的 \watch命令SQL
- 專案需要實現按鈕懸浮的功能, 實現後的記錄
- JVM是如何實現反射的JVM反射
- 我是如何實現限流的?
- 08-棧:如何實現瀏覽器的前進和後退功能?瀏覽器
- 直播短影片平臺最常用的美顏SDK功能是什麼?功能如何實現?
- [20220927]如何實現sqlcl的repeat功能.txtSQL
- CRM的行程支援是如何實現的?行程
- 如何利用PostgreSQL的延遲複製實現災備SQL
- git commit後如何取消commitGitMIT
- 同步秒殺實現:Redis在秒殺功能的實踐Redis
- ElasticSearch是如何實現分散式的?Elasticsearch分散式
- Python爬蟲是如何實現的?Python爬蟲
- 實現後臺管理系統的操作日誌功能
- 15 | 二分查詢(上):如何用最省記憶體的方式實現快速查詢功能?記憶體
- Skyscanner:33%的消費者將在限制取消後旅行
- MySQL 是如何實現資料的排序的?MySql排序
- GTM 在每個後端程式(backend process 是PostgreSQL 術語後端SQL
- 指哪打哪的遊戲是如何實現的? 揭祕光槍背後的原理遊戲
- 後臺商品管理功能實現
- 如何利用~ & ^ | + 及移位運算子來實現 ! 的功能
- 如何實現簡單的分散式鏈路功能?分散式
- python是如何實現生成器的Python
- Es6 Class是如何實現的?
- Flutter 系統是如何實現ExpansionPanelList的Flutter
- MySQL是如何實現事務的ACIDMySql