初涉SQL Server性能问题(1/4):服务器概况

原文:初涉SQL Server性能问题(1/4):服务器概况

当你作为DBA时,很多人会向你抱怨:“这个程序数据加载和蜗牛一样,你看看是不是服务器出问题了?”造成这个问题的原因有很多。可能是程序应用服务器问题,网络问题,程序实现方式问题,数据库服务器负荷过重。不管是哪个问题,数据库总是第一个被抱怨的。我们DBA的职责就是找出问题所在,并解决它们。

问题解决第一步,诊断分析:

1 SELECT
2 parent_node_id                  AS Node_Id,
3 COUNT(*)                        AS [No.of CPU In the NUMA],
4 SUM(COUNT(*)) OVER()            AS [Total No. of CPU],
5 SUM(runnable_tasks_count )      AS [Runnable Task Count],
6 SUM(pending_disk_io_count)                    AS [Pending disk I/O count],
7 SUM(work_queue_count)          AS  [Work queue count]
8 FROM sys.dm_os_schedulers WHERE status=‘VISIBLE ONLINE‘ GROUP BY parent_node_id

返回结果说明:

  • 如果返回的是一条记录,说明服务器不支持NUMA架构,否则记录数就是NUMA架构的节点数(NUMA:非均匀访存模型)。
  • Node_id:NUMA节点id。
  • No.of CPU in the NUMA:分配给NUMA节点的CPU数,或调度数( number of schedulers)。
  • Total No. of CPU:服务器上可用CPU总数。
  • Runnable Task Count:在可运行队列里,等待被重现调度的,用于分配任务(tasks)的工作者(workers)数。即,可运行队列里请求数。
  • Pending disk I/O count:等待被完成的等待IO数。每个调度都有一个等待IO清单,用于判断它们在上下文切换时是否完成。当请求被插入时,这个数字会增加。请求完成后,数字会减少。
  • Work queue count:等待队列里的任务数。这些任务等待工作者拿走。

我会把这个脚本的输出结果存到一张表,并设置为计划任务每10分钟运行一次,收集运行2天。这样我们对服务器的运行状况就有了基本的了解。在我测试的服务器上,当Runnable Task Count一直在10的时候,用户就是抱怨服务器慢!正常情况,每个节点的这个数字应该低于10。这就给了我们当前系统运行的大致情况。如果这一步的输出结果是正常的,我们就可以排除数据库服务器的问题了,响应慢的问题可能是我们不能控制的阻塞造成的,或者只是部分会话响应慢,而不是整个服务器慢。

这就是我们第1步的问题分析诊断方法,接下来的文章会具体解释后续该如何处理。

附图2张,帮助大家理解任务(tasks)、工作者(works)、调度(schedulers)之间的关系。

对于每个CPU,SQLSERVER都会有一个scheduler与之对应。在每个scheduler里,会有若干个worker,对应于每个线程。在客户端发过来请求之后,SQL会将其分解成一个或多个task。根据每个scheduler的繁忙程度,task会被分配到某个scheduler上。如果scheduler里有空闲的worker,task就会被分配到某个worker上。如果没有,scheduler会创建新的worker,供task使用。如果scheduler里的worker已经到了他的上限值,而他们都有task要运行,那么新的task只好进入等待worker的状态。

时间: 2024-10-24 14:37:55

初涉SQL Server性能问题(1/4):服务器概况的相关文章

初涉SQL Server性能问题(4/4):列出最耗资源的会话

原文:初涉SQL Server性能问题(4/4):列出最耗资源的会话 在上3篇文章里,我们讨论了列出反映服务器当前状态的不同查询. 初涉SQL Server性能问题(1/4):服务器概况 初涉SQL Server性能问题(2/4):列出等待资源的会话 初涉SQL Server性能问题(3/4):列出阻塞的会话 这篇文章我们看下从计划缓存里列出执行状态. 1 /*********************************************************************

初涉SQL Server性能问题(2/4):列出等待资源的会话

原文:初涉SQL Server性能问题(2/4):列出等待资源的会话 在初涉SQL Server性能问题(1/4)里,我们知道了如何快速检查服务器实例上正运行的任务数和IO等待的任务数.这个是轻量级的脚本,不会给服务器造成任何压力,即使服务器在高负荷下,也可以正常获得结果. 问题检测的第2步是获取在进行任何资源等待的会话.下面的脚本会帮助我们获得这些信息.这个查询需要预建立一个函数,如果会话是由SQL Server代理启动的话,会显示具体的作业名. 1 /********************

初涉SQL Server性能问题(3/4):列出阻塞的会话

原文:初涉SQL Server性能问题(3/4):列出阻塞的会话 在 初涉SQL Server性能问题(2/4)里,我们讨论了列出等待资源或正运行的会话脚本.这篇文章我们会看看如何列出包含具体信息的话阻塞会话清单. 1 /******************************************************************************************/ 2 CREATE FUNCTION [dbo].dba_GetStatementForSpid

