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使用过程当中的简单稳定可靠,且经过堆服务器+分库分表更能有处理数据量爆炸式增加带来的性能问题。大数据

相关文章
相关标签/搜索