gpt4 book ai didi

sql-server - CLR 存储过程中的多线程代码?

转载 作者:搜寻专家 更新时间:2023-10-30 19:44:46 24 4
gpt4 key购买 nike

多线程 CLR 存储过程是否可行?

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

我有哪些选择?

注意:我们使用的是 SQL Server 2005,并计划在 < 4 个月内升级到 SQL Server 2008

最佳答案

如果 数据 密集且具有并行化的潜力,您应该以面向集合 的方式处理它,并让 SQL 在它认为合适的情况下并行化处理。在分区每个 CPU 的数据访问方面,您将无法做比 SQL 已经做的更聪明的事情,它只是可以访问您没有的信息(缓冲池填充状态、页面生命周期预期、CPU/NUMA 亲和性等)。

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

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

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

关于sql-server - CLR 存储过程中的多线程代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1324027/

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