10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 41.6 mb
PDF (A4)- 41.7 mb
手册页(TGZ)- 262.2 kb
手册页(Zip)- 372.3 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

15.8.11配置索引页合并阈值

您可以配置MERGE_THRESHOLD值。如果页面满索引页的百分比低于MERGE_THRESHOLD属性将行缩短或删除一行时的值更新操作,InnoDB尝试将索引页与相邻的索引页合并。默认的MERGE_THRESHOLDValue是50,这是之前硬编码的值。最低MERGE_THRESHOLD取值为1,最大值为50。

页面满索引页的百分比低于50%,这是默认值MERGE_THRESHOLD设置,InnoDB尝试将索引页与相邻页合并。如果两个页面都接近50%满,则页面合并后不久就会发生页面分割。如果这种合并-分离行为频繁发生,则会对性能产生不利影响。要避免频繁的合并-拆分,可以降低MERGE_THRESHOLD值,这样InnoDB尝试在较低位置合并页面页面满百分比。以较低的页满百分比合并页面可以在索引页中留下更多的空间,并有助于减少合并-分割行为。

MERGE_THRESHOLD可以为表或单个索引定义For索引页。一个MERGE_THRESHOLD为单个索引定义的值优先于MERGE_THRESHOLD为表定义的值。如果未定义,则MERGE_THRESHOLD缺省值为50。

设置表的MERGE_THRESHOLD

您可以设置MERGE_THRESHOLD属性为表添加table_option评论的条款创建表声明。例如:

CREATE TABLE t1 (id INT, KEY id_index (id)) COMMENT='MERGE_THRESHOLD=45';

您还可以设置MERGE_THRESHOLD属性为现有表添加table_option评论条款与ALTER TABLE

创建表t1 (id INT, KEY id_index (id));ALTER TABLE t1 COMMENT='合并阈值=40';

为单个索引设置MERGE_THRESHOLD

设置MERGE_THRESHOLD值作为单个索引时,可以使用index_option评论条款与创建表ALTER TABLE,或创建索引,如下例所示:

  • 设置MERGE_THRESHOLD用于单个索引的使用创建表

    CREATE TABLE t1 (id INT, KEY id_index (id) COMMENT 'MERGE_THRESHOLD=40');
  • 设置MERGE_THRESHOLD用于单个索引的使用ALTER TABLE

    创建表t1 (id INT, KEY id_index (id));DROP KEY id_indexADD KEY id_index (id) COMMENT 'MERGE_THRESHOLD=40'
  • 设置MERGE_THRESHOLD用于单个索引的使用创建索引

    创建表t1 (id INT);创建索引id_index在t1 (id)注释'合并阈值=40';
请注意

您不能修改MERGE_THRESHOLD的索引级别上的GEN_CLUST_INDEX所创建的聚集索引InnoDB当一个InnoDB表创建时没有主键或唯一键索引。只能修改MERGE_THRESHOLDGEN_CLUST_INDEX通过设置MERGE_THRESHOLD在桌子上。

查询索引的MERGE_THRESHOLD值

当前的MERGE_THRESHOLD索引的值可以通过查询INNODB_INDEXES表格例如:

mysql> SELECT * FROM INFORMATION_SCHEMAINNODB_INDEXESWHERE NAME='id_index' \G *************************** 1. row *************************** INDEX_ID: 91 NAME: id_index TABLE_ID: 68 TYPE: 0 N_FIELDS: 1 PAGE_NO: 4 SPACE: 57 MERGE_THRESHOLD: 40

你可以使用显示创建表浏览MERGE_THRESHOLD属性显式定义的table_option评论条款:

mysql >显示t2 \ G创建表  *************************** 1。行***************************表:t2创建表:Create表' t2 ' (' id ' int(11) DEFAULT NULL, KEY ' id_index ' (' id ') COMMENT 'MERGE_THRESHOLD=40') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
请注意

一个MERGE_THRESHOLD在索引级别上定义的值优先于MERGE_THRESHOLD为表定义的值。如果未定义,MERGE_THRESHOLD默认为50% (MERGE_THRESHOLD = 50,这是之前硬编码的值。

同样,您可以使用显示指数浏览MERGE_THRESHOLD属性显式定义的索引index_option评论条款:

mysql >显示指数从t2 \ G  *************************** 1。row *************************** Table: t2 Non_unique: 1 Key_name: id_index Seq_in_index: 1 Column_name: id Collation: A Cardinality: 0 Sub_part: NULL Packed: NULL NULL: YES Index_type: BTREE Comment: Index_comment: MERGE_THRESHOLD=40

测量MERGE_THRESHOLD设置的效果

INNODB_METRICS表提供了两个计数器,可用于衡量的影响MERGE_THRESHOLD索引页上的设置合并。

从INFORMATION_SCHEMA中选择名称和注释。INNODB_METRICSWHERE NAME like '%index_page_merge%'; +-----------------------------+----------------------------------------+ | NAME | COMMENT | +-----------------------------+----------------------------------------+ | index_page_merge_attempts | Number of index page merge attempts | | index_page_merge_successful | Number of successful index page merges | +-----------------------------+----------------------------------------+

当降低MERGE_THRESHOLD价值,目标是:

  • 较少的页面合并尝试和成功的页面合并

  • 页面合并尝试次数和成功的页面合并次数相同

一个MERGE_THRESHOLD设置过小可能会导致大量的空页面空间导致数据文件过大。

有关使用INNODB_METRICS计数器,看章节15.15.6“InnoDB INFORMATION_SCHEMA度量表”