首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server过程和SQLCLR_QUANTUM_PUNISHMENT

Server过程和SQLCLR_QUANTUM_PUNISHMENT
EN

Database Administration用户
提问于 2017-02-20 13:30:32
回答 1查看 687关注 0票数 6

我在Server 2014上运行了一个CLR存储过程。此存储过程收集一些数据(通常在数万行范围内编号),对数据运行一些计算,生成一个输出数据集,并将该输出数据集写入两个目标表。对于小跑,这需要几秒钟。对于我们的更大的运行,它目前大约需要25分钟。在这25分钟内,我们观察到大量的SQLCLR_QUANTUM_PUNISHMENT等待。所以我试着教育自己我们能做些什么来减少这些等待的发生。我发现了大量的资源告诉我,“当CLR任务因为超出其执行量而被节流时发生,这样做是为了减少这个资源密集型任务对其他任务的影响。”我读过Server的执行量是4ms。那么,假设CLR存储过程或函数占用4ms以上的CPU时间,就会出现这种等待类型吗?

另外,我找到了一个指示某些CLR过程应该产生的引用。现在,我们的CLR过程是单线程的。我当然可以在关键的地方添加一些睡眠电话,看看这会产生什么样的影响。但我想更好地了解发生了什么。因此,如果有人有一些好的知识可以分享或链接到一个好的文件/文章,我将不胜感激。在BOL报价之外查找有关此等待类型的信息有点困难。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2017-02-20 14:32:56

不幸的是,在这个话题上没有太多的信息。我可以说是的,您当然应该将Thread.Sleep(0);添加到代码中的不同位置。这样做使Server有机会控制线程。对于正在进行数据访问的地方(即SqlClient内容)来说,这是不必要的,因为Server已经有能力管理它。

此外,@ Rusanu,在另一个问题(可能是堆栈溢出)中,建议使用Thread.BeginThreadAffinity / Thread.EndThreadAffinity来管理长期运行的进程,但使用这些要求将程序集设置为UNSAFE

票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/164891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档