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:內建分割槽表SQL
- LightDB Canopy 常見報錯問題分析(一)
- PostgreSQL分割槽表更新思路SQL
- LightDB 22.4 新特性之相容Oracle線上轉換普通表為分割槽表Oracle
- PostgreSQL使用表繼承實現分割槽表SQL繼承
- interval 分割槽表clob預設表空間指定問題
- oracle分割槽表和分割槽表exchangeOracle
- PostgreSQL分割槽表、繼承表記錄去重方法SQL繼承
- 分割槽表之自動增加分割槽(11G)
- oracle分割槽表和非分割槽表exchangeOracle
- LightDB Canopy 常見報錯問題分析(二)DETAIL: Distributed relations cannot haveAI
- mysql 5.7.11查詢分割槽表的一個問題MySql
- PostgreSQL11preview-分割槽表增強彙總SQLView
- postgresql 9.6 分割槽表測試方案與記錄SQL
- Oracle 12.2之後ALTER TABLE .. MODIFY轉換非分割槽表為分割槽表Oracle
- PostgreSQL 原始碼解讀(98)- 分割槽表#4(資料查詢路由#1-“擴充套件”分割槽表)SQL原始碼路由套件
- PG的非分割槽表線上轉分割槽表
- NSIS 之 NsDialogs 常見問題解答
- Windows伺服器如何磁碟分割槽,Windows伺服器磁碟分割槽常見的三種Windows伺服器
- 【MYSQL】 分割槽表MySql
- 非分割槽錶轉換成分割槽表
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- 移動分割槽表和分割槽索引的表空間索引
- 常見問題
- PostgreSQL 原始碼解讀(96)- 分割槽表#3(資料插入路由#3-獲取分割槽鍵值)SQL原始碼路由
- Oracle分割槽表基礎運維-04列表分割槽Oracle運維
- LightDB/PostgreSQL 設定LightDB訪問白名單pg_hba.confSQL
- hive Sql的動態分割槽問題HiveSQL
- LightDB/postgresql內建特性之訪問oracle之oracle_fdw介紹SQLOracle
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- MySQL 分割槽表探索MySql
- 分割槽表-實戰
- hive學習筆記之四:分割槽表Hive筆記
- zabbix5.0之postgresql表分割槽操作詳情(儲存過程、定時任務)SQL儲存過程