当前位置: 首页 > news >正文

sqlserver数据库查询执行慢的sql、查询隔离级别、设置快照模式、查询锁表进程、锁表sql、解锁等

sqlserver数据库查询执行慢的sql

查询数据库隔离级别

dbcc useroptions

修改数据库为并行机制(快照模式)

(需要关闭数据库所有连接 sqlserverManager只开启当前一个链接执行)

alter database bstjxt set  READ_COMMITTED_SNAPSHOT on ;

设置后比如

begin transaction;
update TJ_TJDJB set XM='张在1' where TJBH='00001504000001'
commit;

在没有commit之前如果隔离级别是已提交读的 ,没commit是不能执行下面查询的,会一直堵塞;
但是设置 READ_COMMITTED_SNAPSHOT后可以执行 查询出来的 XM字段是没commit之前的原始数据,这就是所谓的快照模块,执行update前会把原记录存一个副本(称为快照)在查询时直接取快照的数据,不需要等待update执行提交后取最新的数据

-- 在上诉的update没commit;时 查询出原数据
select  * from TJ_TJDJB where TJBH='00001504000001'

关于sqlserver的隔离级别

sqlserver数据库默认的就是 已提交读 并且没有全局配置为其他隔离级别的
我们执行

SET TRANSACTION ISOLATION LEVEL Read UnCommitted ;

其实只对当前连接有效
新建一个连接 执行 dbcc useroptions发现这个链接的 隔离级别还是已提交读
但是

alter database bstjxt set  READ_COMMITTED_SNAPSHOT on;

设置我测试确是全局的.

sqlserver 判断text字段不为空

select * from TJ_TJJLMXB where TJBH='80021606000011' and datalength(JG)>0

sqlserver查询锁表

select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName   
from   sys.dm_tran_locks where resource_type='OBJECT'

查询锁表的语句

dbcc inputbuffer(spid)

sqlserver 解锁

-- 56为锁表的进程PID,根据实际的PID代入
declare @spid  int 
Set @spid  = 56 --锁表进程
declare @sql varchar(1000)
set @sql='kill '+cast(@spid  as varchar)
exec(@sql)

sqlserver查询当前开启的session连接数

select * from sys.dm_exec_sessions;

sqlserverManager使用事物

begin transAction
update TJ_TJDJB set XM='徐宝兴1' where TJBH='0216999900576'
commit;提交  or ROLLBACK Transaction; 回滚

sqlserver查询执行耗时的sql语句 需要选择数据库master执行

SELECT TOP 1000 ST.text AS '执行的SQL语句',QS.execution_count AS '执行次数',QS.total_elapsed_time AS '耗时',  --单位(微秒)  1毫秒等于1000微秒QS.total_logical_reads AS '逻辑读取次数',QS.total_logical_writes AS '逻辑写入次数',QS.total_physical_reads AS '物理读取次数',       QS.creation_time AS '执行时间' ,  QS.*
FROM   sys.dm_exec_query_stats QSCROSS APPLY 
sys.dm_exec_sql_text(QS.sql_handle) ST
WHERE  QS.creation_time BETWEEN '2015-08-01 00:00:00' AND '2015-09-02 11:00:00' 
ORDER BYQS.total_elapsed_time DESC

加上每次执行平均耗时时间

     SELECT TOP 1000 ST.text AS '执行的SQL语句',QS.execution_count AS '执行次数',QS.total_elapsed_time AS '耗时',  --单位(微秒)  1毫秒等于1000微秒
cast(QS.total_elapsed_time as decimal )/QS.execution_count '每次耗时' , QS.total_logical_reads AS '逻辑读取次数',QS.total_logical_writes AS '逻辑写入次数',QS.total_physical_reads AS '物理读取次数',       QS.creation_time AS '执行时间' , QS.*
FROM   sys.dm_exec_query_stats QSCROSS APPLY 
sys.dm_exec_sql_text(QS.sql_handle) ST
WHERE  QS.creation_time BETWEEN '2018-05-21 00:00:00' AND '2018-05-21 11:00:00' 
ORDER BY cast(QS.total_elapsed_time as decimal )/QS.execution_count  desc,QS.total_elapsed_time DESC

相关文章:

  • [每日一题] 3362. 零数组变换 iii
  • Excel 密码忘记了?巧用PassFab for Excel 解密帮您找回数据!
  • 二十一、面向对象底层逻辑-scope作用域接口设计
  • deepseek调用
  • 内存管理子系统学习记录
  • 语义分割的image
  • Excel合并单元格后,如何自动批量生成序号列
  • 【人工智障生成日记1】从零开始训练本地小语言模型
  • Google Agent Development Kit与MCP初试
  • 西门子 S1500 博途软件舞台威亚 3D 控制方案
  • 边缘计算正在重新定义物联网的未来——你的设备还在“等云“吗?⚡
  • 游戏引擎学习第305天:在平台层中使用内存 Arena 的方法与思路
  • Php 箭头函数详解
  • Vue3实现轮播表(表格滚动)
  • Docker 疑难杂症解决指南大纲
  • 纯JS前端转图片成tiff格式
  • Java中创建线程的几种方式
  • Nginx 部署前端项目dist文件到局域网然后ngrok部署到公网
  • python打卡day33
  • w~自动驾驶~合集13
  • 中国建设银行网官方网站/品牌营销策划有限公司
  • c 做网站方便吗/搜索引擎优化课程总结
  • 服装网站模块方案/电脑培训班有哪些科目
  • 想做一个自己的网站怎么做的/seo专业知识培训
  • 深圳苏州企业网站建设服务/互联网项目推广
  • 深圳南山区住房和建设局网站/百度网站的域名地址