4

我们正在浮动一个新的可扩展的,以性能为中心的ASP.Net应用程序,目前处于设计阶段。使用CLR存储过程时的问题和解决方案?

经理们决定采取混合方式。他们决定广泛使用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存储过程的问题和解决。

+1

只是一个建议的话:做**数据操作**任务,如选择或更新** T-SQL中的数据** - 比使用SQL CLR和C#更好(包括性能)同样的任务。限制SQL CLR来完成T-SQL的工作 - 调用外部Web服务,广泛和高级的字符串和数据操作以及类似的东西。只是因为你**可以遍历一个表并更新SQL CLR存储过程中的每一行 - 激动 - 行并不意味着**你应该** .. – 2012-03-29 20:33:55

回答

2

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

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

我的建议是将您的数据库组件编写为ASP.Net的库。这很容易,并且没有像SQL Server的CLR汇编那样的限制。

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

+0

Upvote是一个很好的选择。尽管如此,这并不能回答我关于CLR SP的问题。 – 2012-04-02 14:07:08