您现在的位置是:网站首页> 编程资料编程资料

SqlServer异常处理常用步骤_MsSql_

2023-05-26 366人已围观

简介 SqlServer异常处理常用步骤_MsSql_

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

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

ObjId

int

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

IndId

smallint

提示: 本文由整理自网络,如有侵权请联系本站删除!
本站声明:
1、本站所有资源均来源于互联网,不保证100%完整、不提供任何技术支持;
2、本站所发布的文章以及附件仅限用于学习和研究目的;不得将用于商业或者非法用途;否则由此产生的法律后果,本站概不负责!