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的支持。

可以混合存储结构化数据和非结构化数据,同时拥有关系型数据库和非关系型数据库的优点

能够提供完整的事务支持

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:自动配置缓冲池大小
检测到的服务器内存

缓冲池大小

<1G

128M(在innodb_buffer_pool_size 默认设)

<= 4G

检测到的服务器存储器* 0.5

> 4G

检测到的服务器内存* 0.75

innodb_log_file_size:自动配置的日志文件大小
检测到的服务器内存

日志文件的大小

<1GB

48M(在innodb_log_file_size 默认设置)

<= 4GB

128M

<= 8GB

512M

<= 16GB

1024M

> 16GB

2048M

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-auto.cnf 文件,比如执行:
set PERSIST  binlog_expire_logs_seconds = 604800 ; #内存和json文件都修改,重启还生效
set GLOBAL  binlog_expire_logs_seconds = 604800 ; #只修改内存,重启丢失
系统会在数据目录下生成一个包含如下内容的 mysqld-auto.cnf 的文件:
{ "mysql_server": {" binlog_expire_logs_seconds ": "604800" } }
当 my.cnf 和 mysqld-auto.cnf 同时存在时,后者具有高优先级。
直方图

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来存储需要的数据。大批量的连续数据扫描的性能将受益于更大的record buffer。
改进扫描性能

改进InnoDB范围查询的性能,可提升全表查询和范围查询 5-20%的性能。
成本模型

InnoDB缓冲区可以估算缓存区中的有多少表和索引,这可以让优化器选择访问方式时知道数据是否可以存储在内存中还是必须存储到磁盘上。
 
--------------------- 
原文:https://blog.csdn.net/liang_0609/article/details/77334959 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring IOC实现原理

2019独角兽企业重金招聘Python工程师标准>>> 1、BeanDefinition 对依赖翻转模式中管理对象依赖关系的数据抽象 实现依赖翻转功能的核心数据结构依赖翻转功能都是围绕对BeanDefinition 处理完成的有了这些BeanDefinition 基础数据结构&#xff0c;容器才能发挥作用2、…

linux3.0 nand分区,OK6410(256MRAM2Gnandflash) Linux3.0.1内核移植

这里我主要移植的是增加yaffs2文件系统支持&#xff0c;修改和移植nand驱动。1.不知道为什么我这yaffs2的补丁打上了就没发现过编译错误&#xff0c;相当顺利啊 呵呵。附上补丁地址-----------------------------------点击打开链接修改补丁里patch‐ker.sh 文件。屏蔽下面这段…

authentication plugin caching_sha2

新电脑安装最新版本的Mysql&#xff0c;用Navicat Premium连接&#xff0c;提示&#xff1a;authentication plugin caching_sha2 因为mysql8.0开始更新了验证方式&#xff0c;Navicat Premium版本连接新MySQL的时候&#xff0c;还是上一个版本的认证方式。 不仅Navicat Prem…

openlayers入门开发系列之图层控制

本篇的重点内容是利用openlayers实现地图图层控制功能&#xff0c;效果图如下&#xff1a; 部分核心代码如下&#xff1a;页面引用ztree插件图层管理器界面布局图层管理器初始化jsLayerSwitcher类定义详细的实现过程见&#xff1a;这里

linux df命令无反馈,Linux-df命令

df命令&#xff1a;说明&#xff1a;df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间&#xff0c;目前还剩下多少空间等信息参数&#xff1a;-a或--all&#xff1a;包含全部的文件系统&#xff1b;--block-size&…

windows版本的redis

redis官网是不提供windows版本的。 微软的github上有windows版本下载&#xff0c;不会是redis的最新版本&#xff0c;是基于redis稳定版本制作的。 redis官网关于文档版本的说明&#xff1a; Redis uses a standard practice for its versioning: major.minor.patchlevel. A…

一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate

一点一点看JDK源码&#xff08;五&#xff09;java.util.ArrayList 后篇之removeIf与Predicate liuyuhang原创&#xff0c;未经允许禁止转载 本文举例使用的是JDK8的API 目录&#xff1a;一点一点看JDK源码&#xff08;〇&#xff09; Predicate为jdk1.8新增接口&#xff0c;由…

linux选择运行的核数量,linux – 如何根据可用内核的数量选择最大负载阈值?

负载在Linux上经常被误解.在Linux上,它是运行或不间断睡眠状态中所有任务的度量.请注意,这是任务,而不是进程.线程包含在此值中.内核每五秒计算一次加载,并且是一个加权平均值.这是微小负载是平均5/60,五分钟5/300和十五分之五.一般来说,作为一个纯数字的负载在没有参考点的情况…

