当前位置: 首页 > 知识库问答 >
问题:

是否应该将mysql事务隔离级别设置为“读取提交”?

关志勇
2023-03-14

在我的airflow升级到2.0.0(然后是2.0.1)并且调度程序扩展到3个节点之后,奇怪的事情发生了:

  • DAGRUNN成功,但根本没有计划任务实例
  • 任务失败,主机名为空(https://github.com/apache/airflow/issues/13692)
  • 任务设置为“upstream_failed”,而上游任务成功(https://github.com/apache/airflow/issues/13671)

当只有一个调度器节点时,这些现象从未发生过。

并且我发现在一个调度器节点创建了一个新的dagrun的任务实例之后,在另一个调度器节点的task_instance_scheduling_decisions函数中找不到它们。

然后我检查了mysql配置,发现事务隔离默认设置为可重复读取。

在我将事务隔离设置为read commited之后,现在似乎一切都很好。但我还是想知道有没有副作用?

共有1个答案

岳枫
2023-03-14

是的,提交的读取不同于可重复的读取。

如果使用可重复读取,则在此事务中:

START TRANSACTION;

SELECT * FROM mytable;

SELECT * FROM mytable; -- i.e. the same query

COMMIT;

您可以保证两个选择返回相同的结果(只要它们不是锁定查询)。

但在READ COMMITTED中,如果其他会话在两个选择之间提交了对数据的更改,则会返回不同的结果。

换句话说,可重复读取意味着您的SELECT查询总是返回在启动事务启动时提交的数据。而READ COMMITTED意味着您的SELECT查询返回在事务启动后提交的数据,直到每个相应的SELECT启动时为止。

这两个级别的事务隔离都有适当的用途。但他们的行为确实不一样。

 类似资料:
  • 本文向大家介绍Mysql事务隔离级别之读提交详解,包括了Mysql事务隔离级别之读提交详解的使用技巧和注意事项,需要的朋友参考一下 查看mysql 事务隔离级别 可以看到当前的事务隔离级别为 READ-COMMITTED 读提交 下面看看当前隔离级别下的事务隔离详情,开启两个查询终端A、B。 下面有一个order表,初始数据如下 第一步,在A,B中都开启事务 第二步查询两个终端中的number值

  • 本文向大家介绍MySQL的默认事务隔离级别是?相关面试题,主要包含被问及MySQL的默认事务隔离级别是?时的应答技巧和注意事项,需要的朋友参考一下 读未提交(RU): 一个事务还没提交时, 它做的变更就能被别的事务看到. 读提交(RC): 一个事务提交之后, 它做的变更才会被其他事务看到. 可重复读(RR): 一个事务执行过程中看到的数据, 总是跟这个事务在启动时看到的数据是一致的. 当然在可重复

  • 本文向大家介绍MySQL四种事务隔离级别详解,包括了MySQL四种事务隔离级别详解的使用技巧和注意事项,需要的朋友参考一下 本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一、事务的基本要素(ACID)   1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所

  • 主要内容:事务概述,事务的四大特性,并发事务问题,事务的隔离级别,演示:,总结事务概述 事务是一个或一组sql语句组成的一个执行单元,这个执行单元要么全部执行成功,要么全部执行失败。用于保证数据的完整性。 如账户转账,张三给李四转500,对应的sql语句应该是update张三的 余额-500,并且update李四的余额+500,如果先更新完张三的数据,然后出现了异常,导致李四的余额修改不了,那么就出现数据上的问题了,应该使用事务来解决这一问题,当中间出现异常后回滚,让张三的

  • 我正在写一个小拍卖app,这是非常重要的,我的出价是有把握的记录。毕竟,拍卖的最后几秒钟是买家的关键时刻,我不能冒险让他们同时出价和竞争。 当然,这就是事务隔离的目的。我可以将我的隔离级别设置为可序列化,然后我们就都设置好了。 但是其他的请求呢?如果用户正在查看配置文件或发送消息,则这些请求不需要任何接近那种事务隔离的地方。对于这些请求,“已提交读”隔离级别是完全可以接受的。 我正在将事务级别设置

  • 问题内容: 我想将隔离级别设置为。如何使用gorm orm for postgres实现此目的。 示例代码: 问题答案: 我在这里有完全一样的问题: 和pg完全一样。