首页 > 数据库 >SQLServer解决deadlock问题的一个场景

SQLServer解决deadlock问题的一个场景

时间:2023-12-05 14:00:30浏览次数:26  
标签:index 场景 object SQLServer profiler col deadlock ALTER id

SQLServer解决deadlock问题的一个场景


背景

公司产品出现过很多次dead lock
跟研发讨论了很久, 都没有具体的解决思路
但是这边知道了一个SQLServer数据库上面计划100%出现问题的场景
然后想着跟之前微软case一起处理一下 看能否解决这个问题. 

整体思路

1. 修改默认的隔离级别
2. 关闭索引上面的页锁,只留下行数, 避免锁升级到页锁,导致问题
3. 使用profiler的方式,跟着你干出来deadlock 对应的资源, 查看资源并且进行优化. 

第一步修改隔离级别

SQLSERVER 默认的是 Read Commited 的隔离级别.
大部分高并发场景都建议执行一下修改, 改为快照级别, 避免出现阻塞
方式方法为: 
查看:
SELECT is_read_committed_snapshot_on FROM sys.databases 
WHERE name= 'YourDatabase'
或者是:
DBCC USEROPTIONS

修改的方法为:
ALTER DATABASE dbname SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE dbname SET ALLOW_SNAPSHOT_ISOLATION ON
ALTER DATABASE dbname SET READ_COMMITTED_SNAPSHOT ON
ALTER DATABASE dbname SET MULTI_USER

注意可以online 修改 可能速度比较慢, 建议在停机时间时执行处理

快照隔离会给每一行增加一个版本号, 实现类似于MVCC的效果,提高并发度,但是会导致数据量使用的上升

关闭所以上面的页级别锁

注意这个思路是 研发同事告知 微软case 时给出的方案
我这边并不是非常建议关闭默认值
但是可以作为一个优化项目使用. 

执行方法比较简单, 下面的SQL执行出来的结果 另外开一个分析窗口执行就可以了.
速度比较快几乎瞬间完成. 

SELECT
	'ALTER INDEX ' + i.NAME + ' ON  yourdatabase.' + t.NAME + '  SET (ALLOW_PAGE_LOCKS=OFF,ALLOW_ROW_LOCKS=ON) ;' 
FROM
	sys.objects t
	INNER JOIN sys.indexes i ON t.object_id = i.object_id CROSS APPLY (
	SELECT
		col.[ NAME ] + ', ' 
	FROM
		sys.index_columns ic
		INNER JOIN sys.COLUMNS col ON ic.object_id = col.object_id 
		AND ic.column_id = col.column_id 
	WHERE
		ic.object_id = t.object_id 
		AND ic.index_id = i.index_id 
	ORDER BY
		col.column_id FOR XML PATH ( '' ) 
	) D ( column_names ) 
WHERE
	t.is_ms_shipped <> 1 
	AND t.type = 'U' 
	AND index_id > 0 
ORDER BY
	i.[ NAME ]

使用profiler 跟踪出具体的死锁信息,进行针对性的优化

Profiler 可以跟踪到具体的被锁的资源信息. 

可以通过修改profiler的配置项目就可以了. 

跟踪属性-常规-使用模板里面选择 TSQL_Locks 
跟踪属性-事件选择-仅选择 Locks -> Deadlock graph
执行跟踪就可以了. 

就能够看到具体的被死锁的信息.

然后可以根据被锁死的信息, 适当的进行优化处理一下. 

profiler设置1

image


profiler设置2

image


profiler设置3

image


进行索引重建

alter index PK__lsrwztlo__CCDA21518AF0ADA3 on yourdatabase.lsrwztlog rebuild 
alter index PK__pfhiacti__3213E83F88237CAF  on yourdatabase.pfhiactinst rebuild
alter index index_procintsid  on yourdatabase.pfhiactinst rebuild

设置索引重建计划任务

建议设置全局的索引重建任务, 每天晚上进行相关的索引重建
提高性能. 

