gpt4 book ai didi

sql - 对于长时间运行的报告,我是使用只读事务还是可序列化事务?

转载 作者:行者123 更新时间:2023-12-01 11:38:41 24 4
gpt4 key购买 nike

我有一个用 SQL*Plus 编写的长期运行报告,其中包含几个 SELECT。
我想更改事务隔离级别以获得一致的数据 View 。我找到了两种可能的解决方案:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;


SET TRANSACTION READ ONLY;

我使用哪一个报告,为什么?任何性能影响?对其他 session 的任何影响(这是一个生产数据库)。

请注意,该问题专门针对上述两个选项,而不是各种隔离级别。

是否 SERIALIZABLE阻止对我的报告查询的表的更改?

我会天真地假设 READ ONLY对数据库的压力要小一些,因为预计不会发生数据更改。这是真的吗,Oracle 是否利用了这一点?

最佳答案

在 Oracle 中,您真的可以在 SERIALIZABLE 之间进行选择和 READ COMMITTED .
READ ONLY与可序列化相同,关于它查看其他 session 更改的方式,除了它不允许修改表。

SERIALIZABLEREAD ONLY在可序列化事务开始后,您的查询将看不到对数据库所做的更改。

READ COMMITTED ,您的查询在查询的生命周期内不会看到对数据库所做的更改。

SERIALIZABLE       READ COMMITTED      ANOTHER SESSION
(or READ ONLY)


Change 1
Transaction start Transaction start
Change 2
Query1 Start Query1 Start
... ... Change 3
Query1 End Query1 End

Query2 Start Query2 Start
... ... Change 4
Query2 End Query2 End

使用可序列化,query1 和 query2 只会看到 change1。

提交读取后,query1 将看到更改 1 和 2,而 query2 将看到更改 1 到 3。

关于sql - 对于长时间运行的报告,我是使用只读事务还是可序列化事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24386384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com