17.2 InnoDB 和 ACID 模型
ACID 模型是一组数据库设计原则,强调业务数据和mission-critical 应用程序的可靠性方面。MySQL 包含了如 InnoDB
存储引擎等组件,它们紧密地遵循 ACID 模型,以确保数据不被损坏和结果不被异常条件(例如软件崩溃和硬件故障)所扭曲。当您依赖于 ACID 兼容的特性时,您不需要重新实现一致性检查和崩溃恢复机制。在某些情况下,您可以根据需要调整 MySQL 设置,以在性能或吞吐量方面进行一些权衡,牺牲一些 ACID 可靠性。
以下部分讨论了 MySQL 特性(特别是 InnoDB
存储引擎)如何与 ACID 模型的各个类别相互作用:
-
A: 原子性。
-
C: 一致性。
-
I: 隔离性。
-
D: 持久性。
ACID 模型的 原子性 主要涉及到 InnoDB
的事务。相关 MySQL 特性包括:
-
设置
autocommit
。 -
COMMIT 语句。
-
ROLLBACK 语句。
ACID 模型的一致性方面主要涉及到内部 InnoDB
处理,以保护数据免受崩溃的影响。相关 MySQL 功能包括:
-
InnoDB
双写缓冲区。见第17.6.4节,“双写缓冲区”。 -
InnoDB
崩溃恢复。见InnoDB 崩溃恢复。
ACID 模型的隔离性方面主要涉及到 InnoDB
事务,特别是每个事务的隔离级别。相关 MySQL 功能包括:
-
autocommit
设置。 -
事务隔离级别和
SET TRANSACTION
语句。见第17.7.2.1节,“事务隔离级别”。 -
InnoDB 锁定的低级别细节。可以在
INFORMATION_SCHEMA
表中查看详细信息(见第17.15.2节,“InnoDB INFORMATION_ SCHEMA Transaction and Locking Information”)和性能chemadata_locks
和data_lock_waits
表。
持久性 是 ACID 模型的一部分,涉及 MySQL 软件特性与您的硬件配置的交互。由于 CPU、网络和存储设备的多种可能性,这一方面最难提供具体指南。(这些指南可能以“购买新硬件”形式出现。)相关的 MySQL 特性包括:
-
InnoDB 双写缓冲区。见第17.6.4节,“Doublewrite Buffer”。
-
sync_binlog
变量。 -
《innodb_文件_per_表》变量。
-
存储设备(如磁盘驱动器、SSD或RAID阵列)的写缓冲区。
-
存储设备中的电池备份缓存。
-
运行 MySQL 的操作系统,特别是对
fsync()
系统调用支持的支持。 -
保护所有计算机服务器和存储设备供电的无中断电源(UPS)。
-
您的备份策略,如备份频率、备份类型和备份保留期限。
-
对于分布式或托管数据应用程序,MySQL 服务器硬件所在数据中心的特定特征,以及数据中心之间的网络连接。