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

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

 SELECT
parent_node_id AS Node_Id,
COUNT(*) AS [No.of CPU In the NUMA],
SUM(COUNT(*)) OVER() AS [Total No. of CPU],
SUM(runnable_tasks_count ) AS [Runnable Task Count],
SUM(pending_disk_io_count) AS [Pending disk I/O count],
SUM(work_queue_count) AS [Work queue count]
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的状态。

参考文章:

http://www.sqlservercentral.com/blogs/practicalsqldba/2012/09/18/sql-server-approaching-database-server-performance-issues/

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

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

    在上3篇文章里,我们讨论了列出反映服务器当前状态的不同查询. 初涉SQL Server性能问题(1/4):服务器概况 初涉SQL Server性能问题(2/4):列出等待资源的会话 初涉SQL Ser ...

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

    在初涉SQL Server性能问题(1/4)里,我们知道了如何快速检查服务器实例上正运行的任务数和IO等待的任务数.这个是轻量级的脚本,不会给服务器造成任何压力,即使服务器在高负荷下,也可以正常获得结 ...

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

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

  4. SQL Server 无法连接到服务器。SQL Server 复制需要有实际的服务器名称才能连接到服务器。请指定实际的服务器名称。

    异常处理汇总-数据库系列  http://www.cnblogs.com/dunitian/p/4522990.html SQL性能优化汇总篇:http://www.cnblogs.com/dunit ...

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

    原文:SQL Server 性能优化(一)--简介 一.性能优化的理由: 听起来有点多余,但是还是详细说一下: 1.节省成本:这里的成本不一定是钱,但是基本上可以变相认为是节省钱.性能上去了,本来要投 ...

  6. 影响Sql server性能的因素

    目前本人在看<SQL Server性能调优实战> ,以下内容是本人看书笔记 数据库性能取决于各方面综合因素: 硬件,操作系统,软件 硬件:内存,CPU,磁盘 当服务器的物理内存不足时,会产 ...

  7. SQL Server 性能优化详解

    故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户, ...

  8. SQL SERVER性能优化综述

    SQL SERVER性能优化综述 一个系统的性能的提高,不单单是试运行或者维护阶段的性能调优的任务,也不单单是开发阶段的事情,而是在整个软件生命周期都需要注意,进行有效工作才能达到的.所以我希望按照软 ...

  9. [转]SQL Server 性能调优(内存)

      存储引擎自调整 sql server 是如何分配内存的 32bit地址空间的限制 用户模式vas分配和virtualalloc 非boffer pool 分配内存(保留内存) VAS调整 AWE ...

随机推荐

  1. Javascript中的Prototype到底是啥

    Javascript也是面向对象的语言,但它是一种基于原型Prototype的语言,而不是基于类的语言.在Javascript中,类和对象看起来没有太多的区别. 通常,这样创建一个对象: functi ...

  2. Docker实践(1)—入门

    tutorial centos6.5环境. # yum install docker-io -y 会依赖安装libcgroup,lxc,lxc-libs 启动docker # service dock ...

  3. LeetCode:Roman to Integer,Integer to Roman

    首先简单介绍一下罗马数字,一下摘自维基百科 罗马数字共有7个,即I(1).V(5).X(10).L(50).C(100).D(500)和M(1000).按照下述的规则可以表示任意正整数.需要注意的是罗 ...

  4. eoe移动开发社区创始人兼CEO靳岩:开发者缺极客精神

    (国内知名Android开发论坛eoe开发者社区推荐:http://www.eoeandroid.com/)       [媒体专稿]移动互联网在中国的深入发展已经有5.6个年头,从当初苹果推出iPh ...

  5. linux 文件夹说明,用户添加删除,不熟悉的命令

    一.Linux 根目录下的文件夹说明 usr 程序默认安装路径,相当于windows的 program 附显示当前所处位置:pwd 二.用户 用户添加:useradd 用户名 passwd 用户名 u ...

  6. 【转】20个Cydia常见错误问题解决方法汇总

    对于已经越狱的用户来说,经常会使用Cydia来安装一些酷炫或实用插件,但是有时候它总是会出现一些问题,以下收集了在Cydia经常遇到的问题,供大家参考: 一.主屏幕没有 Cydia 图标 1.设备需已 ...

  7. IIS兼容模式设置

    X-UA-Compatible IE=EmulateIE7 来自为知笔记(Wiz)

  8. SQL Server への接続を許可するファイアーウォール設定

    netsh advfirewall firewall add rule name="SQL Server Browser" protocol=UDP dir=in localpor ...

  9. ArcGIS与SuperMap的使用比较(1)

    用了超过6年的超图产品了,因此对超图的很多特性比较熟悉,去年开始接触ARCGIS,并用来研发了一些新产品,因此对于两个GIS平台有些感受,记录如下: 比较版本:ARCGIS10.1与SuperMap ...

  10. [原创]Java中的字符串比较,按照使用习惯进行比较

    java中的字符串比较一般可以采用compareTo函数,如果a.compareTo(b)返回的是小于0的数,那么说明a的unicode编码值小于b的unicode编码值. 但是很多情况下,我们开发一 ...