MySQL中innodb新特性有哪些

发布时间:2021-11-06 08:57:03 作者:小新
来源:亿速云 阅读:204

这篇文章主要介绍了MySQL中innodb新特性有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。


4.1 innodb buffer dump 功能增强     
      5.7.5 新增加innodb_buffer_pool_dump_pct参数,来控制每个innodb buffer中转储活跃使用的innodb buffer pages的比例。之前的版本默认值是100%,当触发转储的时候 会全量dump innodb buffer pool中的pages。如果启用新的参数比如40 ,每个innodb buffer pool instance中有100个 ,每次转储每个innodb buffer 实例中的40个pages。
    注意:当innodb发现innodb 后台io资源紧张时,会主动降低该参数设置的比例。

4.2 支持多线程刷脏页  
      MySQL 5.6.2版本中,MySQL将刷脏页的线程从master线程独立出来,5.7.4版本之后,MySQL系统支持多线程刷脏页,进程的数量由innodb_page_cleaners参数控制,该参数不能动态修改,最小值为1 ,最大值支持64,5.7.7以及之前默认值是1 ,5.7.8版本之后修改默认参数为4。当启用多线程刷脏也,系统将刷新innodb buffer instance脏页分配到各个空闲的刷脏页的线程上,如果设置的innodb_page_cleaners>innodb_buffer_pool_instances,系统会自动重置为innodb_buffer_pool_instances大小。

4.3 动态调整 innodb buffer size
    从5.7.5版本, MySQL支持在不重启系统的情况下动态调整innodb_buffer_pool_size。resize的过程是以chunk(每个chunk的大小默认为128M)的为单位迁移pages到新的内存空间,迁移进度可以通过Innodb_buffer_pool_resize_status 查看。记住整个resize的大小是以chunk为单位的。innodb_buffer_pool_chunk_size的大小,计算公式是innodb_buffer_pool_size / innodb_buffer_pool_instances,新调整的值必须是 innodb_buffer_pool_chunk_size*innodb_buffer_pool_instances的整数倍。如果不是整数倍,则系统则会调整值为大于两者乘积的最大值。 
