4

我们正在我们的组织中浮动一个新的可扩展且以性能为中心的 ASP.Net 应用程序,该应用程序目前处于设计阶段。

经理们决定采用混合方法。他们决定广泛使用 CLR 存储过程,而 T-SQL 仅用于简单的数据操作。

我想从社区了解以下内容:

  1. 这么多 CLR 存储过程在后期是否会出现性能问题?
  2. 如果您有任何性能问题,MS 团队是否有可用的修复程序?

注意:我做了一个谷歌,发现以下最可能的问题,但还没有找到前两个的解决方案。

  1. 当 SQL Server 加载程序集时,它们会缓存在内存中。当 O/S 向 SQL Server 发出内存压力信号时,可能会运行显式垃圾回收,并且可能会卸载程序集。如果频繁发生,这可能会导致性能问题。

  2. 查询优化器无法准确计算 SQL CLR 代码的成本,因为它不查看代码实际执行的操作——这会影响执行计划。

  3. SQL CLR 代码有时会阻止并行性,因为它们通常是单线程的。有时这会损害性能。<< 虽然我在这里找到了解决方案Multi-threaded code in CLR Stored Procs? >>

让我知道 CLR 存储过程的问题和修复。

4

1 回答 1

2

我已经为 SQL 服务器完成了 CLR 程序集。那是痛苦的经历。您可以在此类 CLR 项目中使用许多限制。例如,不可能使用第三方库和开源库。一些库不能只部署到 SQL 服务器。您只能使用有限的库。

第二个问题是部署和权限设置。如果您的 DBA 对数据库的策略非常有限,那么您就无法将 CLR 程序集部署到数据库中。

我的建议是将数据库组件编写为 ASP.Net 的库。它非常简单,没有 SQL Server 的 CLR 程序集等限制。

2008年,我写了一篇关于这个问题的连载博客:SQL Sever Projects (1-4)。您可以将它们用作参考。

于 2012-03-30T04:49:14.933 回答