我有一个CLR
运行在下面的进程SQL Server2008
。它构建了多个表数据的缓存以保存在静态类中以供其他调用稍后使用。
我的问题是,我可以通过生成线程来加载缓存中的每个数据集/表来改进加载此缓存的过程吗?
我过去一直回避这一点,因为各种帖子建议将线程管理留给SQL Server
。不过我真的可以加快这个过程。
目前,它是加载每个数据集的顺序过程。如果我可以同时运行这些,那就非常方便了。我在外面做过很多次的过程CLR
覆盖以获得一些额外的性能提升。
非常感谢任何想法帮助提示。
您可以使用线程,但它们必须正常工作。否则您将失去使用它们的好处。
From CLR 主机环境 http://msdn.microsoft.com/en-us/library/ms131047.aspx
SQL Server 和 CLR 如何协同工作
本节讨论 SQL Server 如何集成线程,
SQL 的调度、同步和内存管理模型
服务器和 CLR。特别是,本节检查
根据可扩展性、可靠性和安全性目标进行集成。
SQL Server 本质上充当 CLR 的操作系统
它托管在 SQL Server 内部。 CLR 调用低级例程
由 SQL Server 实现,用于线程、调度、同步、
和内存管理。这些与其余的原语相同
SQL Server 引擎使用。该方法提供了几种
可扩展性、可靠性和安全性优势。
可扩展性:通用线程、调度和同步
CLR 调用 SQL Server API 来创建线程,两者都针对运行用户
代码并供其自己的内部使用。为了实现之间的同步
在多个线程中,CLR 调用 SQL Server 同步对象。
这允许 SQL Server 调度程序在某个任务发生时安排其他任务
线程正在等待同步对象。例如,当
CLR启动垃圾收集,其所有线程等待垃圾
收集完成。因为CLR线程和同步
它们正在等待的对象对于 SQL Server 调度程序、SQL 来说是已知的
服务器可以调度正在运行其他数据库任务的线程
涉及 CLR。这也使 SQL Server 能够检测死锁
涉及 CLR 同步对象获取的锁并使用
消除死锁的传统技术。
托管代码在 SQL Server 中抢占式运行。 SQL Server 调度程序
能够检测并停止未产生的线程
大量的时间。将 CLR 线程挂钩到 SQL 的能力
服务器线程意味着 SQL Server 调度程序可以识别
CLR 中的“失控”线程并管理它们的优先级。如此暴走
线程被挂起并放回到队列中。线程是
多次被标识为失控的线程不允许运行一段时间
给定的时间段,以便其他正在执行的工作人员可以运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)