使用nginx代理,怎么获取真实的IP

1.在nginx.conf配置中加入配置信息 proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-NginX-Proxy true; 2.然后…

英语发音规则---S字母

英语发音规则---S字母 一、总结 一句话总结&#xff1a; 1、S 在音节开头或清辅音前 /s/&#xff1f; sit /sɪt/ vt.& vi.坐seat /si:t/ n.席位sell /sel/ vt.& vi.卖&#xff0c;售sold /səʊld/ v.卖&#xff0c;售sleep /sli:p/ vi.睡slow /sləʊ/ adj.慢的skate…

Mysql windows 安装提示MSVCR120.dll文件丢失

电脑上已经按照了vc运行库&#xff0c;但是报错。 原因&#xff1a;文件被恶意程序破坏了 解决方法&#xff1a;到微软官网下载 VC redist packages for x64。点击跳转 vcredist_x64.exe 如果是32位&#xff0c;则选vcredist_x32.exe 安装完后会提示重启电脑&#xff0c;不…

catcti监控linux主机,CentOS7搭建Prometheus 监控Linux主机

简介prometheus可以拆分成多个节点进行指标收集。安装prometheuswget -c https://github.com/prometheus/prometheus/releases/download/v2.23.0/prometheus-2.23.0.linux-amd64.tar.gztar zxvf prometheus-2.23.0.linux-amd64.tar.gz -C /opt/cd /opt/ln -s prometheus-2.23.…

自己动手实现一个html2canvas

前言 昨天写了新手引导动画的4种实现方式, 里面用到了 html2canvas 于是就顺便了解了一下实现思路. 大概就是 利用 svg 的 foreignObject 标签, 嵌入 dom, 最后再利用 canvas 绘制 svg. 从而实现最终目的. 先让大家看看效果 MDN示例 var canvas document.getElementById(canva…

Git fetch pull 详解

1、简单概括 先用一张图来理一下git fetch和git pull的概念&#xff1a; 可以简单的概括为&#xff1a; git fetch是将远程主机的最新内容拉到本地&#xff0c;用户在检查了以后决定是否合并到工作本机分支中。 而git pull 则是将远程主机的最新内容拉下来后直接合并&#x…

linux 安装redis2.8.3,Linux及Windows安装Redis(详细)

标签&#xff1a;Linux及Windows安装Redis1.Windows安装教程1.1下载https://github.com/MSOpenTech/redis/releases进入github里下载redis Windows版压缩包将我们下载好的文件放进新建的一个Redis文件夹(我在C盘创建了一个redis的文件夹)1.2启动服务打开我们Windows版的dos命令…

Git 少用 Pull 多用 Fetch 和 Merge

转自&#xff1a;http://www.oschina.net/translate/git-fetch-and-merge --------------------------------------------------------------------------------- 本文有点长而且有点乱&#xff0c;但就像Mark Twain Blaise Pascal的笑话里说的那样&#xff1a;我没有时间让…

IDEA生成可运行jar包

方式1: maven打包 maven 包中添加如下配置 <build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><appendAssemblyId>false</appendAssemblyId><descriptorRefs><descriptorRef&…

linux packet socket,linux Packet socket (1)简单介绍

本文主要来自于linux自带的man packet手冊&#xff1a;http://man7.org/linux/man-pages/man7/packet.7.html平时常常使用的INET套接字提供的是7层的抓包能力&#xff0c;抓上来的data直接就是tcp或者udp的payload&#xff0c;无需关心L3和L4的头部信息。Packet套接字提供的是L…

TortoiseGit 修改密码

当TortoiseGi默认设置了凭证助手为“管理器-所有windows用户”&#xff0c;每次向远程git推送时&#xff0c;都会去windows的凭证管理器里读取值&#xff0c;然后推送。 如果密码修改了&#xff0c;或者密码不小心输入错了&#xff0c;每次提交都会报错&#xff1a;HTTP Basic:…

linux系统常见操作,Linux系统基本操作

我们可以认为Linux是一套自由使用的类Unix操作系统&#xff0c;与Windows相比较而言&#xff0c;Linux具有安全、开源、稳定等特点。下面我来介绍Linux中一些的登录登出基本操作。1. 启动系统通常LILO是安装在MBR上的&#xff0c;计算机启动后&#xff0c;MBR上的程序被执行&am…