分区表

分区表和手工分表,一个是由server层来决定使用哪个分区,一个是由应用层代码来决定使用哪个分表
这两个主要区别是在server层上,从server层上分区表的问题就是打开表的行为
 
分区策略:
每当第一次访问一个分区表的时候,mysql需要把所有的分区都访问一遍,一个典型的报错情况是:如果一个分区表
的分区很多,比如超过了1000个,而mysql启动的时候,open_files_limit参数使用的默认值是1024,那么就会在访问
这个表的时候,由于需要打开所有的问题,导致打开表文件的个数超过了上限而报错
 
myisam分区表使用的分区策略称为通用分区策略,每次访问分区都由server层控制
innodb引擎引入了本地分区策略,这个策略是在innodb内部自己管理打开分区的行为:innodb引擎打开文件
超过innodb_open_file这个值的时候,就会关掉一些之前打开的文件,所以即使分区个数大于
open_files_limit,打开innodb分区表页不会报打开文件过多这个错误,就是innodb_open_file这个参数发挥的
作用
 
小结:
1、mysql在第一次打开分区表的时候,需要访问所有的分区
2、在server层,认为这是同一张表,因此所有分区共用同一个mdl锁
3、在引擎层,认为真是不同的表,因为mdl锁之后的执行过程,会根据分区规则,只访问必要的分区
 
分区表的两个问题,一个是第一次访问的时候需要访问所有的分区,另一个是共用MDL锁,因此,如果要使用
分区表,就不要创建太多的分区
 
分库分表中间件的典型代表了解一下:https://www.aliyun.com/product/drds
 
 
----《极客时间-mysql实战45讲》
 

原文地址:https://www.cnblogs.com/weiluoyan/p/10758554.html