【问题标题】:Multi-threaded code in CLR Stored Procs?CLR 存储过程中的多线程代码?
【发布时间】:2023-03-15 12:22:01
【问题描述】:

是否可以使用多线程 CLR 存储过程?

我有一项数据密集型任务,具有很大的并行化潜力。 CLR 存储过程可以很好地消除将数据移出进程的开销,我担心我不得不放弃并行计算。

我有什么选择?

注意:我们使用的是 SQL Server 2005,并计划在

【问题讨论】:

    标签: sql-server database clrstoredprocedure


    【解决方案1】:

    如果是 data 密集型并具有并行化的潜力,您应该以面向 set 的方式处理它,并让 SQL 在它认为合适的时候并行化处理。在对每个 CPU 的数据访问进行分区方面,您将无法做任何比 SQL 已经做的更智能的事情,它只是可以访问您没有的信息(缓冲池填充状态、页面寿命预期、CPU/NUMA 关联等)。

    如果您的处理是面向标量和 CPU 密集型的(甚至是一些面向集合的处理),请将处理放在 UDF CLR 函数中,然后再次让查询执行并行化您的函数执行。

    如果您的处理有任何类型的 I/O(即 Web 调用),请不要将它放在 SQL 中,放在服务器进程之外。

    如果您的处理真的不属于所有这些类别,并且您仍然相信您可以从多线程中受益,那么理论上可以在 SQL 中启动线程。请注意,SQL 中的 CLR 主机不是您的普通 CLR 主机(即众所周知的应用程序主机或 ASP 主机)。 SQL CLR 是第三种主机类型,在SOS 构造(工作者、锁存器、内存管理员等)之上提供其自己的原语(线程、锁定、内存管理等)。我强烈建议不要在 SQL 中进行显式多线程 CLR 处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      相关资源
      最近更新 更多