Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何判断有问题的存储过程的参数值?_Sql_Sql Server_Blocking - Fatal编程技术网

Sql 如何判断有问题的存储过程的参数值?

Sql 如何判断有问题的存储过程的参数值?,sql,sql-server,blocking,Sql,Sql Server,Blocking,我有一个导致SQL server数据库阻塞的存储过程。每当它阻塞超过X秒时,我们就会收到运行查询的通知,它看起来与下面的类似 CREATE PROC [dbo].[sp_problemprocedure] ( @orderid INT --procedure code 我如何知道@orderid的值是多少?我想知道这个值,因为这个过程一天会运行100多次,但只会导致少数几次阻塞,如果我们能在订单id之间找到某种模式,也许我能找到问题所在 如果有帮助,则从.NET应用程序调

我有一个导致SQL server数据库阻塞的存储过程。每当它阻塞超过X秒时,我们就会收到运行查询的通知,它看起来与下面的类似

   CREATE PROC [dbo].[sp_problemprocedure] (
    @orderid INT
    --procedure code
我如何知道@orderid的值是多少?我想知道这个值,因为这个过程一天会运行100多次,但只会导致少数几次阻塞,如果我们能在订单id之间找到某种模式,也许我能找到问题所在


如果有帮助,则从.NET应用程序调用该过程。

如果从.NET应用程序调用该过程,您可以轻松注销从.NET应用程序传递的参数,但如果您没有访问权限,也可以使用SQL Server评测。可以在命令类型上设置过滤器,即仅在proc上以及正在命中的数据库上设置过滤器,否则您将被配置文件可以生成的所有信息淹没


链接:

如果从.NET应用程序调用,您可以轻松注销从.NET应用程序传递的参数,但如果您没有访问权限,也可以使用SQL Server评测。可以在命令类型上设置过滤器,即仅在proc上以及正在命中的数据库上设置过滤器,否则您将被配置文件可以生成的所有信息淹没

链接:

  • 重命名该过程
  • 创建日志记录表
  • 创建一个新的(相同的签名/参数),它调用原始的,但首先记录参数和开始时间戳,并在调用完成结束时间戳后记录
  • 使用原始进程的名称为此新进程创建同义词
现在你有了一个由任何应用程序进行的所有呼叫的日志

您可以随时取消/启用日志记录,只需重新定义同义词以指向日志记录包装器或原始…

  • 重命名该过程
  • 创建日志记录表
  • 创建一个新的(相同的签名/参数),它调用原始的,但首先记录参数和开始时间戳,并在调用完成结束时间戳后记录
  • 使用原始进程的名称为此新进程创建同义词
现在你有了一个由任何应用程序进行的所有呼叫的日志


您可以随时取消/启用日志记录,只需重新定义同义词以指向日志记录包装器或原始…

您是否尝试从过程内部打印它


您是否尝试过从程序内部打印它


最简单的方法是运行探查器跟踪。您需要捕获对存储过程的调用


但实际上,这只会告诉你故事的一部分。我个人会从代码开始。尝试将大型更新批处理为较小的批处理。如果没有必要,尽量避免长时间运行的显式事务。查看触发器(如果有)和级联外键,确保它们是有效的

最简单的方法是运行探查器跟踪。您需要捕获对存储过程的调用


但实际上,这只会告诉你故事的一部分。我个人会从代码开始。尝试将大型更新批处理为较小的批处理。如果没有必要,尽量避免长时间运行的显式事务。查看触发器(如果有)和级联外键,确保它们是有效的

最简单的方法是执行以下操作:

  • 1) 在.NET中,在运行过程之前获取日期时间
  • 2) 在.Net中,在过程完成后获取日期和时间
  • 3) 在.NET中,进行一些日期时间计算,如果计算速度“慢”,则将开始和结束日期时间、用户信息、所有参数等写入文件(日志)

最简单的方法是执行以下操作:

  • 1) 在.NET中,在运行过程之前获取日期时间
  • 2) 在.Net中,在过程完成后获取日期和时间
  • 3) 在.NET中,进行一些日期时间计算,如果计算速度“慢”,则将开始和结束日期时间、用户信息、所有参数等写入文件(日志)

将其记录在.NET端将很容易实现,但是如何将其连接到proc的长时间运行实例,而不是不阻塞运行的实例?这意味着我可以将第一个实例[sp_problemprocedure]记录为传入orderid=1,但我如何判断该orderid导致[sp_problemprocedure]阻塞?还有一种方法可以在SQL Server profiler中按名称将此特定进程作为目标吗?将其记录在.NET端将很容易实现,但是如何将其连接到长期运行的进程实例,而不是不阻塞运行的实例?这意味着我可以将第一个实例[sp_problemprocedure]记录为传入orderid=1,但我如何判断该orderid导致[sp_problemprocedure]阻塞?还有一种方法可以在SQL Server profiler中按名称将此特定进程作为目标吗?