跨时代的MySQL8.0新特性解读( 二 )

select * from tx where year(date_)=2020;默认字符集为utf8mb4

  • 更好的存储补充字符 , 如emojis表情符号
  • 可变长度编码字符性能提升
一致性查询改进(Better Handling of Hot Rows)
  • SKIP LOCKED
需要加锁的记录若被其它线程占有锁 , 则跳过 , 而不是等待
select * from tx where c1=12 for update skip locked;Empty set (0.00 sec)
  • NOWAIT
需要加锁的记录有锁则报错
select * from tx where c1=12 for update nowait;ERROR 3572 (HY000): Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set.SKIP LOCKED和NOWAIT对热行(Hot Rows)场景如抢红包、秒杀等有益
资源组(Resource Groups)
  • 线程赋给不同的资源组
  • 资源组和不同的内存、IO、CPU(现仅支持)进行关联

跨时代的MySQL8.0新特性解读文章插图
官方版多租户资源隔离成为了可能 , 更好提升在不同读写业务场景下的性能
新的数据字典
  • 基于innodb的库表元数据信息
  • 增强了MySQL crash-safe能力
  • 原子DDL( Atomic DDLs )

跨时代的MySQL8.0新特性解读文章插图
以前版本MySQL数据字典存放在多个地方 , 一机器多实例时存在大量文件描述符性能消耗 , 8.0版本都存放在事务性InnoDB表 , MySQL异常挂掉后也不会再出现表损坏情况;DDL操作失败也不会再留下占空间的“临时文件”
MGR增强
  • 金融级别99.999%官方高可用方案
  • MGR是业务多活(应用多活+数据库多活)的终极方案
  • 多个MySQL组成一个group , 数据写group
  • 线上10套多主8.0 MGR集群
节点自动加入group次数 #sysvar_group_replication_autorejoin_tries
group剔除异常节点等待时间#sysvar_group_replication_member_expel_timeout
节点自行脱离group等待时间#sysvar_group_replication_unreachable_majority_timeout
跨时代的MySQL8.0新特性解读文章插图
线上8.0.18 MGR已稳定运行大半年 , MGR的增强大大提升了在网络异常(机房级故障)下的健壮、稳定性;之前多次的机房故障演练8.0 MGR也都符合预期 , 网络恢复后MGR节点自动加入group 恢复读写
安全增强SQL RolesSQL角色Atomic ACL Statements原子ACL语句Dynamic Privileges动态特权Protection Against Brute Force Attacks防止暴力攻击REDO Query OK, 0 rows affected (0.00 sec)mysql> mysql> set persist innodb_buffer_pool_size=268435456*2;Query OK, 0 rows affected (0.00 sec)其它特性
  • 优化器直方图
  • 自增主键持久化
  • 移除Query Cache
  • GIS增强
  • 备份锁
  • group by 不再隐式排序
  • redo_log优化、多线程并发写log buffer
MySQL5.7升级8.0
跨时代的MySQL8.0新特性解读文章插图
线上8.0.18 MGR大多是从5.7.22 MySQL原地升级;依次升级从库 , online switch老主库至新从库(30s内完成) , 再升级老主库
展望未来
跨时代的MySQL8.0新特性解读文章插图
每个产品、版本都有一定生命周期 , 数据库也不例外 , MySQL5.6 甲骨文官方支持到明年;也不是为了用新版本而“新版本” , 主要是为了提升性能 , 享受开源带来的红利 , 更好地支持业务