InnoDB 与 ACID 模型
跳到导航
跳到搜索
ACID 模型是一组数据库设计原则,强调对于商业数据和关键任务应用程序而言非常重要的可靠性方面。MySQL 包含诸如 InnoDB 存储引擎等组件,它们严格遵循 ACID 模型,这样数据不会被损坏,结果不会因软件崩溃和硬件故障等异常情况而扭曲。当您依赖于符合 ACID 的功能时,您无需重新发明一致性检查和崩溃恢复机制。在您拥有额外的软件保护措施、超可靠硬件或可以容忍少量数据丢失或不一致的应用程序的情况下,您可以调整 MySQL 设置,以牺牲一些 ACID 可靠性来换取更高的性能或吞吐量。
以下各节将讨论 MySQL 的特性,尤其是 InnoDB 存储引擎,如何与 ACID 模型的各个类别相互作用:
- A:原子性。
- C:一致性。
- I:隔离性。
- D:持久性。
原子性
ACID 模型的原子性方面主要涉及 InnoDB 事务。相关的 MySQL 特性包括:
- 自动提交设置。
- COMMIT 语句。
- ROLLBACK 语句。
一致性
ACID 模型的一致性方面主要涉及 InnoDB 的内部处理,以防止数据在崩溃时受损。相关的 MySQL 特性包括:
- InnoDB 双写缓冲区。
- InnoDB 崩溃恢复。
隔离性
ACID 模型的隔离性方面主要涉及 InnoDB 事务,特别是适用于每个事务的隔离级别。相关的 MySQL 特性包括:
- 自动提交设置。
- 事务隔离级别和 SET TRANSACTION 语句。
- InnoDB 锁定的底层细节。详情可以在 INFORMATION_SCHEMA 表中查看以及 Performance Schema 的 data_locks 和 data_lock_waits 表。
持久性
ACID 模型的持久性方面涉及 MySQL 软件特性与您特定的硬件配置相互作用。由于取决于您的 CPU、网络和存储设备的功能有很多可能性,因此这方面最难提供具体的指导原则。(而且这些指导原则可能采取“购买新硬件”的形式。)相关的 MySQL 特性包括:
- InnoDB 双写缓冲区。
- innodb_flush_log_at_trx_commit 变量。
- sync_binlog 变量。
- innodb_file_per_table 变量。
- 存储设备(如磁盘驱动器、SSD 或 RAID 阵列)中的写入缓冲区。
- 存储设备中的电池支持缓存。
- 用于运行 MySQL 的操作系统,特别是其对 fsync()系统调用的支持。
- 保护运行 MySQL 服务器和存储 MySQL 数据的所有计算机服务器和存储设备电力的不间断电源 (UPS)。
- 您的备份策略,例如备份的频率和类型以及备份保留期。
- 对于分布式或托管的数据应用程序,MySQL 服务器所在的数据中心的特定特征,以及数据中心之间的网络连接。