Mysql8.0Mysql5.7Mysql5.6Mysql5.5特性对⽐
Mysql5.5 特性,相对于Mysql5.1
性能提升
默认InnoDB plugin引擎。具有提交、回滚和crash恢复功能、ACID兼容。
⾏级锁(⼀致性的⾮锁定读 MVCC)。
表与索引存储在表空间、表⼤⼩⽆限制。
⽀持dynamic(primary key缓存内存 避免主键查询引起的IO )与compressed(⽀持数据及索引压缩)⾏格式。
InnoDB plugin⽂件格式Barracuda、⽀持表压缩、节约存储、提供内存命中率、truncate table速度更快。
原InnoDB只有⼀个UndoSegment,最多⽀持1023的并发;现在有128个Segments,⽀持128K个并发(同样,解决⾼并发带来的事务回滚)。
Innodb_thread_concurrency默认为0,线程并发数⽆限制,可根据具体应⽤设置最佳值。
Innodb_io_capacity可以动态调整刷新脏页的数量,改善⼤批量更新时刷新脏页跟不上导致的性能下降问题。Default:200,跟硬盘的IOPS有关。
充分利⽤CPU多核处理能⼒innodb_read_io_threads阈值:1-64innodb_write_io_threads 阈值:1-64根据数据库的读写⽐灵活设置,充分发挥多CPU、⾼性能存储设备的性能,不⽀持动态加载 。
⾃适应刷新脏页
热数据存活更久
buffer pool多实例 :innodb_buffer_pool_instances 参数增加innodb_buffer_pool实例个数,⼤⼤降低buffer pool的mutex争抢过热情况。
Linux上实现异步IO
重新⽀持组提交
稳定性提升
⽀持半同步Replication。
增加Relay Log ⾃我修复功能。
Crash recovery。
引⼊红-⿊树做插⼊排序的中间数据结构,时间复杂度⼤⼤降低,减少恢复时间。
Thread Pool 分组排队 限流
Mysql5.6 特性,相⽐5.5
默认参数的改变
Back_log 排队队列
⽀持全⽂索引
⽀持online DDL create,alter,drop
可以在建表时指定表空间位置
create table external (x int unsigned not null primary key)data directory = '/volumes/external1/data';
新增参数innodb_page_size可以设置page⼤⼩
整合了memcached API,可以使⽤API来直接访问innodb表,并⾮SQL(减少SQL解析、查询优化代价)
innodb只读事务,不需要设置TRX_ID字段,
减少内部数据结构开销,减少read view
仅仅⾮只读事务依然需要TRX_ID
innodb改进点
innodb表空间在线迁移(TransportableTablespaces)
undo log可独⽴出系统表空间
redo log最⼤可增长到512G
innodb后台线程独⽴出来
优化器改进
ICP
可以在引擎层直接过滤数据,避免⼆次回表
节省BP空间,提⾼查询性能
BKA
全称Batch Key Access:
SQL通过辅助索引要访问表数据时候,将⼤量的随机访问放⼊缓存,交给MRR接⼝合并为顺序访问。
MRR
全称Multi Range Read:
在BKA算法应⽤之后,通过MRR接⼝合并随机访问为顺序访问,再去检索表数据。
变⼤量随机为顺序访问。在通过辅助索引检索⼤量数据时,性能提升明显
磁头⽆需来回寻道,page只需读取⼀次,且较好利⽤了innodb线性预读功能(每次预读64个连续page)。
统计信息持久化,mysqld重启后不丢失
explain语句⽀持insert,update,delete,replace语句,并且⽀持JSON格式
⼦查询优化提升。
Mysql5.7 特性,相⽐5.5 5.6
安全性
⽤户表 mysql.user 的 plugin字段不允许为空, 默认值是 mysql_native_password,⽽不是 mysql_old_password,不再⽀持旧密码格式;
增加密码过期机制,过期后需要修改密码,否则可能会被禁⽤,或者进⼊沙箱模式;
增加密码过期机制,过期后需要修改密码,否则可能会被禁⽤,或者进⼊沙箱模式;
提供了更为简单SSL安全访问配置,并且默认连接就采⽤SSL的加密⽅式。
灵活性
MySQL数据库从5.7.8版本开始,也提供了对JSON的⽀持。
可以混合存储结构化数据和⾮结构化数据,同时拥有关系型数据库和⾮关系型数据库的优点
之前下过mysql现在重新下载mysql能够提供完整的事务⽀持
generated column是MySQL 5.7引⼊的新特性,所谓generated column,就是数据库中这⼀列由其他列计算⽽得
易⽤性
在MySQL 5.7 之前,如果⽤户输⼊了错误的SQL语句,按下 ctrl+c ,虽然能够”结束”SQL语句的运⾏,但是,也会退出当前会话,MySQL 5.7对这⼀违反直觉的地⽅进⾏了改进,不再退出会话。
MySQL 5.7可以explain⼀个正在运⾏的SQL,这对于DBA分析运⾏时间较长的语句将会⾮常有⽤。
sys schema是MySQL 5.7.7中引⼊的⼀个系统库,包含了⼀系列视图、函数和存储过程, 该项⽬专注于MySQL的易⽤性。
例如:如何查看数据库中的冗余索引;如何获取未使⽤的索引;如何查看使⽤全表扫描的SQL语句。
可⽤性
在线设置 复制的过滤规则 不再需要重启MySQL,只需要停⽌SQLthread,修改完成以后,启动SQLthread。
在线修改buffer pool的⼤⼩。
Online DDL MySQL 5.7⽀持重命名索引和修改varchar的⼤⼩,这两项操作在之前的版本中,都需要重建索引或表。
在线开启GTID ,在之前的版本中,由于不⽀持在线开启GTID,⽤户如果希望将低版本的数据库升级到⽀持GTID的数据库版本,需要先关闭数据库,再以GTID模式启动,所以导致升级起来特别⿇烦。
性能
临时表的性能改进。
临时表只在当前会话中可见
临时表的⽣命周期是当前连接(MySQL宕机或重启,则当前连接结束)
只读事务性能改进。
MySQL 5.7通过 避免为只读事务分配事务ID ,不为只读事务分配回滚段,减少锁竞争等多种⽅式,优化了只读事务的开销,提⾼了数据库的整体性能。
加速连接处理。
在MySQL 5.7之前,变量的初始化操作(THD、VIO)都是在连接接收线程⾥⾯完成的,现在将这些⼯作下发给⼯作线程,以减少连接接收线程的⼯作量,提⾼连接的处理速度。这个优化对那些频繁建⽴短连接的应⽤,将会⾮常有⽤。
复制性能的改进 (⽀持多线程复制(Multi-Threaded Slaves, 简称MTS)
MySQL的默认配置是库级别的并⾏复制,为了充分发挥MySQL 5.7的并⾏复制的功能,我们需要将slave-parallel-type配置成LOGICAL_CLOCK。
⽀持多源复制(Multi-source replication)
严格性改变
默认启⽤ STRICT_TRANS_TABLES 模式。
对 ONLY_FULL_GROUP_BY 模式实现了更复杂的特性⽀持,并且也被默认启⽤。
其他被默认启⽤的sql mode还有 NO_ENGINE_SUBSTITUTION。
默认参数的改变
默认binlog格式调整为ROW格式
默认binlog错误后的操作调整为ABORT_SERVER
在先前的选项下(binlog_error_action=IGNORE_ERROR),如果⼀个错误发⽣,导致⽆法写⼊binlog,mysql-server会在错误⽇志中记录错误并强制关闭binlog功能。这会使mysql-server在不记录binlog的模式下继续运⾏,导致从库⽆法继续获取到主库的binlog。
默认开启mysql崩溃时的binlog安全。
默认调低slave_net_timeout。
安装不同
mysql_install_db已经不再推荐使⽤了,建议改成mysqld --initialize 完成实例初始化。如果 datadir 指向的⽬标⽬录下已经有数据⽂件,则会有[ERROR] Aborting;
在初始化时如果加上 --initial-insecure,则会创建空密码的 root@localhost 账号,否则会创建带密码的 root@localhost 账号,密码直接写在 log-error ⽇志⽂件中;新⽤户登⼊后需要⽴刻修改密码,否则⽆法继续后续的⼯作。
Mysql8.0 特性,相⽐5.7
新的系统字典表
整合了存储有关数据库对象信息的事务数据字典,所有的元数据都⽤InnoDB引擎进⾏存储
安全和⽤户管理
新增caching_sha2_password认证插件,并且是默认的⾝份认证插件。性能和安全⽅⾯加强
权限⽀持role
新增密码历史记录功能,限制重复使⽤以前的密码
innodb 增强
新增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 语法
新增INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF视图
新增了动态配置项 innodb_deadlock_detect,⽤来禁⽤死锁检查,因为在⾼并发系统中,当⼤量线程等待同⼀个锁时,死锁检查会⼤⼤拖慢数据库
⽀持使⽤innodb_directories选项在服务器脱机时将表空间⽂件移动或恢复到新位置
新增innodb_dedicated_server,让InnoDB根据服务器上检测到的内存量⾃动配置
innodb_buffer_pool_size,innodb_log_file_size,innodb_flush_method。当innodb_dedicated_server启⽤时,InnoDB根据服务器上检测到的内存量⾃动配置以下选项:
innodb_dedicated_server:⾃动配置缓冲池⼤⼩
检测到的服务器内存缓冲池⼤⼩
<1G128M(在innodb_buffer_pool_size 默认设)
<= 4G检测到的服务器存储器* 0.5
> 4G检测到的服务器内存* 0.75
innodb_log_file_size:⾃动配置的⽇志⽂件⼤⼩
检测到的服务器
⽇志⽂件的⼤⼩
内存
<1GB48M(在innodb_log_file_size 默认设置)
<= 4GB128M
<= 8GB512M
<= 16GB1024M
> 16GB2048M
innodb_flush_method:O_DIRECT_NO_FSYNC
MySQL 8.0更好⽀持⽂档型数据库和JSON
不可见索引,开始⽀持invisible index,在优化SQL的过程中可以设置索引为不可见,优化器不会利⽤不可见索引
⽀持降序索引,可以对索引定义 DESC,之前,索引可以被反序扫描,但影响性能,⽽降序索引就可以⾼效的完成
⽀持RANK(), LAG()、NTILE()等函数
正则表达式增强,提供了REGEXP_LIKE(),EGEXP_INSTR(), REGEXP_REPLACE(), REGEXP_SUBSTR()等函数
新增备份锁,允许在线备份期间的DML,同时防⽌可能导致快照不⼀致的操作。 备份锁由LOCK INSTANCE FOR BACKUP和UNLOCK INSTANCE语法⽀持
默认字符集由latin1变为utf8mb4
配置⽂件增强
MySQL 8.0版本⽀持在线修改全局参数持久化,通过加上PERSIST关键字,可以将调整持久化到新的配置⽂件中,再次重启db还可以应⽤到最新的参数。对于加上 PERSIST 关键字修改参数命令,MySQL系统会⽣成⼀个包含json格式数据的 mysqld-autof ⽂件,⽐如执⾏:
set PERSIST binlog_expire_logs_seconds = 604800 ; #内存和json⽂件都修改,重启还⽣效
set GLOBAL binlog_expire_logs_seconds = 604800 ; #只修改内存,重启丢失
系统会在数据⽬录下⽣成⼀个包含如下内容的 mysqld-autof 的⽂件:
{ "mysql_server": {" binlog_expire_logs_seconds ": "604800" } }
当 myf 和 mysqld-autof 同时存在时,后者具有⾼优先级。
直⽅图
MySQL 8.0 版本开始⽀持期待已久直⽅图。优化器会利⽤column_statistics的数据,判断字段的值的分布,得到更准确的执⾏计划。
可以使⽤ ANALYZE TABLE table_name [UPDATE HISTOGRAM on col_name with N BUCKETS |DROP HISTOGRAM ON clo_name] 来收集或者删除直⽅图信息
⽀持会话级别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);
InnoDB性能提升
废除buffer pool mutex, 将原来⼀个mutex拆分成多个,提⾼并发拆分LOCK_thd_list 和 LOCK_thd_remove 这两个mutex,⼤约可提⾼线程链接效率5%。
⾏缓存
MySQL8.0的优化器可以估算将要读取的⾏数,因此可以提供给存储引擎⼀个合适⼤⼩的row buffer来存储需要的数据。⼤批量的连
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论