Sql server 如何确定sp_cursorfetch正在使用的查询

Sql server 如何确定sp_cursorfetch正在使用的查询,sql-server,sql-server-2000,Sql Server,Sql Server 2000,探查器显示我的服务器被大量对sp_cursorfetch的调用超载,但我想知道哪些查询导致了所有这些流量。您可能需要为此使用 我不确定您想要实现什么,如果您正在执行批处理流程执行计划,可能会有所帮助 希望它有帮助:)您可能需要使用它 我不确定您想要实现什么,如果您正在执行批处理流程执行计划,可能会有所帮助 希望有帮助:)探查器在这种情况下不起作用 我运行了一个来测试它,并使用以下命令查询了我从中创建的表: 选择CPU,TextData FROM CPU where LoginName='db\u

探查器显示我的服务器被大量对sp_cursorfetch的调用超载,但我想知道哪些查询导致了所有这些流量。

您可能需要为此使用

我不确定您想要实现什么,如果您正在执行批处理流程执行计划,可能会有所帮助

希望它有帮助:)

您可能需要使用它

我不确定您想要实现什么,如果您正在执行批处理流程执行计划,可能会有所帮助


希望有帮助:)

探查器在这种情况下不起作用

我运行了一个来测试它,并使用以下命令查询了我从中创建的表:

选择CPU,TextData FROM CPU where LoginName='db\u name\u here'按CPU描述顺序排列

//请务必在此处替换db_name_

结果我看到了这样的东西:

CPU----TextData-----------------------------

0------exec sp_cursorfetch 180150000, 16, 7415, 1
*注意:上面的“-”只是为了格式化它,所以它在这个网站上实际上是可读的

========

我在这方面找到的唯一答案是:

  • Select语句是这些游标抓取的唯一原因,检查最常用表的索引是解决此问题的良好开端

  • 您可能能够在cursorfetch调用的SPID上过滤跟踪,以查看它在运行sp_cursorfetch之前和之后正在做什么

  • 仅获取您当前使用的总记录集的子集。假设你现在抓到100排。只抓取10,因为10是用户在任何给定时间所能看到的最多的


探查器在这种情况下不起作用

我运行了一个来测试它,并使用以下命令查询了我从中创建的表:

选择CPU,TextData FROM CPU where LoginName='db\u name\u here'按CPU描述顺序排列

//请务必在此处替换db_name_

结果我看到了这样的东西:

CPU----TextData-----------------------------

0------exec sp_cursorfetch 180150000, 16, 7415, 1
*注意:上面的“-”只是为了格式化它,所以它在这个网站上实际上是可读的

========

我在这方面找到的唯一答案是:

  • Select语句是这些游标抓取的唯一原因,检查最常用表的索引是解决此问题的良好开端

  • 您可能能够在cursorfetch调用的SPID上过滤跟踪,以查看它在运行sp_cursorfetch之前和之后正在做什么

  • 仅获取您当前使用的总记录集的子集。假设你现在抓到100排。只抓取10,因为10是用户在任何给定时间所能看到的最多的


回应评论:

Thanks for your suggestions, all of which are helpful. Unfortunately the queries in question are from a third party application, of which I do not have direct access to view or modify the queries. If I find a query that is a particuar problem, I can submit a support request to have it reviewed. I just need to know what the query is, first. – Shandy Apr 21 at 8:17
您不需要访问应用程序就可以尝试我前面提到的大多数建议。让我们看一下:

  • Select语句是这些游标抓取的唯一原因,检查最常用表的索引是解决此问题的良好开端

    • 这是在数据库服务器上完成的。您只需在数据库上运行一个调优配置文件,并使用生成的配置文件运行SQL tuning Advisor。这将有助于改进索引
  • 您可能能够在cursorfetch调用的SPID上过滤跟踪,以查看它在运行sp_cursorfetch之前和之后正在做什么

    • 这也是您使用SQL事件探查器所做的事情
  • 仅获取您当前使用的总记录集的子集。假设你现在抓到100排。只抓取10,因为10是用户在任何给定时间所能看到的最多的

    • 这是在应用程序级别完成的
  • 您运行的SQL server版本是什么?在我的例子中,解决这个问题的方法是升级到SQLServer2008。我会尝试一下,看看它会去哪里

    因为您没有访问应用程序的权限,所以很可能会遇到使用游标的问题。如果查看一下,您会发现大多数备选方案都涉及到编辑运行的应用程序查询


    真正的问题是什么?为什么要分析数据库?

    回应评论:

    Thanks for your suggestions, all of which are helpful. Unfortunately the queries in question are from a third party application, of which I do not have direct access to view or modify the queries. If I find a query that is a particuar problem, I can submit a support request to have it reviewed. I just need to know what the query is, first. – Shandy Apr 21 at 8:17
    
    您不需要访问应用程序就可以尝试我前面提到的大多数建议。让我们看一下:

  • Select语句是这些游标抓取的唯一原因,检查最常用表的索引是解决此问题的良好开端

    • 这是在数据库服务器上完成的。您只需在数据库上运行一个调优配置文件,并使用生成的配置文件运行SQL tuning Advisor。这将有助于改进索引
  • 您可能能够在cursorfetch调用的SPID上过滤跟踪,以查看它在运行sp_cursorfetch之前和之后正在做什么

    • 这也是您使用SQL事件探查器所做的事情
  • 仅获取您当前使用的总记录集的子集。假设你现在抓到100排。只抓取10,因为10是用户在任何给定时间所能看到的最多的

    • 这是在应用程序级别完成的
  • 您运行的SQL server版本是什么?在我的例子中,解决这个问题的方法是升级到SQLServer2008。我会尝试一下,看看它会去哪里

    因为您没有访问应用程序的权限,所以很可能会遇到使用游标的问题。如果查看一下,您会发现大多数备选方案都涉及到编辑运行的应用程序查询


    真正的问题是什么?为什么要分析数据库?

    (抱歉-我已经更正了问题-我正在使用profier)。(抱歉-我已经更正了问题-我正在使用profier)。答:看起来SQL2005/2008可以这样做:看起来SQL2005/2008可以这样做:谢谢你的建议,所有这些都很有帮助。不幸的是,问题中的查询来自第三方应用程序,我无法直接访问该应用程序查看或修改查询。如果我发现一个查询是一个特殊的问题,我可以提交一个支持请求,让它被审查。我只想知道这个问题是什么