MySQL 8.0新特性全面认识

一、MySQL 8.0中添加的功能

1、新的系统字典表

整合了存储有关数据库对象信息的事务数据字典,所有的元数据都用InnoDB引擎进行存储

2、支持DDL 原子操作

InnoDB表的DDL支持事务完整性,要么成功要么回滚,将DDL操作回滚日志写入到data dictionary 数据字典表 mysql.innodb_ddl_log 中用于回滚操作

3、安全和用户管理

新增caching_sha2_password认证插件,并且是默认的身份认证插件。性能和安全方面加强

权限支持role

新增密码历史记录功能,限制重复使用以前的密码

4、支持资源管理

支持创建和管理资源组,并允许将服务器运行的线程分配给特定的组,以便线程根据资源组可用的资源执行

5、innodb 增强

自增列优化,修复MySQL的bug#199,该bug导致在DB重启时,MySQL会将表上最大的自增值作为最大值,下次分配是分配max(id)+1,如果是归档表或者其它模式删除数据后,DB系统重启,自增值可能被重用

新增INFORMATION_SCHEMA.INNODB_CACHED_INDEXES,查看每个索引缓存在InnoDB缓冲池中的索引页数

InnoDB临时表都将在共享临时表空间ibtmp1中创建

对于SELECT ... FOR SHARE和SELECT ... FOR UPDATE语句,InnoDB支持NOWAIT和SKIP LOCKED

innodb_undo_tablespaces的最小值为2,并且不再允许将innodb_undo_tablespaces设置为0。 最小值2确保回滚段始终在撤消表空间中创建,而不是在系统表空间中创建

支持 ALTER TABLESPACE ... RENAME TO 语法

新增innodb_dedicated_server,让InnoDB根据服务器上检测到的内存量自动配置innodb_buffer_pool_size,innodb_log_file_size,innodb_flush_method

新增INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF视图

新增了动态配置项 innodb_deadlock_detect,用来禁用死锁检查,因为在高并发系统中,当大量线程等待同一个锁时,死锁检查会大大拖慢数据库

支持使用innodb_directories选项在服务器脱机时将表空间文件移动或恢复到新位置

6、MySQL 8.0更好支持文档型数据库和JSON

7、优化

不可见索引,开始支持invisible index,(感觉又和Oracle一样了),在优化SQL的过程中可以设置索引为不可见,优化器变不会利用不可见索引

支持降序索引,可以对索引定义 DESC,之前,索引可以被反序扫描,但影响性能,而降序索引就可以高效的完成

8、支持RANK(), LAG()、NTILE()等函数

9、正则表达式增强,提供了REGEXP_LIKE(),EGEXP_INSTR(), REGEXP_REPLACE(), REGEXP_SUBSTR()等函数 

10、新增备份锁,允许在线备份期间的DML,同时防止可能导致快照不一致的操作。 备份锁由LOCK INSTANCE FOR BACKUP和UNLOCK INSTANCE语法支持

11、字符集  默认字符集由latin1变为utf8mb4

12、配置文件增强

MySQL 8.0版本支持在线修改全局参数持久化,通过加上PERSIST关键字,可以将调整持久化到新的配置文件中,再次重启db还可以应用到最新的参数。对于加上 PERSIST 关键字修改参数命令,MySQL系统会生成一个包含json格式数据的 mysqld-auto.cnf 文件,比如执行:

set PERSIST  expire_logs_days=10 ; #内存和json文件都修改,重启还生效

set GLOBAL  expire_logs_days=10 ; #只修改内存,重启丢失

系统会在数据目录下生成一个包含如下内容的 mysqld-auto.cnf 的文件:

{ "mysql_server": {"expire_logs_days": "10" } }

当 my.cnf 和 mysqld-auto.cnf 同时存在时,后者具有高优先级。

13、直方图

MySQL 8.0 版本开始支持期待已久直方图。优化器会利用column_statistics的数据,判断字段的值的分布,得到更准确的执行计划。

可以使用 ANALYZE TABLE table_name [UPDATE HISTOGRAM on col_name with N BUCKETS |DROP HISTOGRAM ON  clo_name] 来收集或者删除直方图信息

14、支持会话级别SET_VAR 动态调整部分参数,有利于提升语句性能。

select /*+ SET_VAR(sort_buffer_size = 16M) */ id  from test order id ;

insert  /*+ SET_VAR(foreign_key_checks=OFF) */ into test(name) values(1);

15、默认参数的调整

调整back_log的默认值,保持和 max_connections一致,增强突发流量带来的连接处理容量。

修改 event_scheduler 默认为ON,之前默认是关闭的。

调整max_allowed_packet 的默认值,从4M增加到64M。

调整bin_log,log_slave_updates默认值为on。

调整expire_logs_days的过期时间为30天,老版本是7天,生产环境时,检查该参数,防止binlog过多造成空间紧张。

调整innodb_undo_log_truncate 默认为ON

调整innodb_undo_tablespaces 默认值为2

调整innodb_max_dirty_pages_pct_lwm 默认值10

调整innodb_max_dirty_pages_pct默认值为90

新增innodb_autoinc_lock_mode 默认值为2

16、InnoDB性能提升

废除buffer pool mutex,将原来一个mutex拆分成多个,提高并发

拆分LOCK_thd_list 和 LOCK_thd_remove 这两个mutex,大约可提高线程链接效率5%。

17、行缓存

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/2852a8ef92338a1bbc64080d2d97f262.html