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 / 问题 / 5426
Accepted
Manjot
Manjot
Asked: 2011-09-06 15:28:32 +0800 CST2011-09-06 15:28:32 +0800 CST 2011-09-06 15:28:32 +0800 CST

SQL 2005-存储过程性能故障排除

  • 772

我正在调查 SQL 2005 服务器上存储过程的性能问题。这就是我打算这样做的方式:

  • 分析任何不良 TSQL 实践的存储过程(如 count * 等)
  • 通过 DTA 运行它
  • 研究存储过程的估计查询计划
  • 通过在数据库中运行此代码来查找缓存的计划:

    SELECT  deqp.dbid ,
        deqp.objectid ,
        deqp.encrypted ,
        deqp.query_plan     
    FROM sys.dm_exec_query_stats deqs CROSS APPLY sys.dm_exec_query_plan(deqs.plan_handle) AS deqp
    WHERE objectid = OBJECT_ID('procedurename', 'p') ;
    
  • 查找相关索引(不确定如何)并检查使用情况
  • 尝试找到任何缺失的索引

我还应该怎么做?非常感谢评论。

提前致谢

sql-server-2005 performance
  • 2 2 个回答
  • 1307 Views

2 个回答

  • Voted
  1. Best Answer
    mrdenny
    2011-09-06T16:42:47+08:002011-09-06T16:42:47+08:00

    只要正确索引 where 子句,像 select count(*) 这样的事情就没问题。

    DTA 可能有用也可能没用。

    实际和估计的计划是你需要看的。它会告诉您是否缺少任何索引。使用的索引将在执行计划中。

    • 3
  2. Marian
    2011-09-06T23:21:53+08:002011-09-06T23:21:53+08:00

    首先要做的事情:如果你正在调查存储过程的性能问题,你必须有一个过程调用的基线,以及一个超过你期望性能的调用列表(还有一些你需要的统计数据:每天有多少次调用,如何许多都可以,而有多少很慢……等等)。

    使用跟踪可以最轻松地完成此操作。因此,在开始调查之前,我建议您对那个特定的过程调用进行跟踪,不仅如此,还要对系统的完整负载进行描述,因为当有一个批处理作业时,让一个过程变得疯狂是很自然的杀死系统。

    如果您还不了解所有这些信息,请阅读以下与 Profiler 和服务器跟踪相关的问题:

    • 在生产中的数据库上使用 SQL Profiler和
    • 新手 SQL Profiler 教程

    之后,您应该开始投入时间进行调整、阅读执行计划(也可以保存在跟踪中)并尝试重写您的代码。

    • 2

相关问题

  • 您如何针对繁重的 InnoDB 工作负载调整 MySQL?

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

  • 从 SQL Server 2008 降级到 2005

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

Sidebar

Stats

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

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

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

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +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
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +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