标签:index,场景,object,SQLServer,profiler,col,deadlock,ALTER,id
From: https://www.cnblogs.com/jinanxiaolaohu/p/17877057.html

相关文章

  • 典型的ETL使用场景
    典型的ETL使用场景ETL( Extract,Transform,Load)是一种用于数据集成和数据转换的常用技术。它主要用于从多个数据源中提取数据,对数据进行清洗、转换和整合,最后加载到目标系统中。ETL 的使用场景非常广泛,下面将介绍一些常见的 ETL 使用场景。  数据仓库构建ETL技术可......
  • 自动化集成有哪些典型应用场景?
    为什么要做自动化场景集成?主要分为以下几点:提高效率/减少错误:减少人工操作、人为错误、人力成本,提高生产效率、生产质量和稳定性。提高可靠性:提高系统的可靠性和稳定性,减少系统故障和停机时间。节约资源:节约能源和物料资源,降低生产成本。适应变化:快速适应市场变化和客户需求......
  • SQLServer 性能报表的学习与使用
    SQLServer性能报表的学习与使用背景前面连续学习了SQLServer如何优化等事宜.但是一开始总是么有找到对应的问题解决思路周天时想到了SQLSERVER的MDW工具但是并没有找到一个合适的处理方式和方法.今天突然发现可以使用部分核心报表功能进行问题定位.所以想着总结一下,......
  • Http 状态码 301 和 302 的应用场景
    301表示永久重定向,302表示临时重定向。如果浏览器收到的是301,则会缓存重定向的地址,之后不会再重新请求服务器,直接使用缓存的地址请求,这样可以减少请求次数。但如果浏览器收到的是302,则不会缓存重定向地址,浏览器将来会继续以原有地址请求。因此,301适合地址永久转移的场景,比如域......
  • vue 编辑器+使用场景+问题解决
    vue编辑器组件添加依赖"dependencies":{"@codemirror/autocomplete":"^6.4.2","@codemirror/commands":"^6.2.1","@codemirror/lang-javascript":"^6.0.2","@codemirror/lan......
  • vue 循环显示数据场景
    vue循环显示数据el-table中<template> <el-table:data="goodsList"> <el-table-columnprop="goodsName"label="商品名称"></el-table-column> <!--......--></el-table></template>......
  • SQLServer数据库优化学习-总结
    SQLServer数据库优化学习-总结背景各种能力都需要提升.最近总是遇到SQLServer的问题趁着周末进行一下学习与提高.安装与优化1.数据库必须安装64位,不要安装成32位的版本2.数据库的序列号要使用enterprisecore的版本,不要使用enterprise的版本,仅可能使用20个......
  • SQLServer2019及SQLServer FC日志收集
    日志收集:===============1.SQLServer 错误日志 SQLServer2019:<DataDrive>:\ProgramFiles\MicrosoftSQLServer\MSSQL15.<instancename>\MSSQL\Log 以上路径可能根据您的实例名称不同而有所不同。请找到相应的“LOG”文件夹并压缩以后发送给我。 2. 应用程序日......
  • 图数据库Neo4j概念、应用场景、安装及CQL的使用
    一、图数据库概念引用SethGodin的说法,企业需要摒弃仅仅收集数据点的做法,开始着手建立数据之间的关联关系。数据点之间的关系甚至比单个点本身更为重要。传统的**关系数据库管理系统(RDBMS)**并不擅长处理数据之间的关系,那些表状数据模式和呆板的结构难以添加新连接或不同类型连接......
  • 多媒体应用设计师 第17章 多媒体应用场景的技术应用和实现示例
    口诀【虚入手跟交立眼】(虚拟现实系统的输入设备:数据手套、三维位置跟踪器、三维空间交互球、立体眼镜)**【虚出视听触】【视头洞响墙】【听耳喇】【触触力】**虚拟现实系统的输出设备:视觉感知设备(头盔式显示器、洞穴式立体显示装置、响应工作台显示装置、墙式投影......