SqlServer异常处理常用步骤

前端之家收集整理的这篇文章主要介绍了SqlServer异常处理常用步骤前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

sql Server常见的问题主要是sql问题造成,常见的主要是cpu过高和阻塞。

cpu过高的问题

1、查询系统动态视图查询执行时间长的sql语句

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语句

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_who2与此类似

A.列出全部当前进程

以下示例使用没有参数的 sp_who 来报告所有当前用户

sql;"> USE master; GO EXEC sp_who; GO

B.列出特定用户的进程

以下示例显示如何通过登录名查看有关单个当前用户的信息。

sql;"> USE master; GO EXEC sp_who 'janetl'; GO

C.显示所有活动进程

sql;"> USE master; GO EXEC sp_who 'active'; GO

D.显示会话 ID 标识的特定进程

sql;"> 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

数据库引擎会话 ID 号。

dbid

数据库的标识号。 可以使用 DB_NAME() 函数来标识数据库

ObjId

数据库中使用 OBJECT_NAME() 函数来标识对象。 值为 99 时是一种特殊情况,表示用于记录数据库中页分配的其中一个系统页的锁。

IndId

类型

包括所有数据和索引)的锁。

数据库的锁。

数据库文件的锁。

sql Server 中此信息不完整。

sql Server 中此信息不完整。

Resource

Type

列标识的资源类型:

Type值:

Resource

文件,pagenumber 标识包含行的页,rid 标识页上的特定行。 fileid 与

sys.database_files

目录视图中的

file_id

列相匹配。

数据库引擎内部使用的十六进制数。

文件,pagenumber 标识页。

ObjId

列中标识了表。

dbid

列中标识了数据库

文件的标识符,与

sys.database_files

目录视图中的

file_id

列相匹配。

<哈希运算值>。

sql) 中 resource_description 列的说明。

sys.dm_tran_locks

动态管理视图。

sys.dm_tran_locks

动态管理视图。

模式

删除该架构元素。

修改。 必须由要更改指定资源架构的任何会话持有。 确保没有其他会话正在引用所指示的对象。

获取的更新锁。 用于防止一种常见的死锁,这种死锁在多个会话锁定资源以便稍后对资源进行更新时发生。

获取更新锁的资源进行共享访问。

获取排他锁的资源进行共享访问。

获取排他锁的资源持有的更新锁。

状态

获取锁。

DBCC INPUTBUFFER

显示从客户端发送到 Microsoft® sql Server™ 的最后一个语句。

语法

DBCC INPUTBUFFER (spid)

参数

spid

是 sp_who 系统存储过程的输出中所显示用户连接系统进程 ID (SPID)。

结果集

DBCC INPUTBUFFER 返回包含如下列的行集。

1- n = 参数

显示事件的头 255 个字符。

例如,当缓冲区中的最后事件是 DBCC INPUTBUFFER(11) 时,DBCC INPUTBUFFER 将返回以下结果集。

EventType Parameters EventInfo
-------------- ---------- ---------------------
Language Event 0 DBCC INPUTBUFFER (11)
(1 row(s) affected)

原文链接:https://www.f2er.com/mssql/62965.html

猜你在找的MsSQL相关文章