mysql8 可以说是一个质的飞越。增加了很多新特性,以及提高了各方面的速度。增加了开窗函数
Ⅱ InnoDB增强
自增列方面
自增列方面。现在自增列计数器会在每次值修改时,将值写到REDO LOG中,并且在CHECKPOINT时写到存储引擎私有的系统表中。
这就消除了以往重启实例自增列不连续的问题(这也可能形成了一个新的竞争点(盖国强会上提问InnoDB开发者))。
Btree索引方面
Btree索引被损坏。InnoDB会向REDO LOG中写入一个损坏标志。同时也会CHECKPOINT时将内存中损坏页的数据记录到存储引擎私有的系统表中。
这也就促成了恢复时。两边一致的情形。索引不可用,并不会造成实例起不来。这很大程度上降低了之前使用innodb_force_recovery和innodb_fast_shutdown的必要。
提升了一致性。(对于一般DBA来说透明,知道有这么回事就好)
NoSQl *** 作
InnoDB memcached插件支持多个get *** 作(在单个memcached查询中获取多个键/值对)
和范围查询。(个人认为这个挺牛逼,有点像NoSQL,不仅仅是NoSQL)。
需要安装daemon_memcached插件,其中多了一个innodb_memcache schema,这个schema中有几张表,其中一张containers用来与InnoDB表之间做映射,,
然后通过接口访问Innodb表。然后会有一个11211的端口打开,用于建立连接。
好处是通过减少客户端和服务器之间的通信流量,在单个memcached查询中获取多个键/值对的功能可以提高读取性能。
对于InnoDB来说,也意味着更少的事务和开放式表 *** 作。
死锁检测
新的动态配置选项innodb_deadlock_detect可用于禁用死锁检测,默认打开。 在高并发系统上,当大量线程等待相同的锁时,死锁检测会导致速度下降。 有时,在死锁发生时,
禁用死锁检测并依赖innodb_lock_wait_timeout设置进行事务回滚可能更有效。记得之前版本遇到死锁会自动回滚。以下截图来自MySQL5.7,与8.0默认相同。
(也就是说即便MySQL5.7也是有死锁检测的,并且自动回滚权重较小的事务(套死除外))。
尝试更改innodb_deadlock_detect参数为OFF。则遇到死锁时两个工作线程都会被堵塞。直到innodb_lock_wait_timeout设定的锁超时。
新的INFORMATION_SCHEMA.INNODB_CACHED_INDEXES表保存了Innodb索引缓存在Innodb buffer pool中的页数。
现在,所有InnoDB临时表都将在共享临时表空间ibtmp1中创建。
加密特性
支持REDO和UNDO表空间加密。
共享锁方面
InnoDB在 SELECT ... FOR SHARE 和 SELECT ... FOR UPDATE锁定读语句上 支持不等待( NOWAIT)和跳过锁(SKIP LOCKED)的选项。也就是说以往加了共享锁之后必须手动释放。
这里如果没有锁就返回结果,如果有就报下面错误。
如果是用有锁就跳过,则无数据。
根据场景使用。反正都是秒回。降低了排查数据库超时的可能。
MySQL和Oracle都是流行的数据库管理系统,在世界各地广泛使用;大多数数据库以类似的方式工作,但也有一些差异。1、类型和成本的区别
oracle数据库是一个对象关系数据库管理系统(ORDBMS),一个重量型数据库。它通常被称为Oracle RDBMS或简称为Oracle,是一个收费的数据库。
MySQL是一个开源的关系数据库管理系统(RDBMS),一个是轻量型数据库。它是世界上使用最多的RDBMS,作为服务器运行,提供对多个数据库的多用户访问。它是一个开源、免费的数据库。
2、存储上的区别
与Oracle相比,MySQL没有表空间,角色管理,快照,同义词和包以及自动存储管理。
3、安全性上的区别
MySQL使用三个参数来验证用户,即用户名,密码和位置;Oracle使用了许多安全功能,如用户名,密码,配置文件,本地身份验证,外部身份验证,高级安全增强功能等。
4、对事务的支持
MySQL在innodb存储引擎的行级锁的情况下才可支持事务,而Oracle则完全支持事务
5、性能诊断上的区别
MySQL的诊断调优方法较少,主要有慢查询日志。
Oracle有各种成熟的性能诊断调优工具,能实现很多自动分析、诊断功能。比如awr、addm、sqltrace、tkproof等
6、管理工具上的区别
MySQL管理工具较少,在linux下的管理工具的安装有时要安装额外的包(phpmyadmin, etc),有一定复杂性。
Oracle有多种成熟的命令行、图形界面、web管理工具,还有很多第三方的管理工具,管理极其方便高效。
7、并发性上的区别
MySQL以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表中的数据。虽然InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么仍然使用表级锁。
Oracle使用行级锁,对资源锁定的粒度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不依赖与索引。所以Oracle对并发性的支持要好很多。
8、 保存数据的持久性
MySQL是在数据库更新或者重启,则会丢失数据,Oracle把提交的sql *** 作线写入了在线联机日志文件中,保持到了磁盘上,可以随时恢复。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)