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
    • 最新
    • 标签
主页 / server / 问题 / 626352
Accepted
CWilliams
CWilliams
Asked: 2014-09-05 12:22:39 +0800 CST2014-09-05 12:22:39 +0800 CST 2014-09-05 12:22:39 +0800 CST

SQL Server 2005 全球减速

  • 772

两天前,我们的生产服务器遭受了严重的减速,主要症状是异常大量的请求正在遭受 SQLTimeouts。我将快速描述我们的设置、我调查的内容、我们的解决方法,然后提出我的问题。

我们的设置

一对服务器托管我们的 SAS 应用程序的这个分支。一个是在 IIS 上运行多个应用程序的应用程序服务器,另一个是运行 SQL Server 2005 的 Windows Server 2008 机器。SQL 托管在 100 到 200 个数据库之间。

问题/调查

服务几乎停止了。一些请求通过,但大多数遭受 SQL 超时。SQL 机器 CPU 和 RAM 看起来不错,平均大约 25% 的 CPU 工作负载和 85% 的 RAM。当时我没想过要检查磁盘活动,因为我直接去了“EXEC sp_who2”

结果显示数百个任务被 ID 123 阻塞,它本身和一百个其他任务被 ID 456 阻塞。正常执行通常根本没有阻塞任务。当我在 15-20 秒后重新运行 sp_who2 时,会弹出不同的阻塞 ID,但阻塞/阻塞任务的数量似乎保持不变。(由于紧急模式,没有计算组)

大多数任务都被诸如“SELECT INTO”或“CREATE INDEX on temptable”之类的语句阻塞。

解决方法

杀死 SQL 进程并重新启动它以恢复服务。放缓没有再次出现,但我们知道我们处于危险之中。

我的问题

我能做些什么来解决这个问题,最好是在它再次发生之前?

子问题:

  • 在正常活动期间我可以调查其他路径吗?
  • 如果/当问题再次发生时,我应该收集哪些信息?(需要快速获取,因为这意味着我们将再次遇到服务中断)

到目前为止我做了什么

从症状来看,我们怀疑问题是 tempdb 上的某种争用。(另一个症状是在问题期间右键单击 tempdb 以查看属性会在片刻后产生错误)

没有日志表明 tempdb 上发生了自动增长事件,但据我所知,没有记录自动增长成功,只有失败。

从那时起,我已经阅读了很多关于 tempdb 争用的不同信息来源,不仅限于但包括:

http://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/ http://www.sqlservercentral.com/blogs/robert_davis/2010/03/ 05/Breaking-Down-TempDB-Contention/

据我所知,最好的做法是设置初始大小的 tempdb 文件,并且每个内核有一个,最多 8 个文件。我们计划尽快将其落实到位(8 个内核,因此 8 个文件),因为这是最佳实践。它们都将在同一个硬盘上(目前),但我们认为最坏的情况是没有改善,最好的情况是我们获得了逻辑争用瓶颈和磁盘 I/O 瓶颈之间的差异。

但是,我们无法确定与我们遇到的问题的相关性。据我了解,拆分为多个临时文件将有助于“PAGELATCH_XX”类型的等待,但在正常活动期间运行 Paul S. Randal 的查询(参见第一个发布的链接),不存在这种类型的等待。我在正常活动期间看到的前 3 个是:

CXPACKET 68.63%
LATCH_EX 18.46%
PAGEIOLATCH_SH 4.35%

我无法知道减速期间发生了什么类型的阻塞,因为那时我们没有所有这些信息。

sql-server-2005
  • 1 1 个回答
  • 43 Views

1 个回答

  • Voted
  1. Best Answer
    CWilliams
    2014-09-09T05:43:59+08:002014-09-09T05:43:59+08:00

    这个问题最终在我发布这个问题后的第二天再次出现。

    运行 Paul S. Randal 的查询,我很快发现许多 PAGELATCH_XX 阻塞等待正在进行,因此使用 sp_who2 我能够找到罪魁祸首数据库,并且只从 Web 服务器重新启动相关的客户端应用程序池,作为一种不那么苛刻的解决方法恢复服务。

    我们还能够跟踪实际操作,这些操作完成了他们以前所做的更多 tempdb 工作,并将寻求以不同的角度解决这个问题。

    解决方案

    我们已经按照最佳实践建议将 tempdb 文件拆分为多个文件,因为似乎这是解决我的问题的解决方案所发生的正确类型的争用。

    • 0

相关问题

  • 为什么当我尝试删除数据库时 SQL Server 2005 挂起?

  • SQL 洗衣清单

  • 如何提高 SQL Server 镜像性能

  • 聚集索引与非聚集索引?

  • 安全地授予对 SQL 2005 复制监视器的访问权限以创建快照

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve