MySQL-8新特性


  • 账户与安全
    • 用户的创建与授权
    • 密码管理
    • 认证插件
    • 角色管理
  • 索引
    • 隐藏索引:被隐藏的索引不会被优化器使用,但依然真实存在
  • 系统方面
    • 原子 ddl 操作:保证了 drop table t1,t2 时两个表的原子性
    • 自增列持久化:将自增计数器的最大值写入 redo log,同时在每次检查点将其写入引擎私有的系统表
    • 重构 SQL 分析器
    • 新的系统字典表:所有的元数据都用 InnoDB 引擎进行存储
    • 支持资源管理:支持创建和管理资源组,并允许将服务器运行的线程分配给特定的组
  • 更好支持文档型数据库和JSON
    • 聚合函数
      • JSON_ARRAYAGG(),将多行数据组合成 json 数组
      • JSON_OBJECTAGG(),用于生成 json 对象
    • JSON 实用函数
      • JSON_PRETTY() 输出 json 数据的时候,格式化
      • JSON_STORAGE_SIZE() json 数据所占用的存储空间(单位:字节)
      • JSON_STORAGE_FREE() json 数据更新后所释放的空间(单位:字节)
    • JSON 合并函数:废弃了 JSON_MERGE() 函数
      • JSON_MERGE_PATCH()
      • JSON_MERGE_PRESERV()
    • JSON 表函数: JSON_TABLE() 将 JSON 数据转换成关系表,可以将该函数的返回结果当做一个普通的临时表进行 sql 查询
    • 支持 RANK(),、LAG()、NTILE() 等函数
      • rank() 按照某字段的排序结果添加排名,但它是跳跃的、间断的排名
        • 例如两个并列第一名后,下一个是第三名,1、1、3、4
  • 正则表达式增强:REGEXP_LIKE()、EGEXP_INSTR()、REGEXP_REPLACE()、REGEXP_SUBSTR()
  • 新增备份锁:允许在线备份期间的 DML,同时防止可能导致快照不一致的操作
    • 备份锁由 LOCK INSTANCE FOR BACKUP 和 UNLOCK INSTANCE 语法支持
  • 默认字符集 :由 latin1 变为 utf8mb4
  • 配置参数
    • 全局参数持久化:支持在线修改全局参数持久化,通过加上 PERSIST 关键字,可以将调整持久化到新的配置文件中,再次重启 db 还可以应用到最新的参数
    • 支持会话级别动态调整部分参数:有利于提升语句性能
      • select /*+ SET_VAR(sort_buffer_size = 16M) */ id from test order id ;
      • insert /*+ SET_VAR(foreign_key_checks=OFF) */ into test(name) values(1);
    • 默认参数的调整
      • 调整 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
  • InnoDB
    • innodb 增强
      • 新增 INFORMATION_SCHEMA.INNODB_CACHED_INDEXES,查看每个索引缓存在InnoDB 缓冲池中的索引页数
      • InnoDB 临时表都将在共享临时表空间 ibtmp1 中创建
      • 对于SELECT … FOR SHARE 和SELECT … FOR UPDATE 语句,InnoDB 支持NOWAIT和SKIP LOCKED
      • innodb_undo_tablespaces 的最小值为 2,并且不再允许将设置为 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 选项在服务器脱机时将表空间文件移动或恢复到新位置
    • InnoDB 性能提升
      • 并发
        • 废除 buffer pool mutex,将原来一个 mutex 拆分成多个,提高并发
        • 拆分 LOCK_thd_list 和 LOCK_thd_remove 这两个 mutex,大约可提高线程链接效率5%
      • 行缓存
        • 优化器可以估算将要读取的行数,因此可以提供给存储引擎一个合适大小的row buffer 来存储需要的数据。大批量的连续数据扫描的性能将受益于更大的 record buffer
      • 改进扫描性能:改进 InnoDB 范围查询的性能,可提升全表查询和范围查询 5-20%的性能
      • 改进成本模型
        • 可以估算缓存区中的有多少表和索引,这可以让优化器选择访问方式时知道数据是否可以存储在内存中还是必须存储到磁盘上
  • 废弃特性
    • 移除了一些功能,例如 query cache

文章作者: 钱不寒
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 钱不寒 !
  目录