利用SQL server 2005的DAC关掉高CPU利用率的进程

参考教材:benet2.0数据库管理
在管理 SQL 数据库时,可能会有 T-SQL 语句执行错误,从而导致 CPU 的某个进程高利用率(严重时一直处于 99% 的状态),这样以来就导致了客户端无法正常访问数据库,那么如何找到这个进程并结束它呢?
这里就要用到一个 SQL server 为数据库管理员提供的一种特殊的诊断连接工具:专用管理员连接,又叫 DAC ,英文全称是: Dedicated Administrator Connection ,该工具以供在无法与服务器建立标准连接时使用。
该工具的好处是:即使在 SQL Server 不响应标准连接请求时,管理员也可以使用这种连接访问 SQL server ,执行相关的诊断查询并解决问题。
注意:只有 SQL server sysadmin 角色的成员才可以使用 DAC 连接。默认情况下,只能从服务器上运行的客户端建立连接。
当从远程计算机使用 DAC 时,需要在“外围应用配置器”――“功能的外围应用配置器”中选择“启用远程 DAC ”,如下图:
clip_image002
打开该工具后,做如下操作:
clip_image004
然后做如下操作
clip_image006
下面就来演示一下如何使用 DAC 来杀掉占用资源过大的 SQL Server 进程。
(一)、单击开始――程序―― Microsoft SQL Server 2005 ―― SQL server Management Studio ,连接到 SQL sever 的实例,然后单击“新建查询”,在查询窗口输入以下代码,该代码的作用是模拟服务器输入错误的 T-SQL 从而导致 CPU 异常的情况。输入代码后,单击“执行”,那 CPU 的使用率将高达 99% ,如图:
clip_image008
上图的字段解释:
declare @a int; #declare 用来声明变量以及变量的属性,设置一个名称为 a 的变量,属性为 int 整数型
set @a=1; # 设置变量的值等于 1
while (@a=1) # a=1
begin # 开始执行下面的 T-SQL 语句
select * from sys.databases # 选择 sys.databases 表中的所有内容
-- do nothing
end
go # 开始执行
熟悉编程的朋友都知道,这是一个死循环,会反复的执行,从而导致 CPU 的高使用率,其实解决的方法很简单,只要在 end 前面一行加上 set @a=2 ,就可以跳出这个循环。
执行语句后,我们可以看到 CPU 异常,如图:
(二)、为了结束导致 CPU 异常的进程,我们需要进入 DAC 查询窗口。在工具栏中单击“数据库引擎查询”按钮,在“服务器名称”文本框输入 admin: 实例名称,如图:
clip_image010
(三)、连接成功,进入窗口后,输入如图的代码:
代码解释:
select session_id,cpu_time
from sys.dm_exec_requests
# 从系统表中选择查看进程 ID CPU 占用时间字段,以确定高进程所在的进程号
clip_image012
执行后,我们可以看到进程为 55 的,占用 CPU 资源过大
(四)、在管理员专用连接查询窗口杀掉此进程,输入 kill 55 ,如图:
clip_image014
CPU 工作恢复正常

本文出自 “曾垂鑫的技术专栏” 博客,谢绝转载!

你可能感兴趣的:(sql,cpu,server,利用率,DAC)