【问题标题】:Issues and resolutions while using CLR stored procedures?使用 CLR 存储过程时的问题和解决方法?
【发布时间】:2012-03-29 18:40:03
【问题描述】:

我们正在我们的组织中浮动一个新的可扩展且以性能为中心的 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 存储过程的问题和修复。

【问题讨论】:

  • 只提一句建议:在 T-SQL 中执行 数据操作 任务,例如选择或更新数据 - 这要好得多(在各个方面,包括性能)而不是使用 SQL CLR 和 C# 来执行相同的任务。限制 SQL CLR 做 T-SQL 不擅长的事情——调用外部 Web 服务、广泛和高级的字符串和数据操作以及类似的东西。仅仅因为您可以遍历一个表并在 SQL CLR 存储过程中逐行更新每一行并不意味着 您应该 ..

标签: c# sql-server-2008 garbage-collection clrstoredprocedure


【解决方案1】:

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

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

我的建议是将数据库组件编写为 ASP.Net 的库。它非常简单,没有像 SQL Server 的 CLR 汇编那样的限制。

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

【讨论】:

  • 支持一个不错的选择。这仍然不能回答我关于 CLR SP 的问题。
猜你喜欢
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多