背景
1、産品的問題點
- PG 每次隻擴充1個block
2、問題點背後涉及的技術原理
- 當寫入或更新資料時, 如果現有的資料檔案無法放下新的tuple, 需要extend 資料檔案, 但是PG隻擴充1個資料塊.
3、這個問題将影響哪些行業以及業務場景
- 高速寫入的業務場景, 例如IOT, 時序, feedlog類.
4、會導緻什麼問題?
- 導緻extend block exclusive鎖競争, 影響寫入性能
5、業務上應該如何避免這個坑
- 編譯時, 選擇更大的block size, 隻能弱化無法避免這個問題.
6、業務上避免這個坑犧牲了什麼, 會引入什麼新的問題
- 管理更加複雜, 而且無法完全避免.
- 由于目前PG的一個執行個體隻能選擇一種block size規格, 如果選擇大的block size, 會導緻某些需要小block size的表可能性能變差并浪費更多shared buffer. (例如偏TP的業務)
7、資料庫未來産品疊代如何修複這個坑
- 希望可以自定義擴充規則, 例如
-
- 表級别可以設定, 每次擴充多少個block, 或者:
- 根據資料表的大小, 階梯性增加每次擴充多少個blocks, 直到封頂max extend blocks