处理SQL Server 异常常用步骤
处理SQL Server 异常常用步骤
SQL Server常见的问题主要是SQL问题造成,常见的主要是CPU过高和阻塞。
一、CPU过高的问题
1、查询系统动态视图查询执行时间长的sql语句
WITH ProcessCTE(blocked) AS
(
SELECT spid FROM sys.sysprocesses WHERE cpu>500
)
SELECT distinct a.*
FROM (
SELECT TEXT,AA.* FROM sys.sysprocesses AA
CROSS APPLY sys.dm_exec_sql_text(AA.sql_handle)
) a
JOIN ProcessCTE bucte WITH(NOLOCK)
ON bucte.blocked=a.spid
--where loginame = 'TCScenery'
ORDER BY a.CPU
二、阻塞问题
1、查询系统动态视图查询阻塞的sql语句
WITH ProcessCTE(blocked) AS
(
SELECT blocked FROM sys.sysprocesses WHERE blocked>0
union
SELECT blocked FROM sys.sysprocesses WHERE blocked>0
)
SELECT distinct a.*
FROM (
SELECT TEXT,AA.* FROM sys.sysprocesses AA
CROSS APPLY sys.dm_exec_sql_text(AA.sql_handle)
) a
JOIN ProcessCTE bucte WITH(NOLOCK)
ON bucte.blocked=a.spid
ORDER BY a.blocked
2、使用系统自带的存储过程
Sp_who2和sp_lock以及使用dbcc inputbuffer(spid) 也可以用来分析阻塞
sp_who可以返回如下信息: (可选参数LoginName, 或active代表活动会话数)
Spid         (系统进程ID)
status      (进程状态)
loginame  (用户登录名)
hostname(用户主机名)
blk           (阻塞进程的SPID)
dbname   (进程正在使用的数据库名)
Cmd        (当前正在执行的命令类型)
sp_who2除了显示上面sp_who的输出信息外,还显示下面的信息:  (可选参数LoginName, 或active代表活动会话数)
CPUTime           (进程占用的总CPU时间)
DiskIO            
 (进程对磁盘读的总次数)
