MYSQL 8VSMYSQL 5.7 到底ORACLE是怎么想的()

男儿欲遂平生志,五经勤向窗前读。这篇文章主要讲述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




当然这些还远远没有完,但今天就到这里。






    推荐阅读