SQL CLR Parallelism



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

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

在调用 SQLCLR 函数之前,存储过程中是否有任何内容会执行?

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

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

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

第三个选项"审核"可让您轻松地将事件捕获到日志文件中,以便通过系统 TVF 查看该文件。可以捕获 SCHEMA OBJECT ACCESS,然后在服务器审核级别(数据库审核规范或服务器审核规范需要(筛选具有存储过程或函数名称的对象。您不会看到使用前两个选项获得的详细程度,也无法看到存储过程中各个语句的细分,但它是一种相当轻量级的机制,用于捕获这些事件,如果它们发生在您不通过前两个选项观看时。

也就是说,如果您看到 Web 服务调用出现延迟,并且该 Web 服务调用由 2 个以上的会话同时执行,并且这些并发 Web 服务调用是针对同一 URI,那么您将遇到每个 URI 的默认最大连接数限制,即 2。达到此限制时,对该 URI 的所有其他调用都将处于保留状态,直到 2 个调用中的一个完成。可以通过设置ServicePoint类的 ConnectionLimit 属性来增加每个 URI 的最大连接数,该属性本身是HttpWebRequest的属性(以及任何其他 *WebRequest(:

_MyHttpWebRequest.ServicePoint.ConnectionLimit = 10;

最新更新