mysql 5.7 引擎_MySQL 5.7 学习:功能性能的提升

1.9:多线程脏页刷写

innodb_page_cleaners,表示刷写BP脏页的线程数,5.6.2开始从master线程中独立出来,5.7.4之后开始支持多线程flush,默认是4。这个值必须小于等于innodb_buffer_pool_instances,提高CPU的利用率。

1.10:终止会话ctrl+c

在linux下,我们经常使用ctrl+c来终止一个命令的运行,在MySQL 5.7 之前,如果用户输入了错误的SQL语句,按下ctrl+c,虽然能够"结束"SQL语句的运行,但是,也会退出当前会话,MySQL 5.7对这一违反直觉的地方进行了改进,不再退出会话。

1.11:临时表性能的优化

MYSQL5.7为了提高临时表相关的性能,对临时表相关的部分进行了大幅修改,包括引入新的临时表空间(ibtmp1);对于临时表的DDL,不持久化相关表定义;对于临时表的DML,不写redo,关闭change buffer等。

InnoDB临时表元数据不再存储于InnoDB系统表而是存储在INNODB_TEMP_TABLE_INFO,包含所有用户和系统创建的临时表信息。该表在第一次在其上运行select时被创建:

mysql> select * frominformation_schema.innodb_temp_table_info;

Emptyset (0.00sec)

mysql> usedba_test

mysql> create temporary table temp_1(id int,name varchar(100))defaultcharset utf8;

Query OK,0 rows affected (0.00sec)

mysql> select * frominformation_schema.innodb_temp_table_info;+----------+--------------+--------+-------+----------------------+---------------+

| TABLE_ID | NAME | N_COLS | SPACE | PER_TABLE_TABLESPACE | IS_COMPRESSED |

+----------+--------------+--------+-------+----------------------+---------------+

| 42 | #sql1883_8_0 | 5 | 27 | FALSE | FALSE |

+----------+--------------+--------+-------+----------------------+---------------+

1 row in set (0.00 sec)

并且MySQL5.7使用了独立的临时表空间来存储临时表数据,但不能是压缩表。临时表空间在实例启动的时候进行创建,shutdown的时候进行删除。即为所有非压缩的innodb临时表提供一个独立的表空间,默认的临时表空间文件为ibtmp1,位于数据目录。我们可通过innodb_temp_data_file_path参数指定临时表空间的路径和大小,默认12M。只有重启实例才能回收临时表空间文件ibtmp1的大小。create temporary table和using temporary table将共用这个临时表空间。

mysql >show variables like 'innodb_temp_data_file_path';+----------------------------+-----------------------+

| Variable_name | Value |

+----------------------------+-----------------------+

| innodb_temp_data_file_path | ibtmp1:12M:autoextend |

+----------------------------+-----------------------+

物理文件:

# ls -lh ibtmp1-rw-r----- 1 mysql mysql 12M 7月 12 15:13 ibtmp1

mysql> create temporary table temp_1(id int,name varchar(100))default character setutf8;

Query OK,0 rows affected (0.01sec)

mysql> insert into temp_1 select * fromttt;

Query OK,2752512 rows affected (7.10sec)

Records:2752512 Duplicates: 0 Warnings: 0# ls-lh ibtmp1-rw-r----- 1 mysql mysql 204M 7月 12 15:16 ibtmp1 #重启才能回收

在MySQL5.7中,临时表在连接断开或者数据库实例关闭的时候,会进行删除,也就无需redo logs,避免了写relog相关的io,从而提高了性能。只有临时表的metadata使用了redo保护,保护元数据的完整性,以便异常启动后进行清理工作。临时表的元数据5.7之后使用了一个独立的表(innodb_temp_table_info)进行保存,这样就不要使用redo保护,元数据也只保存在内存中。但这有一个前提,必须使用共享的临时表空间,如果使用file-per-table,仍然需要持久化元数据,以便异常恢复清理。临时表需要undo log,用于MySQL运行时的回滚、MVCC等。具体的可以看官方文档和

注意:从5.7.5开始,新增一个系统选项internal_tmp_disk_storage_engine可定义磁盘临时表的引擎类型,默认为InnoDB,可选MyISAM。而在这以前,只能使用MyISAM。而在5.6.3以后新增的参数default_tmp_storage_engine是控制create temporary table创建的临时表的存储引擎,在以前默认是MEMORY。

mysql> show variables like '%engine%';+----------------------------------+--------+

| Variable_name | Value |

+----------------------------------+--------+

| default_storage_engine | InnoDB |

| default_tmp_storage_engine | InnoDB |

| disabled_storage_engines | |

| enforce_storage_engine | |

| internal_tmp_disk_storage_engine | InnoDB |

+----------------------------------+--------+

1.12:离线的InnoDB文件校验工具功能增强,可以查看ibd文件。新增选择项或扩展的功能:

1.支持使用指定校验算法;2.支持只重写校验值而不进行验证;3.可指定允许的校验和不匹配量;4.显示各类页的个数、导出页类型信息、输出至日志、从标准输入读取数据等;5.从5.7.2起可支持校验超过2G的文件;

innochecksum --help。使用时需要停止mysql服务,或则把ibd文件复制出来,否则会报错:

# innochecksum --page-type-summary ibdata1

Error: Unable to lock file:: ibdata1

fcntl: Resource temporarily unavailable

关闭数据库或则复制出ibd文件执行:

# innochecksum --page-type-summary /tmp/ibdata1

File::/tmp/ibdata1================PAGE TYPE SUMMARY==============#PAGE_COUNT PAGE_TYPE===============================================

13 Indexpage #索引页2820 Undo logpage #undo页2Inode page0 Insertbuffer free list page #插入缓存空闲页1928Freshly allocated page #可用页1 Insertbuffer bitmap #插入缓存位图页98System page #系统页1 Transactionsystem page1 File SpaceHeader0Extent descriptor page0BLOB page0Compressed BLOB page0 Other type ofpage===============================================Additional information:

Undo page type:2806 insert, 14 update, 0other

Undo page state:0 active

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值