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
- 2015年Web:追求原有“框架”外的新功能Web框架
- PostgreSQL類似OracleMERGE功能的實現SQLOracle
- 揭秘仿比心app原始碼的開發背後,功能是如何實現的APP原始碼
- 150行實現Promise 90%的功能Promise
- 如何實現在指定的時間後網頁實現跳轉網頁
- 分析下百度是如何實現取消referer關鍵詞顯示的
- javascript如何實現類的功能JavaScript
- 如何實現這樣的功能?
- postgresql使用pgagent來實現job功能SQL
- 臭名昭著的手機驗證碼功能是如何實現的
- productForm是如何實現的ORM
- 短影片軟體開發是如何實現美顏功能的
- 如何實現在指定的時間後關閉視窗
- 百萬級日活 App 的螢幕錄製功能是如何實現的APP
- Golang 的 goroutine 是如何實現的?Golang
- php+redis實現超時取消訂單功能PHPRedis
- JVM是如何實現反射的JVM反射
- 我是如何實現限流的?
- 直播短影片平臺最常用的美顏SDK功能是什麼?功能如何實現?
- 08-棧:如何實現瀏覽器的前進和後退功能?瀏覽器
- python的爬蟲功能如何實現Python爬蟲
- 用150行程式碼實現Vuex 80%的功能行程Vue
- 專案需要實現按鈕懸浮的功能, 實現後的記錄
- dbms_stats.gather_table_stats中 granularity的實驗
- CRM的行程支援是如何實現的?行程
- 如何利用PostgreSQL的延遲複製實現災備SQL
- 如何使用jQuery實現核取方塊的全選和取消jQuery
- SharePoint Server 2016 在原有功能的基礎上增加的內容Server
- ElasticSearch是如何實現分散式的?Elasticsearch分散式
- 【PostgreSQL 】PostgreSQL 15對distinct的優化SQL優化
- 有沒有人真正搞過weblogic portal?如何實現與原有業務系統的整合?Web
- 在java中實現對FORM的列印功能 (轉)JavaORM
- GTM 在每個後端程式(backend process 是PostgreSQL 術語後端SQL
- 指哪打哪的遊戲是如何實現的? 揭祕光槍背後的原理遊戲
- 同步秒殺實現:Redis在秒殺功能的實踐Redis
- 線上教育平臺開發中,課堂測試功能是如何實現的
- 線上教育平臺開發過程中,購物功能是如何實現的?