AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 29284
Accepted
peter
peter
Asked: 2012-11-27 01:26:04 +0800 CST2012-11-27 01:26:04 +0800 CST 2012-11-27 01:26:04 +0800 CST

如何分析存储过程

  • 772

我正在使用 SQL Server 2012,想知道如何分析存储过程

例如,分析器可以捕获存储过程中的每个单独的 SQL 语句,它是什么,运行需要多长时间等?

我正在尝试诊断合并复制存储过程,这必须在合并代理的完整运行中被捕获。似乎不可能抓住有性能问题的存储过程并再次运行它,因为那时它并不慢。

sql-server sql-server-2012
  • 2 2 个回答
  • 73167 Views

2 个回答

  • Voted
  1. Best Answer
    Mike Walsh
    2012-11-27T05:37:03+08:002012-11-27T05:37:03+08:00

    Kevin 的回答描述了要在 SQL Trace/SQL Profiler 中捕获的事件。稍微扩展一下这个答案 -SP:StmtCompleted听起来会向您展示正在完成的存储过程中的每个语句。

    此外,如果您在繁忙的系统上并试图诊断性能问题,您应该小心使用 SQL Profiler。SQL Profiler 比跟踪文件或使用扩展事件慢得多。Jonathan Kehayias 的这篇博客文章显示,使用 SQL Profiler 大约会导致系统性能的 90% 开销和跟踪到文件的大约 10% 开销。扩展事件更少。这就是为什么通常建议不要运行 SQL Profiler 本身,而

    虽然此信息可通过扩展事件获得,但我建议仍使用 SQL Trace(SQL Profiler 背后的技术),但改为跟踪文件(如果您想投资于学习和使用扩展事件,这将是可行的方法,在 SQL Server 的未来版本中,SQL 跟踪将消失,我们将拥有的只是扩展事件)。我还建议您通过“列过滤器”按钮过滤掉尽可能多的背景噪音,以确保您只捕获必要的内容。您可以使用 Kevin 在他的好答案中描述的步骤使用 Profiler 工具设置跟踪,然后从同一 GUI 添加过滤器。然后,您可以将跟踪导出为脚本,并在 SQL Server 跟踪到不包含数据库或事务日志文件的文件夹上的文件中运行该脚本。要导出,您只需设置跟踪,运行几秒钟以确保您正在捕获您想要的内容,停止它,然后转到菜单栏File->Export->Script Trace Definition并保存文件。然后在您要跟踪的服务器上的新查询窗口中打开该文件。您可以通过查看您刚刚创建的脚本中使用的各种存储过程的帮助文章来了解有关您创建的该脚本的选项和定义的更多信息。

    如果您有时间并想学习,您还可以阅读一些关于扩展事件的文章,并了解如何捕获信息。当您准备好开始博客文章时,Jonathan Kehayias是一个很好的资源。

    • 29
  2. Kevin Feasel
    2012-11-27T04:59:30+08:002012-11-27T04:59:30+08:00

    您可以通过 SQL Server Profiler 捕获存储过程中的各个语句。为此,在您的事件选择选项卡中,单击“显示所有事件”复选框。然后,向下滚动到存储过程类别并选中SP:StmtCompleted旁边的框。如果您还选择了SQL:BatchStarted和SQL:BatchCompleted事件,您可以获得存储过程运行的从头到尾的图片,并通过 SPID 将它们捆绑在一起。

    查看计划缓存以查看是否可以为执行缓慢的过程获取查询计划也可能会有所帮助。你可以从这样的事情开始:

    SELECT 
        OBJECT_NAME(st.objectid,st.dbid) AS ObjectName,
        cp.usecounts AS ExecutionCount,
        st.TEXT AS QueryText,
        qp.query_plan AS QueryPlan
    FROM 
        sys.dm_exec_cached_plans AS cp
        CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp
        CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
    WHERE 
        cp.objtype = 'Proc'
        AND OBJECT_NAME(st.objectid,st.dbid) = 'YourStoredProcedure';
    
    • 24

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve