MySQL Partition Table--分區表優缺點

分區表歷史數據庫

一、MySQL 5.1版本開始支持基於整數列的分區表,
二、MySQL 5.5版本開始支持RANGE和LIST分區,支持TRUNCATE分區,新增COLUMNS關鍵詞簡化分區定義。
三、MySQL 5.6版本開始支持分區交換,支持顯式分區查詢,支持最大8182個分區或子分區。
四、MySQL 5.7版本引入本地分區策略,並標記棄用通用分區策略。

 

分區策略緩存

按照管理打開分區的行爲能夠將分區策略分爲兩類:
一、通用分區策略(Generic Partitioning), 由MySQL Server層負責控制訪問分區。
二、本地分區策略(Native Partitioning),由存儲引擎層負責控制訪問分區。

在MySQL開始支持分區表時,將分區表訪問控制操做放在MySQL Server層實現,因爲在文件管理/表管理等方面實現較爲粗糙,存在嚴重性能問題。而不一樣存儲引擎層使用不一樣存儲機制/索引結構/訪問控制(鎖),能夠經過特殊設計來提高或優化特定的操做,將分區訪問控制策略放置在存儲引擎中實現更好。


通用分區策略問題:
一、當分區表第一次被訪問時,不管該次訪問須要操做多少個分區,都須要訪問該分區表上全部分區,致使性能問題。當分區表上分區數量較大時,可能會由於打開文件數量超過參數open_file_limit限制而出錯。
二、在對分區表進行維護時,須要同時維護原分區文件和新分區文件,如將分區表由100分區擴展至101分區時,須要2*100+2*101=402個文件描述符。


在MySQL 5.7.9版本中,InnoDB引入本地分區策略,由InnoDB存儲引擎層內部管理訪問分區錶行爲。
在MySQL 5.7.17版本中,MySQL將通用分區策略標記爲棄用
在MySQL 8.0版本,再也不容許MyISAM引擎使用分區表,由於MyISAM引擎不支持本地分區策略。
目前僅有InnoDB和NDB兩種存儲引擎支持本地分區策略。

 

MySQL 5.7分區加強服務器

MySQL 5.7分區加強:
一、MySQL 5.7.1開始支持HANDLER語句(非標準SQL語句,不支持DML操做,經過指定索引來訪問數據,下降優化器解析和優化SQL的開銷,提高查詢性能。)
二、MySQL 5.7.2開始子分區支持ANALYZE/CHECK/OPTIMIZE/REPAIR/TRUNCATE操做
三、MySQL5.7.3支持index condition pushdown(ICP)特性
四、MySQL 5.7.4爲InnoDB表分區支持FLUSH TABLES FOR EXPORT選項
五、支持使用緩存來提高Load data的性能,每一個分區使用130KB緩衝區
六、支持使用CACHE INDEX和LOAD INDEX INTO CACHE語句對分區的MyISAM表支持索引緩存

 

分區表優勢數據結構

在MySQL Server層分區表爲一個表,而在MySQL存儲引擎層分區表是多個表,所以有以下特色:
一、分區表對業務透明,只須要維護一個表的數據結構。
二、DML操做加鎖僅影響操做的分區,不會影響未訪問分區。
三、經過分區交換快速將數據換入和換出分區表。
四、經過TRUNCATE操做快速清理特定分區數據。
五、經過強制分區僅訪問特定分區數據,減小操做影響。
六、經過大數據量分區能有效下降索引層數,提升查詢性能。

 

分區表缺點運維

因爲分區表在MySQL Server層爲一個表,所以:
一、DDL操做須要鎖定全部分區,致使全部分區上操做都被阻塞。
二、當表數據量較小時,分區表和非分區表性能相近,分區表效果有限。
三、當表數據量較大時,對分區表進行DDL或其餘運維操做難度大風險高。
四、分區表使用較少,存在未知風險多,BUG多BUG多BUG多,MySQL社區版本免費,橫向擴展成本低,分庫分表實現簡單且中間件完善。
五、當單臺服務器性能沒法知足時,對分區表進行分拆的成本較高,而分庫分表能很容易實現橫向分拆。
六、當分區表操做不當致使訪問全部分區時,會致使嚴重的性能問題,而分庫分表操做不當僅影響訪問的表。
七、使用分庫分表能夠有效運維下降運維操做影響,對1億數據量表作DDL操做須要謹慎評估,而對10萬數據量表作DDL操做能夠默認其很快完成。
八、使用分庫分表能夠有效減少宕機或其餘故障影響,將數據分庫分表到10套羣集上,一套羣集發生故障僅影響業務的一成。

 

我的看法性能

對於SQL Server和Oracle這些商業數據庫,因爲商業受權致使橫向擴展成本較高,且分區表功能穩定,所以經過硬件擴展和分區來承擔大數據量帶來的負載,而對於MySQL,互聯網企業有資源有能力將不少需求遷移到數據庫外部實現,所以更追求MySQL使用過程當中的簡單穩定可靠,且經過堆服務器+分庫分表更能有處理數據量爆炸式增加帶來的性能問題。大數據

相關文章
相關標籤/搜索