LastBatch         (客户最后一次调用存储过程或者执行查询的时间)
ProgramName  (用来初始化连接的应用程序名称,或者主机名)
下面是sp_who的用法,sp_who2与此类似
A.列出全部当前进程
以下示例使用没有参数的 sp_who 来报告所有当前用户。
USE master;
GO
EXEC
sp_who;
GO
B.列出特定用户的进程
以下示例显示如何通过登录名查看有关单个当前用户的信息。
USE master;
GO
EXEC sp_who
'janetl';
GO
C.显示所有活动进程
USE master;
GO
EXEC sp_who
'active';
GO
D.显示会话 ID 标识的特定进程
USE master;
GO
EXEC sp_who
'10' --specifies the process_id;
GO
sp_lock用法说明
sp_lock [ [ @spid1 = ]
'session ID1' ] [ , [@spid2 = ] 'session ID2' ][ ; ]
[ @spid1 = ] 'session ID1'
来自用户想要锁定其信息的 sys.dm_exec_sessions 的数据库引擎会话 ID 号。 session
ID1 的数据类型为 int,默认值为 NULL。 执行 sp_who 可获取有关该会话的进程信息。 如果未指定会话 ID1,则显示有关所有锁的信息。
[ @spid2 = ] 'session ID2'
来自 sys.dm_exec_sessions 的另一个数据库引擎会话 ID 号,该会话 ID 号可能与 session ID1 同时具有锁,并且用户也需要其有关信息。 session
ID2 的数据类型为 int,默认值为 NULL。
在 sp_lock 结果集中,由 @spid1 和 @spid2 参数指定的会话所持有的每个锁都对应一行。 如果既未指定 @spid1 又未指定 @spid2,则结果集将报告当前在数据库引擎实例中处于活动状态的所有会话的锁。
| 列名 | 数据类型 | 说明 | 
| spid | smallint | 请求锁的进程的数据库引擎会话 ID | 
| dbid | smallint | 保留锁的数据库的标识号。 可以使用 | 
| ObjId | int | 持有锁的对象的标识号。 可以在相关数据库中使用 OBJECT_NAME() 函数来标识对象。 值为 99 时是一种特殊情况,表示用于记录数据库中页分配的其中一个系统页的锁。 | 
| IndId | smallint | 持有锁的索引的标识号。 | 
| 类型 | nchar(4) | 锁的类型: | 
| RID = 表中单个行的锁,由行标识符 | ||
| KEY = 索引内保护可串行事务中一系列键的锁。 | ||
| PAG = 数据页或索引页的锁。 | ||
| EXT = 对某区的锁。 | ||
| TAB = 整个表(包括所有数据和索引)的锁。 | ||
| DB = 数据库的锁。 | ||
| FIL = 数据库文件的锁。 | ||
| APP = 指定的应用程序资源的锁。 | ||
| MD = 元数据或目录信息的锁。 | ||
| HBT = 堆或 B 树索引的锁。 | ||
| AU = 分配单元的锁。 在 SQL | ||
| Resource | nchar(32) | 标识被锁定资源的值。 值的格式取决于 Type 列标识的资源类型: | 
| Type 值:Resource 值 | ||
| RID:格式为 | ||
| KEY:数据库引擎内部使用的十六进制数。 | ||
| PAG:格式为 | ||
| EXT:标识区中的第一页的数字。 该数字的格式为 fileid:pagenumber。 | ||
| TAB:没有提供信息,因为已在 ObjId 列中标识了表。 | ||
| DB:没有提供信息,因为已在 dbid 列中标识了数据库。 | ||
| FIL:文件的标识符,与 sys.database_files 目录视图中的 file_id 列相匹配。 | ||
| APP:被锁定的应用程序资源的唯一标识符。 格式为 DbPrincipleId:<资源字符串的前 2 个到 16 个字符><哈希运算值>。 | ||
| MD:随资源类型而变化。 有关详细信息,请参阅 | ||
| HBT:没有提供任何信息。 请改用 sys.dm_tran_locks 动态管理视图。 | ||
| AU:没有提供任何信息。 请改用 sys.dm_tran_locks 动态管理视图。 | ||
| 模式 | nvarchar(8) | 所请求的锁模式。 可以是: | 
| NULL = 不授予对资源的访问权限。 用作占位符。 | ||
| Sch-S = 架构稳定性。 确保在任何会话持有对架构元素(例如表或索引)的架构稳定性锁时,不删除该架构元素。 | ||
| Sch-M = 架构修改。 必须由要更改指定资源架构的任何会话持有。 确保没有其他会话正在引用所指示的对象。 | ||
| S = 共享。 授予持有锁的会话对资源的共享访问权限。 | ||
| U = 更新。 指示对最终可能更新的资源获取的更新锁。 用于防止一种常见的死锁,这种死锁在多个会话锁定资源以便稍后对资源进行更新时发生。 | ||
| X = 排他。 授予持有锁的会话对资源的独占访问权限。 | ||
| IS = 意向共享。 指示有意将 S 锁放置在锁层次结构中的某个从属资源上。 | ||
| IU = 意向更新。 指示有意将 U 锁放置在锁层次结构中的某个从属资源上。 | ||
| IX = 意向排他。 指示有意将 X 锁放置在锁层次结构中的某个从属资源上。 | ||
| SIU = 共享意向更新。 指示对有意在锁层次结构中的从属资源上获取更新锁的资源进行共享访问。 | ||
| SIX = 共享意向排他。 指示对有意在锁层次结构中的从属资源上获取排他锁的资源进行共享访问。 | ||
| UIX = 更新意向排他。 指示对有意在锁层次结构中的从属资源上获取排他锁的资源持有的更新锁。 | ||
| BU = 大容量更新。 用于大容量操作。 | ||
| RangeS_S = 共享键范围和共享资源锁。 指示可串行范围扫描。 | ||
| RangeS_U = 共享键范围和更新资源锁。 指示可串行更新扫描。 | ||
| RangeI_N = 插入键范围和 Null 资源锁。 | ||
| RangeI_S = 键范围转换锁。 由 | ||
| RangeI_U = 由 RangeI_N 和 U 锁的重叠创建的键范围转换锁。 | ||
| RangeI_X = 由 RangeI_N 和 X 锁的重叠创建的键范围转换锁。 | ||
| RangeX_S = 由 RangeI_N 和 RangeS_S 锁的重叠创建的键范围转换锁 。 | ||
| RangeX_U = 由 RangeI_N 和 RangeS_U 锁的重叠创建的键范围转换锁。 | ||
| RangeX_X = 排他键范围和排他资源锁。 这是在更新范围中的键时使用的转换锁。 | ||
| 状态 | nvarchar(5) | 锁的请求状态: | 
| CNVRT:锁正在从另一种模式进行转换,但是转换被另一个持有锁(模式相冲突)的进程阻塞。 | ||
| GRANT:已获取锁。 | ||
| WAIT:锁被另一个持有锁(模式相冲突)的进程阻塞。 | 
DBCC INPUTBUFFER
显示从客户端发送到 Microsoft®
SQL Server™ 的最后一个语句。
语法
DBCC INPUTBUFFER (spid)
参数
spid
是 sp_who 系统存储过程的输出中所显示的用户连接系统进程 ID (SPID)。
结果集
DBCC INPUTBUFFER 返回包含如下列的行集。
| 列名 | 数据类型 | 描述 | 
| EventType | nvarchar(30) | 事件类型,例如:RPC、语言或无事件。 | 
| Parameters | Int | 0 = 文本 | 
| EventInfo | nvarchar(255) | 对于 RPC 的 EventType,EventInfo 仅包含过程名。对于语言或无事件的 EventType,仅显示事件的头 255 个字符。 | 
例如,当缓冲区中的最后事件是 DBCC
INPUTBUFFER(11) 时,DBCC INPUTBUFFER 将返回以下结果集。
EventType Parameters EventInfo
--------------
---------- ---------------------
Language Event 0 DBCC INPUTBUFFER (11)
(1 row(s) affected)
以上关于SP_who、sp_who2、sp_lock以及dbcc
inputbuffer均可从msdn官网获得http://msdn.microsoft.com/en-us/library/ms187961.aspx。
处理SQL Server 异常常用步骤的更多相关文章
- SQL Server中常用的SQL语句(转):
		SQL Server中常用的SQL语句 转自:http://www.cnblogs.com/rainman/archive/2013/05/04/3060428.html 1.概述 名词 笛卡尔积.主 ... 
