业务规则不严格时最适合的事务隔离级别
Best suitable transaction isolation level when business rules are not strict
简短版本:
我正在尝试确定哪个是我们场所中 SQL 服务器的最佳事务隔离级别。
长版:
我正在从 API 调用中提取数据并将其加载到暂存 tables 中,然后逐步加载到目标 tables 中。这些目的地 table 有多种用途,其中一些在下面提到:
- 通过 SSIS 将数据加载到 CRM
- Feed PowerBI 报告(计划刷新)
- 对数据应用业务转换并将其加载到数据仓库
- 将数据提取到 excel 个文档中
- (最重要的是)在初始 ETL 过程之外对目标 table 进行更改(从 API 到暂存到目标)
由于数据集很大,我面临的问题是:
- 我通过使用临时 table 和 CTE
避免的死锁
- table 更新之间的长时间等待(因为一个更新目标 table 的存储过程可能会等待一个小时,直到另一个 table 不使用更新)
- 更新 SQL table 时,PowerBI 刷新等待时间长,有时刷新超时
- 长 Select 语句在更新 SQL table 时等待
鉴于:
- 我工作的行业不是银行业,也不是数据需要始终 100% 准确的行业
- PowerBI 报告每天只刷新两次
- 我也迫切需要将这些目的地 table 中的数据用于其他报告目的
- 数据集包含数百万条记录
suitable 这个场合的隔离级别是多少?或者通过 table 提示设置单独的隔离级别会更好吗?
注意 1:如果我们在报告刷新中有一些脏读,我和我的雇主不会介意,只要这意味着报告会以相应的方式刷新并且 tables 可以用于其他存储程序(读取和更新)无需等待。
注意 2:is_read_committed_snapshot_on 在我们的 SQL 服务器中为 0。
为数据库设置READ COMMITTED SNAPSHOT ISOLATION的READ COMMITTED,可以让读者读取时不会被写者阻塞,防止写者被读者阻塞,也不会造成脏读。
这是显而易见的第一步。
简短版本: 我正在尝试确定哪个是我们场所中 SQL 服务器的最佳事务隔离级别。
长版: 我正在从 API 调用中提取数据并将其加载到暂存 tables 中,然后逐步加载到目标 tables 中。这些目的地 table 有多种用途,其中一些在下面提到:
- 通过 SSIS 将数据加载到 CRM
- Feed PowerBI 报告(计划刷新)
- 对数据应用业务转换并将其加载到数据仓库
- 将数据提取到 excel 个文档中
- (最重要的是)在初始 ETL 过程之外对目标 table 进行更改(从 API 到暂存到目标)
由于数据集很大,我面临的问题是:
- 我通过使用临时 table 和 CTE 避免的死锁
- table 更新之间的长时间等待(因为一个更新目标 table 的存储过程可能会等待一个小时,直到另一个 table 不使用更新)
- 更新 SQL table 时,PowerBI 刷新等待时间长,有时刷新超时
- 长 Select 语句在更新 SQL table 时等待
鉴于:
- 我工作的行业不是银行业,也不是数据需要始终 100% 准确的行业
- PowerBI 报告每天只刷新两次
- 我也迫切需要将这些目的地 table 中的数据用于其他报告目的
- 数据集包含数百万条记录
suitable 这个场合的隔离级别是多少?或者通过 table 提示设置单独的隔离级别会更好吗?
注意 1:如果我们在报告刷新中有一些脏读,我和我的雇主不会介意,只要这意味着报告会以相应的方式刷新并且 tables 可以用于其他存储程序(读取和更新)无需等待。
注意 2:is_read_committed_snapshot_on 在我们的 SQL 服务器中为 0。
为数据库设置READ COMMITTED SNAPSHOT ISOLATION的READ COMMITTED,可以让读者读取时不会被写者阻塞,防止写者被读者阻塞,也不会造成脏读。
这是显而易见的第一步。