ACID代表原子性、一致性、隔离性和持久性。它是数据库理论中最重要的概念之一,它定义了数据库系统在事务处理中表现的可靠行为。
一、特性:
1.原子性:
对于包含多个语句的事务,数据库必须允许在“全是或全否”的基础上修改数据。每个事务都是原子的。
如果一个语句失败,事务整体就会失败,事务中的所有更改都将被丢弃。这对于在高度事务性环境中操作的系统尤为重要,读者考虑金融场景的资金转移,当向一个账户进行借记,并向另一个账户进行贷记时,涉及多个步骤。
如果在借方操作之后交易失败,没有将钱贷回给原来的账户,那么与该笔交易相关的账户需要进行调整。此时,从借方到贷方的整个交易必须成功,否则任何步骤的交易都必须回滚。
2.一致性:
数据库中只存储有效的数据。如果事务中的一条语句违反了一致性规则,则整个事务将被丢弃,数据将返回到事务开始前的状态。
相反,如果事务成功完成,则它将遵守数据库一致性规则更改数据。
3.隔离性:
同时执行的多个事务不会相互干扰。数据库系统必须处理这样的情况,即事务不能干扰另一个事务中使用的数据(例如,alter、delete等操作的数据)。
有很多方法可以解决这个问题。大多数系统使用锁机制,在第一个事务完成之前,该机制使数据不会被另一个事务使用。尽管隔离性没有规定先执行哪个事务,但它确保事务不会相互干扰。
4.持久性:
事务不会导致数据丢失,事务执行期间创建或更改的任何数据也不会丢失。持久性通常由备份和恢复等维护功能提供。一些数据库系统使用日志记录来确保任何未提交的数据可以在重新启动时恢复。
二、优势:
与MySQL中其他存储引擎相比,InnoDB具有关键的优势,体现在如下几方面:
1.数据操作语言(DML)遵循ACID特性,事务具有提交、回滚及崩溃恢复功能,以保护用户数据。
2.行级锁和Oracle风格的一致性读取,提高了多用户并发性和查询性能。
3.InnoDB表会根据主键优化查询。每个InnoDB表都有一个主键索引,被称为聚簇索引(clusteredindex),通过它组织数据,可以减少主键查找的I/O。
为了维护数据的完整性,InnoDB支持外键约束。在使用外键时,InnoDB会检查插入、更新和删除操作,以确保它们不会在不同表之间产生不一致。
InnoDB在MySQL的每一个版本中都在不断改进,包括大量的性能增强与优化。事实上,从5.6版本发布以来,InnoDB改进的列表已经增长很多,虽然大多数的改进都是细微的,在某种意义上用户不会注意到它们,但是大多数的改进都表明InnoDB致力于使其成为最好的事务性存储引擎,使MySQL成为强大的事务性数据库系统。
三、改进内容:
MySQL8.0对InnoDB进行了大量的改进,主要包括如下内容:
1.改进对表空间的支持,包括对新的数据字典、表空间等功能的强化。
2.配置选项innodb_dedicated_server(默认禁用),用于使InnoDB根据检测到的服务器内存大小自动配置以下选项:
(1)innodb_buffer_pool_size。
(2)innodb_log_file_size。
(3)innodb_flush_method。
3.崩溃恢复,如果索引损坏,则InnoDB会在重做日志中写入一个损坏标志,在强制重启时,该标志不会消失。InnoDB也会在每个检查点上写一个内存损坏标志,当启动崩溃恢复时,InnoDB可以读取标志并使用它们来调整恢复操作。
4.死锁检测,增加了新的选项,包括动态配置死锁检测(innodb_deadlock_detect)。它允许进行额外的调优控制,以降低死锁检测对系统性能的影响。
·INFORMATION_SCHEMA,用于InnoDB的新视图。
AUTO_INCREMENT,自动递增字段改进,包括以下内容。
(1)最大的自增值在服务器重启时保持不变。
(2)不再取消AUTO_INCREMENT=N选项的效果。
(3)器在回滚后立即重启,以避免分配给回滚事务的自增值发生重用。
(4)AUTO_INCREMENT列的值设置为大于当前最大值并保持不变,之后的新值(如重启后的值)将以新的更大的值开始。
5.临时表,所有临时表都默认创建在共享临时表空间ibtmp1中。
上面列出的这些项目只是一些小的改进,其中一些改进对数据库管理员来说很重要,因为他们可以通过这些改进来优化数据库服务器的安装。
InnoDB与早期的MySQL存储引擎最重要的区别在于它的可配置性。虽然早期的一些存储引擎可以进行配置,但没有一个引擎能够达到InnoDB的规模。用户可以使用几十个参数对InnoDB进行优化,能够满足用户独特的存储需求。
注意,在修改InnoDB参数时要小心,系统可能会降级到影响性能的地步。
与任何调优一样,用户首先应该查阅文档,然后针对特定参数进行调优。确保每次只调优一个参数,并在继续调优之前进行测试、确认或恢复。
InnoDB的默认值选择得很好,在大多数情况下不需要太多调优,但那些需要调优的用户也能够找到所需的参数,对InnoDB进行优化,从而让他们的数据库系统保持高效运行。
在MySQL8.0中最受