- 第二篇 SQL Server代理作业步骤和子系统
		本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作). ... 
- 【译】第二篇 SQL Server代理作业步骤和子系统
		本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作). ... 
- SQL Server中常用的SQL语句
		1.概述 名词 笛卡尔积.主键.外键 数据完整性 实体完整性:主属性不能为空值,例如选课表中学号和课程号不能为空 参照完整性:表中的外键取值为空或参照表中的主键 用户定义完整性:取值范围或非空限制,例 ... 
- MS SQL Server时间常用函数
		SQLServer时间日期函数详解,SQLServer,时间日期, 1. 当前系统日期.时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基础 ... 
- SQL Server调试常用参数
		SQL Server 清除缓存: DBCC DROPCLEANBUFFERS 从缓冲池中删除所有清除缓冲区. DBCC FREEPROCCACHE 从过程缓存中删除所有元素. DBCC FREESYS ... 
- Sql server 经典常用函数
		..STUFF()用另一子串替换字符串指定位置.长度的子串.STUFF (<character_expression1>, <start_ position>, <len ... 
- SQL Server中常用全局变量介绍
		在SQL Server中,全局变量是一种特殊类型的变量,服务器将维护这些变量的值.全局变量以@@前缀开头,不必进行声明,它们属于系统定义的函数.下表就是SQL Server中一些常用的全局变量. 全局 ... 
- SQL Server系统常用存储过程
		SQL Server系统存储过程也是好几百个,算了,还是写几个常用的. 1.sp_help 查询表的信息 执行存储过程: sp_help Person 显示结果如下: 妈了个B,有了这张图,你还不懂怎 ... 
随机推荐
- HDU 4292 Food (拆点最大流)
			题意:N个人,F种食物,D种饮料,给定每种食物和饮料的量.每个人有自己喜欢的食物和饮料,如果得到自己喜欢的食物和饮料才能得到满足.求最大满足的人数. 分析:如果只是简单地N个人选择F种食物的话可以用二 ... 
- Unity,基于layer的碰撞配置
			可以通过给对象指定layer,实现相同.不同layer之间碰撞的自由配置,比如我们想让怪物之间不碰撞,英雄和怪物之间碰撞,我们就可以这样指定,去掉enemies之间的勾选. 打开方式-edit-> ... 
- 使用阿里的maven库
			快使用阿里云的maven仓库 自从开源中国的maven仓库挂了之后就一直在用国外的仓库,慢得想要砸电脑的心都有了.如果你和我一样受够了国外maven仓库的龟速下载?快试试阿里云提供的maven仓库,从 ... 
- linux---(6/27)tr命令和sed命令详解
			Tr命令: tr是简单的单个“字符”处理工具,而sed是功能非常强大的“字符串”处理工具. 用于查询,字符串2用于处理各种转换.tr刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始 ... 
- Maven:Eclipse上Maven的配置
			Eclipse上Maven的配置: 步骤: ①Maven下载地址: http://maven.apache.org/download.cgi# ②解压apache-maven-3.5.0-bin.zi ... 
- Spring_管理 Bean 的生命周期
			beans-cycle.xml <?xml version="1.0" encoding="UTF-8"?><beans xmlns=&quo ... 
- VC++6.0调试简单快捷键
			编译——F7 重新编译——Ctrl+F7 设置断点 ——F9 取消断点——F9 删除所有断点——Ctrl+Shift+F9 开始调试——F5 进行下一次调试——F5 停止调试——Shift+F5 逐过 ... 
- 关于log4j.properties例子:DailyRollingFileAppender
			package com.v512.log4j; import org.apache.log4j.Logger; public class HelloLog4J { // 构造记录器,形参是记录器所在的 ... 
- NumPy Matplotlib库
			NumPy - Matplotlib Matplotlib 是 Python 的绘图库. 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案. 它也可以和图形工具包一起使用,如 ... 
- 排序方法整理Java - 冒泡排序、选择排序、插入排序、快速排序
			/** * 排序方法整理 * @author zhyea * */ public class Sort { /** * 冒泡排序,从小到大. * 冒泡排序是比较相邻的两个元素,若顺序错误,则执行交换. ... 