初涉SQL Server性能问题(1/4)

当你作为DBA时,很多人会向你抱怨:“这个程序数据加载和蜗牛一样,你看看是不是服务器出问题了?”造成这个问题的原因有很多.可能是程序应用服务器问题,网络问题,程序实现方式问题,数据库服务器负荷过重.不管是哪个问题,数据库总是第一个被抱怨的.我们DBA的职责就是找出问题所在,并解决它们. 问题解决第一步,诊断分析: 1 SELECT 2 parent_node_id AS Node_Id, 3 COUNT(*) AS [No.of CPU In the NUMA], 4 SUM(COUNT(*))

SQL SERVER性能分析--死锁检测数据库阻塞语句

工作中数据库经常出现内存,找了篇文章 参照CSDN,中国风(Roy)一篇死锁文章 阻塞:其中一个事务阻塞,其它事务等待对方释放它们的锁,同时会导致死锁问题. 整理人:中国风(Roy) 参照Roy_88的博客 http://blog.csdn.net/roy_88/archive/2008/07/21/2682044.aspx 日期:2008.07.20 ************************************************************************

SQL Server 性能调优3 之索引(Index)的维护

SQL Server 性能调优3 之索引(Index)的维护 热度1 评论 16 作者:溪溪水草 前言 前一篇的文章介绍了通过建立索引来提高数据库的查询性能,这其实只是个开始.后续如果缺少适当的维护,你先前建立的索引甚至会成为拖累,成为数据库性能的下降的帮凶. 查找碎片 消除碎片可能是索引维护最常规的任务,微软官方给出的建议是当碎片等级为 5% - 30% 之间时采用 REORGANIZE 来“重整”索引,如果达到 30% 以上则使用 REBUILD 来“重建”索引.决定采用何种手段和操作时机可

SQL Server 性能调优(一)——从等待状态判断系统资源瓶颈

原文:SQL Server 性能调优(一)--从等待状态判断系统资源瓶颈 通过DMV查看当时SQL SERVER所有任务的状态(sleeping.runnable或running) 2005.2008提供了以下三个视图工详细查询: DMV 用处 Sys.dm_exec_requests 返回有关在SQL Server中执行的每个请求的信息,包括当前的等待状态 Sys.dm_exec_sessions 对于每个通过身份验证的会话都返回相应的一行.此时图是服务器范围的视图.此视图首先可以查到服务器负

SQL Server 性能优化(一)——简介

原文:SQL Server 性能优化(一)--简介 一.性能优化的理由: 听起来有点多余,但是还是详细说一下: 1.节省成本:这里的成本不一定是钱,但是基本上可以变相认为是节省钱.性能上去了,本来要投入的硬件就可以减缓投入,从另外一个角度看来它就是节省了钱. 2.增加效率:对于客户来说,性能上去了,他们的工作效率也高了. 3.降低挫折感:性能底下,客户抱怨,无疑是对自己心灵上的打击. 二.性能误区: 性能误区 误区 现实 如果处理器使用率很高,那么需要添加更快的处理器 某一部分导致了性能问题 8

10.监视SQL Server性能

数据库管理员的主要责任之一是持续监视SQL Server性能.之所以要进行监视,原因 有多种,包括性能.存储状态.安全性和标准符合程度等.虽然很多此类监视可以自动完 成,但在大多数情况下,数据库管理员必须以系统的方法说明监视的结果并对其采取行动. 监视工作需要持续进行,它可能变得非常复杂.知道监视什么.什么时候监视以及什么是 可接受的和不可接受的行为,这些都可能成为一项全职性工作的内容.使事情变得更困难 的是,每个SQL Server安装都是不同的,所以很难给出一个关于可接受和不可接受性能的 指