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

sqlserver数据库查询执行慢的sql

查询数据库隔离级别

sql 复制代码
dbcc useroptions

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

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

sql 复制代码
alter database bstjxt set  READ_COMMITTED_SNAPSHOT on ;

设置后比如

sql 复制代码
begin transaction;
update TJ_TJDJB set XM='张在1' where TJBH='00001504000001'
commit;

在没有commit之前如果隔离级别是已提交读的 ,没commit是不能执行下面查询的,会一直堵塞;

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

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

关于sqlserver的隔离级别

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

我们执行

sql 复制代码
SET TRANSACTION ISOLATION LEVEL Read UnCommitted ;

其实只对当前连接有效

新建一个连接 执行 dbcc useroptions发现这个链接的 隔离级别还是已提交读

但是

sql 复制代码
alter database bstjxt set  READ_COMMITTED_SNAPSHOT on;

设置我测试确是全局的.

sqlserver 判断text字段不为空

sql 复制代码
select * from TJ_TJJLMXB where TJBH='80021606000011' and datalength(JG)>0

sqlserver查询锁表

sql 复制代码
select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName   
from   sys.dm_tran_locks where resource_type='OBJECT'

查询锁表的语句

sql 复制代码
dbcc inputbuffer(spid)

sqlserver 解锁

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

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

sql 复制代码
select * from sys.dm_exec_sessions;

sqlserverManager使用事物

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

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

sql 复制代码
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 QS
       CROSS 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 BY
     QS.total_elapsed_time DESC

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

sql 复制代码
     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 QS
       CROSS 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
相关推荐
古月居GYH3 小时前
【数据分析】如何在PyCharm中高效配置和使用SQL
ide·sql·pycharm
计算机毕设定制辅导-无忧学长7 小时前
西门子 PLC 与 Modbus 集成:S7-1500 RTU/TCP 配置指南(一)
服务器·数据库·tcp/ip
程序员柳8 小时前
基于微信小程序的校园二手交易平台、微信小程序校园二手商城源代码+数据库+使用说明,layui+微信小程序+Spring Boot
数据库·微信小程序·layui
梦在深巷、8 小时前
MySQL/MariaDB数据库主从复制之基于二进制日志的方式
linux·数据库·mysql·mariadb
IT乌鸦坐飞机8 小时前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7
IT_10248 小时前
Spring Boot项目开发实战销售管理系统——数据库设计!
java·开发语言·数据库·spring boot·后端·oracle
祁思妙想10 小时前
八股学习(三)---MySQL
数据库·学习·mysql
惊骇世俗王某人10 小时前
1.MySQL之如何定位慢查询
数据库·mysql
程序员张310 小时前
SQL分析与打印-p6spy组件
spring boot·sql·mybatis·mybatisplus·p6spy
秦歌66611 小时前
向量数据库-Milvus快速入门
数据库·milvus