sqlserver定时计划(sql server deadlock跟踪的4种实现方法)
sqlserver定时计划
sql server deadlock跟踪的4种实现方法前言
最近写程序常会遇到deadlock victim,每次一脸懵逼。研究了下怎么跟踪,写下来记录下。文中介绍的非常详细,对大家具有一定的参考学习价值,下面话不多说了,来一起看看详细的介绍吧
建测试数据
CREATE DATABASE testdb; GO USE testdb; CREATE TABLE table1 ( id INT IDENTITY PRIMARY KEY, student_name NVARCHAR(50) ) INSERT INTO table1 values ('James') INSERT INTO table1 values ('Andy') INSERT INTO table1 values ('Sal') INSERT INTO table1 values ('Helen') INSERT INTO table1 values ('Jo') INSERT INTO table1 values ('Wik') CREATE TABLE table2 ( id INT IDENTITY PRIMARY KEY, student_name NVARCHAR(50) ) INSERT INTO table2 values ('Alan') INSERT INTO table2 values ('Rik') INSERT INTO table2 values ('Jack') INSERT INTO table2 values ('Mark') INSERT INTO table2 values ('Josh') INSERT INTO table2 values ('Fred')
第一段sql,先运行只更新table1部分
USE testdb; -- Transaction1 BEGIN TRAN UPDATE table1 SET student_name = student_name + 'Transaction1' WHERE id IN (1,2,3,4,5) UPDATE table2 SET student_name = student_name + 'Transaction1' WHERE id = 1 COMMIT TRANSACTION
第二段sql,只运行更新table2部分
USE testdb; -- Transaction2 BEGIN TRAN UPDATE table2 SET student_name = student_name + 'Transaction2' WHERE id = 1 UPDATE table1 SET student_name = student_name + 'Transaction2' WHERE id IN (1,2,3,4,5) COMMIT TRANSACTION
再运行,第一段sql更新table2,运行第二段sql更新table1,死锁问题重现。
说下跟踪死锁的方法:
1.使用trace log跟踪,执行如下sql开启1222和1204 flag,死锁信息会在sql server 日志中输出。
DBCC TRACEON (1204, -1) DBCC TRACEON (1222, -1)
下图是1204输出的信息
下图是1222输出的信息
2.使用sql server profiler进行跟踪
点击Tools -> sql server profiler 选择sql locks模板
运行当发生死锁时会自动捕获,点击dead lock paragraph查看死锁
3.使用扩展事件跟踪,方法只适用于sql server 2012版本,08r2版本无法直接使用。
依次点击Management -> Extended Events - >system health - >package0.event_file
输入deadlock回车,可以点击details 把内容另存为xdl文件再打开,或点击deadlock查看图
4.使用windows性能计数器检测到死锁再去sql中查询
命令行输入:perfmon 或者 perfmon /sys
选择实例:SQL Server :Locks \\ Number of DeadLocks/sec \\ _Total
实时查看:
下面的查询提供了自从上次重启以来在本服务器上发生的所有死锁:
SELECT cntr_value AS NumOfDeadLocks
FROM sys.dm_os_performance_counters
WHERE object_name = 'SQLServer:Locks'
AND counter_name = 'Number of Deadlocks/sec'
AND instance_name = '_Total'
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对开心学习网的支持。
- 完整版sqlserver2019卸载教程(Sql Server 2012完全卸载方法 只需8步轻松卸载)
- SqlServer 复制中将大事务分成小事务分发的方法(SqlServer 复制中将大事务分成小事务分发的方法)
- sqlserver降序排列(SQL SERVER临时表排序问题的解决方法)
- sqlserver附加数据库时出错(SQL Server数据库附加失败的解决办法)
- sqlserver快照表(详解SQL Server 2016快照代理过程)
- sqlserver自增长id重置(SQL server 自增ID--序号自动增加的字段操作)
- sqlserverdate格式比较(sqlserver之datepart和datediff应用查找当天上午和下午的数据)
- sqlserver分表后如何查询(SQL Server中row_number分页查询的用法详解)
- sqlserver调试存储过程(sql server2008调试存储过程的完整步骤)
- sqlserver列数据拆分(SQL Server基础之行数据转换为列数据)
- sqlserver栏位说明(SQL Server重置IDENTITY属性种子值操作)
- sqlserver2012海量数据查询(SQL Server 2012 多表连接查询功能实例代码)
- sqlserver存储过程同步数据(SQL Server存储过程同时返回分页结果集和总数)
- mybatis执行sql源码解析(mybatis调用sqlserver存储过程返回结果集的方法)
- sql server2005如何配置(SQLServer2005创建定时作业任务)
- sqlserver的图形表(SQL Server纵表与横表相互转换的方法)
- 网红直播可以赚很多钱吗(网红直播可以赚很多钱吗)
- 今天是什么日子(今天是什么日子有什么特殊意义吗)
- 这里输入关键词(怎么输入关键词搜索)
- 34岁的舒畅,就这样走到了末路,不知会不会后悔15年前的草率决定(就这样走到了末路)
- 不走心的古装造型 舒畅 毁容式 出演,萧蔷雷出新高度(不走心的古装造型)
- 嘉南传 第22集(嘉南传第22集)
热门推荐
- 在php中与数据库连接的技术(PHP7.0连接DB操作实例分析基于mysqli)
- html自适应怎么没有滚动条(如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度)
- vuex怎么使用数据(vuex的辅助函数该如何使用)
- php 支付系统(php 实现银联商务H5支付的示例代码)
- python 获取ip mac 地址(Python3获取电脑IP、主机名、Mac地址的方法示例)
- 如何判断数据是json还是字符串(JSON.stringify的多种用法总结)
- laravel提取数据库的字段(Laravel创建数据库表结构的例子)
- python编程开发环境步骤(python开发准备工作之配置虚拟环境非常重要)
- 数据库docker技术(总结Docker不适合部署数据库的7大原因)
- ui界面的测试用例(AmazeUI中模态框的实现)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9