参考教材:benet2.0数据库管理
在管理SQL数据库时,可能会有T-SQL语句执行错误,从而导致CPU的某个进程高利用率(严重时一直处于99%的状态),这样以来就导致了客户端无法正常访问数据库,那么如何找到这个进程并结束它呢?
这里就要用到一个SQL server为数据库管理员提供的一种特殊的诊断连接工具:专用管理员连接,又叫DAC,英文全称是:Dedicated Administrator Connection,该工具以供在无法与服务器建立标准连接时使用。
该工具的好处是:即使在SQL Server不响应标准连接请求时,管理员也可以使用这种连接访问SQL server,执行相关的诊断查询并解决问题。
注意:只有SQL serversysadmin角色的成员才可以使用DAC连接。默认情况下,只能从服务器上运行的客户端建立连接。
当从远程计算机使用DAC时,需要在“外围应用配置器”——“功能的外围应用配置器”中选择“启用远程DAC”,如下图:
clip_p_w_picpath002
打开该工具后,做如下操作:
clip_p_w_picpath004
然后做如下操作
clip_p_w_picpath006
下面就来演示一下如何使用DAC来杀掉占用资源过大的SQL Server进程。
(一)、单击开始——程序——Microsoft SQL Server 2005——SQL server Management Studio,连接到SQL sever的实例,然后单击“新建查询”,在查询窗口输入以下代码,该代码的作用是模拟服务器输入错误的T-SQL从而导致CPU异常的情况。输入代码后,单击“执行”,那CPU的使用率将高达99%,如图:
clip_p_w_picpath008
上图的字段解释:
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_p_w_picpath010
(三)、连接成功,进入窗口后,输入如图的代码:
代码解释:
select session_id,cpu_time
from sys.dm_exec_requests
#从系统表中选择查看进程IDCPU占用时间字段,以确定高进程所在的进程号
clip_p_w_picpath012
执行后,我们可以看到进程为55的,占用CPU资源过大
(四)、在管理员专用连接查询窗口杀掉此进程,输入kill 55,如图:
clip_p_w_picpath014
CPU工作恢复正常