【问题标题】:Force a stored procedure to run single threaded强制存储过程运行单线程
【发布时间】:2012-10-19 13:58:38
【问题描述】:

我有一个在多核系统上运行的存储过程。它以多线程方式执行。由于(可能是)查询中的某些事情,某些线程的执行将永远挂起,并带有 cx_packet 等待和锁定。有没有办法强制单线程执行? (我知道这不是最好的解决方案,但至少在查询得到更好的优化之前很有帮助。)

【问题讨论】:

    标签: sql-server database stored-procedures single-threaded


    【解决方案1】:

    您可以将OPTION (MAXDOP 1) 添加到您希望单线程运行的语句中。示例

    SELECT *
    FROM master..spt_values
    OPTION (MAXDOP 1)
    

    【讨论】:

    • 感谢 Martin,但这仅适用于每个查询。它不会使 SP 中的整个 Transaction 成为单线程。
    • @FaithWins - 是的,没错。这是在查询级别定义的,无法为模块中的每个语句设置它,因此您需要对存储过程中导致问题的所有语句进行设置。您唯一可以做的另一件事(取决于 SQL Server 的版本)是查看使用 resource governor 并使用 MAXDOP=1 从工作负载组运行该过程
    • 这很有趣,除了两个陷阱。 1. 我有 SQL Server 2005 和 2。它看起来像一个服务器级别的设置,会影响到服务器的所有其他事务。我会试试 MAXDOP。再次感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 2011-02-01
    • 2016-04-04
    • 2018-11-11
    • 1970-01-01
    相关资源
    最近更新 更多