SQL CLR并行性

时间:2018-10-16 11:57:31

标签: sql sql-server tsql sqlclr

我有一个调用CLR函数的存储过程。它们都在同一个数据库中。 CLR函数调用Web服务。这里的问题是SQL时间戳比Web服务时间戳早40秒。这意味着SQL或Web服务都无法并行处理许多调用。

我能够查看调用SP时保存的日志。如何查看CLR函数何时被调用?

1 个答案:

答案 0 :(得分:1)

存储过程中是否有任何在调用SQLCLR函数之前执行的操作?

通常,如果您想实时查看正在发生的情况,则有以下三种选择:

  1. SQL Server Profiler
  2. 扩展事件
  3. 数据库审核

前两个可以让您观察事件的发生,并且可以看到每个语句的开始时间和持续时间。

第三个选项“审核”使您可以轻松地将事件捕获到可以通过系统TVF查看的日志文件。您可以捕获SCHEMA OBJECT ACCESS,然后在服务器审核级别(数据库审核规范或服务器审核规范要求)中过滤具有存储过程或函数名称的对象。您将不会看到通过前两个选项获得的详细程度,也不会看到存储过程中单个语句的细目分类,但是如果它们是当您不在头两个选项中观看时会发生这种情况。

也就是说,如果您看到Web服务调用出现延迟,并且该Web服务调用同时由两个以上的会话执行,并且如果这些并发的Web服务调用都使用相同的URI,则说明您正在运行进入每个URI的默认最大连接数限制(即2)。达到此限制后,对该URI的所有其他调用将保留,直到两个调用之一完成。您可以通过设置ServicePoint类的ConnectionLimit属性(它本身是HttpWebRequest(以及任何其他* WebRequest)的属性)来增加每个URI的最大连接数:

_MyHttpWebRequest.ServicePoint.ConnectionLimit = 10;