男儿欲遂平生志,五经勤向窗前读。这篇文章主要讲述MYSQL 8VSMYSQL 5.7 到底ORACLE是怎么想的?相关的知识,希望能为你提供帮助。
mysql 8 发布也是有些日子了,但使用的人数和单位都不多,原因大部分大企业,银行已经开始使用国内的自研的MYSQL 作为主力,同时MYSQL 5.7 在目前使用中并未出现什么重大的缺陷,并且周边的生态都是基于 5.6 5.7 的,所以更换MYSQL 8 是不是吃力不讨好的一件事情,另外网传,并且自己也测试了一些东西,发现MYSQL8 在某些方面尤其是查询的速度来说,并没有快到哪里去,反倒是有可能更慢。
【MYSQL 8VSMYSQL 5.7 到底ORACLE是怎么想的()】
到底MYSQL 8 有什么东西是MYSQL 5.7 没有的,或者说INNODB 在 5.X 版本和 8.X 版本之间的差异点在哪里。(部分信息来自
innodb team report)
下面是一些总结
1 data directory table 将被保护,不能被随意的访问,其意图也是很简单的,以下是原文,从原文中的意思获悉,MYSQL 8 的oracle的开发团队是不大喜欢你去动里面的东西,最好你不知道这里面的东西是最好的,这很ORACLE。
之前是可以访问的,并且如果不能访问还可以设置 debug 参数,在访问,但现在不可以。
并且如果想从MYSQL 5.7 升级到 MYSQL 8 或经历以下几个过程
1 创建新的DD 表在
data directory 表空间
2 升级所有的表到新的表空间
3 升级你的UNDO 表空间
4 创建 SDI 到所有 IDB 文件 (之前有一篇说过SDI)
5 原有的5.7的 INNODB system table 将被删除
(反正看完这些,如果让我升级,我还是老老实实的数据基本的transfer吧)
对了 后面的跟一句,降级没门,并且PPT 里面说他们会控制期间可能的升级的失败的情况。
基于前边的一些东西,INNODB 的开发人员,提出我们还是可以让你看一些东西在MYSQL 8 中的,例如下面的语句
select * from innodb_tablespaces;
同时演讲者也给出一些往好的方面发展,以及之前未解决的一些头痛的问题已经接近了
例如 下面的在之前版本中的执行后不能立即生效的,现在都能立即生效
1 alter table name
2 set default
3 drop default
4 modify column
5 modify column
6 change column
7 change index option
基于之前的版本,中为什么添加字段是一件头痛的事情,主要是INNODB 不能有足够的metadata 存储在物理记录的页中。产生这个问题的主要原因是
1 ROW 格式中存在 redundant 模式
2 ROW 的META data
是存储在redo log 中。
所以MYSQL 8 后
1 metadata 改变只在transactinal 的 DD 中,不在会有重建表,拷贝表的事情,在进行alter table 的时候会添加新的选择 instant 选项并且支持 DYNAMIC COMPACT REDUNDANT 等格式的表。
当然这些也是有限制的,
1 添加列只能在最后 (这点终于和ORACLE 一样了,之前MYSQL 是可以随意添加列在你要的位置)
2 不支持压缩表
3 不支持全文索引
4 不支持临时表
新的临时表将有自己的空间 默认将给临时表的表空间分配 16K*5 的空间,会自动穿件 10个表结尾尾缀为 .ibt 的文件
对于UNDO 表空间也和原来的概念不一样了,你可以创建,调整,删除UNDO 表空间,并且默认UNDO 表空间是生成2个表空间,同时UNDO LOG 将不再会存储 system table space
同时在MYSQL 8 中的 information_schema也是添加了一些VIEW 例如可以查看每个数据页在 innodb buffer pool 中所 Cache 的INDEXC
在INNODB BUFFER POOL SIZE 中也有一些变化,变得更加的智能,例如如果物理内存小于 1G 则会使用默认的innodb 默认值,当物理内存在4G 以内,使用 50%的内存,如果超出使用 75%的内存,也可以说,以后你不会在为 innodb_buffer pool 这个设置费脑筋了,系统会给出他建议的的值并使用。
期间引擎的开发团队还建议,由于MYSQL 支持了TABLESPACE 有一段时间了,多个表空间在MYSQL 5.7 上回有一些问题例如报告找不到ibd文件的情况。在MYSQL 8.0上,可以使用 innodb_directories 来制定所有需要扫描的表空间,防止在启动时找不到ibd文件的情况。
另外还有一个截止目前被吐槽最多的 count 大表慢的问题,也会在MYSQL 8 中解决部分,例如
innodb-parallel-thread-count 参数可以并行扫描,更快的获得数据
除了上边被吐槽的,下面的一幅图也告知使用这MYSQL 8 在另一个性能问题吐槽点的改变。
有一些东西添加,就有一些东西要被清理
以下的一些配置将被清理出my,.cnf
innodb_file_format 你不需要选择文件的格式了
innodb_file_format_check
innodb_file_format_max
innodb_large_prefix
innodb_large_prefix
innodb_stats_sample_pages
innodb_locks_unsafe_for_binlog
innodb_checksums
innodb_support_sx
innodb_undo_logs
当然这些还远远没有完,但今天就到这里。
推荐阅读
- TIDB 学习计划--- 什么是分布式数据库和TIDB 整体架构
- Nginx架构篇LNMP动态网站环境部署
- 使用 KubeKey 搭建 Kubernetes/KubeSphere 环境的"心路(累)历程"
- 如何清空DNS缓存Windows&linux
- mysql多数据库文件导入的脚本
- 为何软件都默认安装在C盘(不知道的快来看看!)
- 如何一键修改软件默认安装路径(简单又省事~)
- 运维小白成长记——第十三周
- rpm&yum你选谁