多线程 CLR 存储过程可能吗?
我有一项数据密集型任务,具有很大的并行化潜力。 CLR 存储过程非常适合消除将数据移出进程的开销,但我担心我必须放弃并行计算。
我有什么选择?
注意:我们使用的是 SQL Server 2005,计划在 4 个月内升级到 SQL Server 2008
If is data具有并行化潜力的密集型,您应该在set面向的方式并让 SQL 按照其认为合适的方式并行化流程。在对每个 CPU 的数据访问进行分区方面,您将无法做比 SQL 更聪明的事情,它只是可以访问您无法访问的信息(缓冲池填充状态、页面预期寿命、CPU/NUMA 关联性等)。
如果您的处理是面向标量和 CPU 密集型的(甚至是一些面向集合的处理),请将处理放在 UDF CLR 函数中,然后再次让查询执行并行化您的函数执行。
如果您的处理有任何类型的 I/O(即网络调用),请执行not把它放在SQL中,放在服务器进程之外。
如果你的处理really不属于所有这些类别,并且您仍然相信您可以从多线程中受益,理论上可以在 SQL 内部启动线程。请注意,SQL 内的 CLR 主机是not您的普通 CLR 主机(即众所周知的应用程序主机或 ASP 主机)。 SQL CLR 是第三种主机类型,提供其自己的原语(线程、锁定、内存管理等)SOS构造(工人、锁存器、内存管理员等)。我强烈建议不要在 SQL 中进行显式多线程 CLR 处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)