PostgreSQL/LightDB分割槽表之常見問題
為什麼要分割槽
PostgreSQL的單表最大允許32TB(預設值8KB的情況下),單表太大會引入很多問題(當然這裡是基於預設的情況,:
1、表越大,索引建立的時間越久 (create index concurrently,慢,而且需要2遍以上的掃描,還可能留下invalid的索引)
2、垃圾清理,單表的垃圾回收vacuum (ShareUpdateExclusive鎖,自斥) 目前只支援序列,所以單表越大,垃圾回收的時間越長。筆者遇到很多次幾個TB的單表跑了幾天的autovacuum,還沒有完 - -
3、年齡回收,和單表序列vacuum類似,表越大,掃描的越慢,對於9.6以前的版本更加惡劣 (vm檔案還沒有引入all_frozen的標記位,凍結過的也要掃描)
4、一個邏輯上的大表,可能佔滿檔案系統,使用 分割槽表之後可以將不同的表放置在不同的物理空間上 ,從而達到冷資料放在廉價的物理機器上,熱點資料放置在效能強勁的機器上。
當然還有一些其他的限制,比如(參考原始碼定義,
•識別符號長度:63
•單表上的索引數量:無限制
•單個索引的列個數:32
•單資料庫下物件的數量:1,431,650,303
•函式最多可以用的引數個數:#define INDEX_MAX_KEYS 32
•一個索引可以允許的最多列個數:#define PARTITION_MAX_KEYS 32
•分割槽表允行的分割槽列數:#define NUM_SPINLOCK_SEMAPHORES 128
•元組的列個數:#define MaxHeapAttributeNumber 1600 /* 8 * 200 */
分割槽的好處
1.拆分成一個個子表,那麼就可以實現邏輯意義上的"並行"vacuum,多個vacuum程式可以同時作用於多個子表,包括年齡凍結、死元組回收、建立索引等維護性動作
2.通過分割槽,可以實現類似冷熱分離的效果,對於不常訪問的子表,可以將其放在一般的媒介上面,比如SATA,對於頻繁訪問的熱表,可以放在SSD上
3.批量的載入和刪除可以用刪除或者detach子表實現,還可以避免大量刪除導致的vacuum,源自官網:Bulk loads and deletes can be accomplished by adding or removing partitions, if the usage pattern is accounted for in the partitioning design. Dropping an individual partition using DROP TABLE, or doing ALTER TABLE DETACH PARTITION, is far faster than a bulk operation. These commands also entirely avoid the VACUUM overhead caused by a bulk DELETE.
4.通過分割槽裁剪,可以定位到具體某一個子表,掃描的資料是分割槽前資料的一部分,可以有效提升效能,同時也意味著可以有更高的緩衝命中率
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29990276/viewspace-2905435/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PostgreSQL/LightDB 分割槽表之分割槽裁剪SQL
- postgresql分割槽表SQL
- PostgreSQL常見問題(FAQ)SQL
- PostgreSQL:傳統分割槽表SQL
- PostgreSQL:內建分割槽表SQL
- LightDB Canopy 常見報錯問題分析(一)
- PostgreSQL分割槽表更新思路SQL
- postgresql分割槽表實現方式SQL
- LightDB 22.4 新特性之相容Oracle線上轉換普通表為分割槽表Oracle
- PostgreSQL和oracle表分割槽對比SQLOracle
- PostgreSQL使用表繼承實現分割槽表SQL繼承
- postgresql分割槽表修改資料表欄位SQL
- PostgreSQL10.0內建分割槽表SQL
- PostgreSQL分割槽表、繼承表記錄去重方法SQL繼承
- 關於修改分割槽表的問題總結
- [引用分割槽表]Oracle 11g新特性之引用分割槽表Oracle
- 資料庫分割槽表分割槽未分配導致的一些問題資料庫
- oracle分割槽表和分割槽表exchangeOracle
- postgresql 9.6 分割槽表測試方案與記錄SQL
- PostgreSQL11preview-分割槽表增強彙總SQLView
- 全面學習分割槽表及分割槽索引(13)--分隔表分割槽索引
- oracle分割槽表和非分割槽表exchangeOracle
- Oracle分割槽表及分割槽索引Oracle索引
- INTERVAL分割槽表鎖分割槽操作
- LightDB Canopy 常見報錯問題分析(二)DETAIL: Distributed relations cannot haveAI
- 全面學習分割槽表及分割槽索引(9)--刪除表分割槽索引
- 全面學習分割槽表及分割槽索引(11)--合併表分割槽索引
- 全面學習分割槽表及分割槽索引(12)--修改list表分割槽索引
- 學習筆記】分割槽表和分割槽索引——新增表分割槽(二)筆記索引
- 如何查詢分割槽表的分割槽及子分割槽
- PostgreSQL學習手冊(表的繼承和分割槽)SQL繼承
- PostgreSQL 原始碼解讀(98)- 分割槽表#4(資料查詢路由#1-“擴充套件”分割槽表)SQL原始碼路由套件
- Oracle 12.2之後ALTER TABLE .. MODIFY轉換非分割槽表為分割槽表Oracle
- mysql 5.7.11查詢分割槽表的一個問題MySql
- 分割槽表放入keep pool,recycle pool的問題及解析
- oracle分割槽表線上重定義欄位not null問題OracleNull
- 關於分割槽表中的全partition掃描問題
- 使用split對分割槽表再分割槽