当前位置: 首页 > 面试题库 >

SQL Server 2005存储过程性能问题

王念
2023-03-14
问题内容

我有以下问题:从我的应用程序一次调用存储的proc时,有时(例如1000次调用中有1次),需要10到30秒才能完成。通常,存储过程在不到一秒钟的时间内运行。这是一个非常简单的proc,只需单击一次即可将几个表联系在一起。所有表名都设置有(NOLOCK)提示,因此它可能没有锁定。索引也就位,否则它会一直很慢。

问题是,无论它运行sproc多少次,我都无法在SSMS中复制此问题(因为它始终运行亚秒级),但是当我将探查器指向正在运行我的应用程序的用户时,我看到了问题。SSMS中的查询计划似乎正确,但是问题仍然存在。

我从这里去哪里?如何调试此问题?


问题答案:
  • 在数据库上自动增长?检查SQL错误日志中的消息
  • 由于插入的记录而导致页面拆分?使用DBCC SHOWCONTIG检查表碎片
  • 防病毒扫描?别。
  • 统计数据过时了吗?不要依赖于变化很大的表的自动更新统计信息。
  • 不要排除客户端或它们之间的网络问题。
  • 使用持续时间过滤器运行事件探查器,仅捕获持续时间> 10秒的事件,在参数,客户端,一天中的时间中查找模式。


 类似资料:
  • 问题内容: 最近在我的日常工作中被指示,关于存储过程的任何注释都必须不存在于存储过程中,而必须使用扩展属性。 过去我们使用过类似的方法。 这样,只要有人在SSMS中打开该过程,他们就会看到该注释,而在过程中还存在其他注释,以记录我们的过程。现在我不知道与此有关的任何性能/内存问题。但是,我们有些人坚持要这样做。 我无法找到任何文档来证明或否认此类注释存在性能和/或内存问题。 所以我的问题是,有人知

  • 数据访问层支持存储过程调用,调用数据库存储过程使用下面的方法: $resultSet = Db::query('call procedure_name'); foreach ($resultSet as $result) { } 存储过程返回的是一个数据集,如果你的存储过程不需要返回任何的数据,那么也可以使用execute方法: Db::execute('call procedure_name'

  • 问题内容: 我偶然发现了一个问题,无法自己解决。希望有人可以帮助我解决它。 因此,我在SQL Server 2005数据库中有一个简单的存储过程 以及在应用程序中带有和控件的asp.net页(VS2008) 如您所见,代码很简单。但是,如果我不麻烦在url上指定大头针(而不是)或指定空行(),则不会调用存储过程(我使用SQL Server Profiler对其进行了检查)。 而且,如果我用一个简单

  • 问题内容: 我确实在sp上使用的表上创建了两个新索引。新结果表明,在有问题的连接部分,扫描被转换为寻找。我认为搜索比扫描操作更好。另一方面,该时间与没有新索引时所花费的时间大致相同。 很明显,在将新版本sp投入生产之前,我如何才能感到满意。 例如,更改sp的参数可以帮助我查看新版本是否比旧版本快,或者还有什么? 问候bk 问题答案: 需要做的几件事: 1)通过在每次测试运行后清除数据和执行计划缓存

  • 问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’

  • 我们前面所学习的 MySQL 语句都是针对一个表或几个表的单条 SQL 语句,但是在数据库的实际操作中,经常会有需要多条 SQL 语句处理多个表才能完成的操作。 例如,为了确认学生能否毕业,需要同时查询学生档案表、成绩表和综合表,此时就需要使用多条 SQL 语句来针对这几个数据表完成处理要求。 存储过程是一组为了完成特定功能的 SQL 语句集合。使用存储过程的目的是将常用或复杂的工作预先用 SQL