例子

  1. mysql> SHOW STATUS WHERE Variable_name='InnoDB_buffer_pool_resize_status';

  2. +----------------------------------+----------------------------------------------------------------------+

  3. | Variable_name | Value |

  4. +----------------------------------+----------------------------------------------------------------------+

  5. | Innodb_buffer_pool_resize_status | Size did not change (old size = new size = 268435456. Nothing to do. |

  6. +----------------------------------+----------------------------------------------------------------------+

  7. 1 row in set (0.00 sec)

  8. mysql> set global innodb_buffer_pool_size=128*1024*1024;

  9. Query OK, 0 rows affected (0.00 sec)

  10. mysql> SHOW STATUS WHERE Variable_name='InnoDB_buffer_pool_resize_status';

  11. +----------------------------------+----------------------------------------------------+

  12. | Variable_name | Value |

  13. +----------------------------------+----------------------------------------------------+

  14. | Innodb_buffer_pool_resize_status | Completed resizing buffer pool at 160702 23:53:51. |

  15. +----------------------------------+----------------------------------------------------+

  16. 1 row in set (0.00 sec)

  17. mysql> set global innodb_buffer_pool_size=256*1024*1024;

  18. Query OK, 0 rows affected (0.00 sec)

  19. mysql> SHOW STATUS WHERE Variable_name='InnoDB_buffer_pool_resize_status';

  20. +----------------------------------+----------------------------------------------------+

  21. | Variable_name | Value |

  22. +----------------------------------+----------------------------------------------------+

  23. | Innodb_buffer_pool_resize_status | Completed resizing buffer pool at 160702 23:54:19. |

  24. +----------------------------------+----------------------------------------------------+

  25. 1 row in set (0.00 sec)

online调整bp size的log 记录大致过程 
a 计算要调整的bpsize
b 禁止AHI,清理所有的索引缓存
c Withdrawing block是遍历freelist 确定可以使用的空闲block
d 锁住整个buffer pool 
e 迁移重新分配chunk/删除可以释放的chunk 
f 设置innodb_buffer_pool_size为新的值
g 重新开启AHI 

  1. 2016-07-02T15:40:44.724495Z 0 [Note] InnoDB: Resizing buffer pool from 134217728 to 268435456 (unit=134217728).

  2. 2016-07-02T15:40:44.724546Z 2 [Note] InnoDB: Resizing buffer pool from 134217 (new size: 268435456 bytes)

  3. 2016-07-02T15:40:44.724559Z 0 [Note] InnoDB: Disabling adaptive hash index.

  4. 2016-07-02T15:40:44.724979Z 0 [Note] InnoDB: disabled adaptive hash index.

  5. 2016-07-02T15:40:44.725029Z 0 [Note] InnoDB: Withdrawing blocks to be shrunken.

  6. 2016-07-02T15:40:44.725040Z 0 [Note] InnoDB: Latching whole of buffer pool.

  7. 2016-07-02T15:40:44.725210Z 0 [Note] InnoDB: buffer pool 0 : resizing with chunks 1 to 2.

  8. 2016-07-02T15:40:44.735439Z 0 [Note] InnoDB: buffer pool 0 : 1 chunks (8192 blocks) were added.

  9. 2016-07-02T15:40:44.735511Z 0 [Note] InnoDB: Completed to resize buffer pool from 134217728 to 268435456.

  10. 2016-07-02T15:40:44.735561Z 0 [Note] InnoDB: Re-enabled adaptive hash index.

  11. 2016-07-02T15:40:44.735586Z 0 [Note] InnoDB: Completed resizing buffer pool at 160702 23:40:44.

这个特性是最令众多MySQL DBA 期待的特性之一。以后线上动态扩容,缩容就无需做数据库切换了,间接增强了系统的稳定性和DBA的生活幸福感。当然本文中介绍的略显粗略。
4.4 支持全局表空间 
     全局表空间可以被所有的数据库的表共享,而且相比于 file-per-table tablespaces. 使用共享表空间可以节约元数据方面的内存。(需要更深入的了解共享表空间 主要是大小 收缩问题) 

  1. mysql> CREATE TABLESPACE `youzan_com`

  2.     -> ADD DATAFILE 'youzan_com.ibd' FILE_BLOCK_SIZE = 16k;

  3. Query OK, 0 rows affected (0.02 sec)

  4. mysql> use yang

  5. Database changed

  6. mysql> create table yztb(id int primary key not null ,val char(10)) engine=innodb default charset=utf8  TABLESPACE youzan_com ;

  7. Query OK, 0 rows affected (0.04 sec)

  8. mysql> create database youzan default charset utf8;

  9. Query OK, 1 row affected (0.02 sec)

  10. mysql> use youzan

  11. Database changed

  12. mysql>

  13. mysql> create table yztb(id int primary key not null ,val char(10)) engine=innodb default charset=utf8  TABLESPACE youzan_com ;

  14. Query OK, 0 rows affected (0.03 sec)

4.5 行格式默认为DYNAMIC
     从MySQL 5.7.9 开始,行格式DYNAMIC 取代COMPACT 成为innodb存储引擎默认的行格式,MySQL提供了新的参数innodb_default_row_format来控制Innodb 行格式

4.6 支持原生的分区表
      在MySQL 5.7.6之前的版本中,创建分区表时MySQL为每个分区创建一个ha_partition handler,自MySQL 5.7.6之后,MySQL支持原生的分区表并且只会为分区表创建一个partition-aware handler,这样的分区表功能增强节约分区表使用的内存。对于老版本创建的分区表在升级到新的版本之后怎么处理呢?莫慌,5.7.9之后,MySQL提供了如下升级方式解决这个问题:

  1. ALTER TABLE ... UPGRADE PARTITIONING.

当然友情提示:从我个人的理解来看,在没有合适的自动化维护分区表系统的基础上,不推荐使用分区表。四年的工作经历已经数次在分区表上掉坑里了。

4.7 支持truncate undo logs 
     MySQL 5.7.5版本开始支持truncate undo 表空间中的undo log。启用该特性必须设置innodb_undo_log_truncate=[ON|1]。大致原理是系统必须设置至少两个undo 表空间(初始化的时候设置 innodb_undo_tablespaces=2 ) 用于清理undo logs的切换。该特性的好处是 解决了 ibdata 文件一直增大的问题,减轻系统的空间使用。 

感谢你能够认真阅读完这篇文章,希望小编分享的“MySQL中innodb新特性有哪些”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

推荐阅读:
  1. mysql中innoDB锁有什么主要作用
  2. MySQL 8.0新特性中并行查询innodb及并行读取线程是怎样的

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql innodb

上一篇:基础Python练习题有哪些

下一篇:session性能的影响有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》