【问题标题】:SQL execution sequence in a transaction事务中的 SQL 执行顺序
【发布时间】:2016-02-05 00:18:01
【问题描述】:

我们的 BI 仪表板摘要报告的业务流程如下:

  1. SAP 将事务数据写入 SQL Server 数据库
  2. SAP 触发 SQL Server 中的作业以根据事务数据填充摘要数据

SAP 在事务中这样做

BEGIN TRAN
    Prepare INSERT statements to STOCK_SALES_VARIANT (2000 records)
    Prepare INSERT statements to STOCK_SALES_BUYER (16000 records)
    CALL JOB "Batch Insert"
    CALL JOB "Populate Summary"
COMMIT

我们发现在 STOCK_SALES_BUYER 数据插入完成之前已调用了“填充摘要”作业。这会导致汇总数据不准确。

我添加了一个具有默认值 getdate() 的列来捕获插入时间。

这是日志:

Variant table - 2016-02-05 10:41:08.547 to 2016-02-05 10:41:09.817
Buyer table - 2016-02-05 10:41:11.477     2016-02-05 10:41:15.480
Job - 2016-02-05 10:41:12 to 2016-02-05 10:41:21

我可以看到工作在买家表中写入最后一条记录之前开始。

有人可以建议如何解决这个时间问题并解释多个语句如何在幕后按顺序运行吗?谢谢!

【问题讨论】:

  • 看起来应该按顺序执行。如果你这样做:开始 tran > 插入 .... > 插入 .... > 提交 tran > 开始 tran > 调用作业 > 提交 tran

标签: sql-server transactions execution-time


【解决方案1】:

确定问题在于第二个作业在存储过程中的第一个作业完成之前开始。我做了更多的研究,发现这是存储过程的自然设计。在第二个作业中添加延迟计时器有助于解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多