iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >SqlServer中怎么实现异常处理
  • 439
分享到

SqlServer中怎么实现异常处理

2024-04-02 19:04:59 439人浏览 安东尼
摘要

sqlServer中怎么实现异常处理,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。SQL Server常见的问题主要是SQL问题造成,常见的主

sqlServer中怎么实现异常处理,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

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;GoEXEC sp_who;GO

B.列出特定用户的进程

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

USE master;GOEXEC sp_who 'janetl';GO

C.显示所有活动进程

USE master;GOEXEC sp_who 'active';GO

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

USE master;GOEXEC 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

持有锁的索引的标识号。

类型

nchar(4)

锁的类型:

RID = 表中单个行的锁,由行标识符 (RID) 标识。

KEY = 索引内保护可串行事务中一系列键的锁。

PAG = 数据页或索引页的锁。

EXT = 对某区的锁。

TAB = 整个表(包括所有数据和索引)的锁。

DB = 数据库的锁。

FIL = 数据库文件的锁。

APP = 指定的应用程序资源的锁。

MD = 元数据或目录信息的锁。

HBT = 堆或 B 树索引的锁。 在 SQL Server 中此信息不完整。

AU = 分配单元的锁。 在 SQL Server 中此信息不完整。

Resource

nchar(32)

标识被锁定资源的值。 值的格式取决于Type列标识的资源类型:

Type值:Resource

RID:格式为 fileid:pagenumber:rid 的标识符,其中 fileid 标识包含页的文件,pagenumber 标识包含行的页,rid 标识页上的特定行。 fileid 与sys.database_files目录视图中的file_id列相匹配。

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

PAG:格式为 fileid:pagenumber 的数字,其中 fileid 标识包含页的文件,pagenumber 标识页。

EXT:标识区中的第一页的数字。 该数字的格式为 fileid:pagenumber。

TAB:没有提供信息,因为已在ObjId列中标识了表。

DB:没有提供信息,因为已在dbid列中标识了数据库。

FIL:文件的标识符,与sys.database_files目录视图中的file_id列相匹配。

APP:被锁定的应用程序资源的唯一标识符。 格式为 DbPrincipleId:<资源字符串的前 2 个到 16 个字符><哈希运算值>。

MD:随资源类型而变化。 有关详细信息,请参阅 sys.dm_tran_locks (Transact-SQL) 中 resource_description 列的说明。

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_N 和 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&reg; SQL Server™ 的最后一个语句。

语法

DBCC INPUTBUFFER (spid)

参数

spid

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

结果集

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

列名

数据类型

描述

EventType

nvarchar(30)

事件类型,例如:rpc、语言或无事件。

Parameters

Int

0 = 文本      1- n = 参数

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)

看完上述内容,你们掌握SqlServer中怎么实现异常处理的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网数据库频道,感谢各位的阅读!

您可能感兴趣的文档:

--结束END--

本文标题: SqlServer中怎么实现异常处理

本文链接: https://www.lsjlt.com/news/57946.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SqlServer中怎么实现异常处理
    SqlServer中怎么实现异常处理,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。SQL Server常见的问题主要是SQL问题造成,常见的主...
    99+
    2024-04-02
  • C++中怎么实现异常处理
    这篇文章给大家介绍C++中怎么实现异常处理,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C++异常处理程序在函数中查找catch块时,它首先要判断异常发生的位置是否在当前函数(发生异常的那个函数)的一个try块中。是则...
    99+
    2023-06-17
  • Python中怎么实现异常处理
    这篇文章将为大家详细讲解有关Python中怎么实现异常处理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。导入必要的模块之后,animal.py使用connect()调用建立到服务器的连接。为...
    99+
    2023-06-17
  • JavaScript中的异常处理怎么实现
    这篇“JavaScript中的异常处理怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript中的异常处理...
    99+
    2023-06-30
  • SpringBoot中怎么实现统一异常处理
    在Spring Boot中,可以通过@ControllerAdvice注解来实现统一异常处理。以下是一个示例: @Controlle...
    99+
    2024-03-07
    SpringBoot
  • SpringMvc异常处理器怎么实现
    这篇文章主要讲解了“SpringMvc异常处理器怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringMvc异常处理器怎么实现”吧! Spri...
    99+
    2024-04-02
  • 怎么处理SQLServer mirror宕机后error 9004异常
    本篇内容主要讲解“怎么处理SQLServer mirror宕机后error 9004异常”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么处理SQLServer...
    99+
    2024-04-02
  • go怎么实现全局异常处理
    要实现Go语言的全局异常处理,可以使用defer和recover来捕获和处理panic异常。 在Go语言中,defer语句会在函数结...
    99+
    2023-10-20
    go
  • SQLServer中怎么实现循环批处理
    SQLServer中怎么实现循环批处理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。下面方法可以用来快速生成一批数据 if(object_...
    99+
    2024-04-02
  • C#中怎么处理异常
    在C#中,可以使用try-catch语句来处理异常。try块中包含可能会抛出异常的代码,而catch块中包含处理异常的代码。示例代码...
    99+
    2024-04-03
    C#
  • C++编译器怎么实现异常处理
    这篇文章主要介绍“C++编译器怎么实现异常处理”,在日常操作中,相信很多人在C++编译器怎么实现异常处理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++编译器怎么实现异常处理”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-17
  • sqlserver中怎么实现差异备份
    sqlserver中怎么实现差异备份,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。手工实现差异备份的步骤字符型:1、恢复当前库;alter d...
    99+
    2024-04-02
  • SQLServer中如何处理异常和错误信息
    在SQLServer中,可以使用TRY…CATCH块来处理异常和错误信息。TRY…CATCH块用于尝试执行一段代码,并在出现异常或错...
    99+
    2024-04-09
    SQLServer
  • Node.js中怎么实现异步处理
    这篇文章将为大家详细讲解有关Node.js中怎么实现异步处理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。异步的“坑”最近一段时间参与开发了一个Node.j...
    99+
    2024-04-02
  • 怎么在Springboot中处理异常
    这篇文章将为大家详细讲解有关怎么在Springboot中处理异常,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、制造异常报500错误。在大量的代码中很难找到错误二、统一异常处理添加异常处理...
    99+
    2023-06-15
  • 怎么处理Java中的异常
    这篇文章主要讲解了“怎么处理Java中的异常”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么处理Java中的异常”吧!异常与error介绍下面还是先让我们来看一下基本概念吧! 异...
    99+
    2023-06-16
  • python如何实现异常处理
    小编给大家分享一下python如何实现异常处理,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!异常处理for i in compani...
    99+
    2023-06-27
  • 怎么在Java8中处理异常
    本篇内容介绍了“怎么在Java8中处理异常”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们都知道,Java 异常分为检查异常和非检查异常。...
    99+
    2023-06-04
  • PHP异常处理:处理异步操作中的异常
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-14
  • MYSQL如何实现异常处理
    这篇文章主要为大家展示了“MYSQL如何实现异常处理”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MYSQL如何实现异常处理”这篇文章吧。翻遍了MYSQL手册都...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作