AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 177569
Accepted
Mannoj
Mannoj
Asked: 2017-06-29 23:03:58 +0800 CST2017-06-29 23:03:58 +0800 CST 2017-06-29 23:03:58 +0800 CST

Mysql ACID 是否兼容?

  • 772

根据 Postgresql,Mysql 不是符合 ACID 的吗?在一些博客中,我看到 Mysql 不符合 ACID。这有多真实?

我们先不考虑这里的复制,让我们考虑一个独立的,Mysql ACID 的效率如何?

在我对 Mysql-ACID 的理解中。

A - 原子性(如果一个失败必须回滚,则应该全部提交一组事务。是意味着所有事务都已提交,不意味着即使一个失败也必须回滚)。

Mysql 中支持的 IE 功能是。

  • 开始交易;..... 犯罪 ;
  • 自动提交=1;

C - 一致性。

(PK、FK、UK、非空)。它遵守数据库的关系和约束。实例一个父键只有在它的子键被删除时才能被删除。

我 - 隔离。用户及其提交状态之间的隔离。

读可重复读未提交读已提交序列化

D - 耐用性。在数据库崩溃的情况下,innodb 通过从 iblog 文件应用提交的事务并丢弃未提交的事务来恢复数据库。

单击此处查看此问题的来源。 - 是因为博客是@2001 创建的吗?

2017 年6 月 30 日更新:根据“Evan Carroll”的回复,我亲自测试了5.7.18-enterprise 上的博客实验。实验得到的结果似乎是Mysql is Not an ACID Compliant。

mysql postgresql
  • 3 3 个回答
  • 8709 Views

3 个回答

  • Voted
  1. David Spillett
    2017-06-30T00:33:37+08:002017-06-30T00:33:37+08:00

    如果您使用 InnoDB 或类似的存储引擎,那么它应该符合 ACID(参考:https ://en.wikipedia.org/wiki/InnoDB )。myISAM,旧的默认值,仍然非常常用,绝对不符合 ACID。如果您将两者混合使用(您可能会发现更简单的表类型性能更好,并且对于可以并且将再次复制的易失性数据是可以接受的,例如 ETL 流程的暂存表),那么您的解决方案将不完全兼容。

    ACID 合规性的一个重要警告是,出于性能原因,大多数数据库使用不保证“I”部分的隔离级别 - 这在 ANSI SQL 规范内。要提供适当的隔离,您需要保证事务是可序列化的,这是一些 DB 甚至不支持的隔离级别。例如 MySQL+InnoDB 默认为“可重复读取”,而 MS SQL Server 默认为稍微严格的“已提交读”,两者都提供“可序列化”但不是默认值。为什么不总是支持并且通常不是默认设置?性能:完全隔离要求会显着限制并发性。

    有几篇关于这个主题的好文章。例如, http://www.bailis.org/blog/when-is-acid-acid-rarely/是一个简短且内容丰富的地方,可以从评论中的一些有趣讨论开始。

    • 10
  2. Best Answer
    Evan Carroll
    2017-06-30T09:32:53+08:002017-06-30T09:32:53+08:00

    不

    我不认为允许可重复读取中的幻像写入满足任何 ACID 合规性。

    有关更多信息,请参阅此博客条目。

    • 3
  3. simplifiedDB
    2017-06-30T00:43:02+08:002017-06-30T00:43:02+08:00

    MySQL 是否真的完全遵循 ACID 的特性存在很多争论,每个人都有自己的看法。根据 MySQL 文档 https://dev.mysql.com/doc/refman/5.6/en/mysql-acid.html

    带有 Innodb 引擎的 MySQL 紧跟 ACID 属性。但这是他们的观点。

    但是我们不应该忘记,在新版本中,MySQL 有了很大的改进,我个人很欣赏 Oracle,他们正在以一种非常好的方式对其进行优化。所以以前的版本可能不遵循 ACID ,但今天是。

    但是,让我尝试将所有属性一一列出,带有 Innodb 的 MySQL 如何遵循这些属性:

    1. 原子性表示要么回滚要么提交完整的事务。根据我的经验,每当事务中途发生任何崩溃时,Innodb 引擎都会回滚。它通过将事务语句的结果(脏页或修改的行)存储在双写缓冲区(如果启用)或重做日志或二进制日志中来处理(如果启用)并将这些结果写回磁盘,而不管事务是否应处于准备状态。如果不是,则事务将回滚。只需杀死您的 mysqld,然后重新启动它并观察您的错误日志文件。

    2. Innodb 也遵循一致性,因为有各种日志机制(缓冲区)记录数据库发生的所有更改,并帮助我们确保不会发生不一致。

    3. 隔离:Innodb 提供了几个行级锁定,可以避免(如果处理得当)任何其他进程获取已被其他进程使用的资源的锁定。它通过将事务语句的结果(修改的行)存储在内存缓冲区中来处理并且只有在事务提交后才将这些结果从缓冲区写回磁盘和二进制日志。

    4. 耐用性:根据 MySQL DOC ,ACID 模型的耐用性方面涉及与您的特定硬件配置交互的 MySQL 软件功能。由于取决于您的 CPU、网络和存储设备的功能有许多可能性,因此提供具体指导方针是最复杂的。(这些指导方针可能采取购买“新硬件”的形式。) 。例如二进制日志确保在任何失败的情况下的持久性。

    让我知道,如果这对你有帮助:)

    • 1

相关问题

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve