阻塞分析

--阻塞   
/***********************************************************************************************************************   
阻塞:其中一个事务阻塞,其它事务等待对方释放它们的锁,同时会导致死锁问题。   整理人:中国风(Roy)   日期:2008.07.20   
************************************************************************************************************************/   --生成测试表Ta   
if not object_id('Ta') is null  drop table Ta   
go   
create table Ta(ID int Primary key,Col1 int,Col2 nvarchar(10))   
insert Ta    
select 1,101,'A' union all  
select 2,102,'B' union all  
select 3,103,'C'   
go   
生成数据:   
/*   
表Ta   
ID          Col1        Col2   
----------- ----------- ----------   
1           101         A   
2           102         B   
3           103         C   (3 行受影响)   
*/   将处理阻塞减到最少:   
1、事务要尽量短   
2、不要在事务中请求用户输入   
3、在读数据考虑便用行版本管理   
4、在事务中尽量访问最少量的数据   
5、尽可能地使用低的事务隔离级别   go   
阻塞1(事务):   
--测试单表   -----------------------------连接窗口1(update/insert/delete)----------------------   
begin tran   
--update   update ta set col2='BB' where ID=2   
--或insert   
begin tran   insert Ta values(4,104,'D')   
--或delete   
begin tran   delete ta where ID=1   --rollback tran   ------------------------------------------连接窗口2--------------------------------   
begin tran   select * from ta   --rollback tran   --------------分析-----------------------   
select    request_session_id as spid,   resource_type,   db_name(resource_database_id) as dbName,   resource_description,   resource_associated_entity_id,   request_mode as mode,   request_status as Status   
from    sys.dm_tran_locks   
/*   
spid        resource_type dbName resource_description resource_associated_entity_id mode  Status   
----------- ------------- ------ -------------------- ----------------------------- ----- ------   
55          DATABASE      Test   0                    S                             GRANT NULL  
54          DATABASE      Test   0                    S                             GRANT NULL  
53          DATABASE      Test   0                    S                             GRANT NULL  
55          PAGE          Test   1:201                72057594040483840             IS    GRANT  
54          PAGE          Test   1:201                72057594040483840             IX    GRANT  
55          OBJECT        Test   1774629365           IS                            GRANT NULL  
54          OBJECT        Test   1774629365           IX                            GRANT NULL  
54          KEY           Test   (020068e8b274)       72057594040483840             X     GRANT --(spID:54请求了排它锁)   
55          KEY           Test   (020068e8b274)       72057594040483840             S     WAIT  --(spID:55共享锁+等待状态)   
(9 行受影响)   
*/   --查连接住信息(spid:54、55)   
select connect_time,last_read,last_write,most_recent_sql_handle     
from sys.dm_exec_connections where session_id in(54,55)   --查看会话信息   
select login_time,host_name,program_name,login_name,last_request_start_time,last_request_end_time    
from sys.dm_exec_sessions where session_id in(54,55)   --查看阻塞正在执行的请求   
select    session_id,blocking_session_id,wait_type,wait_time,wait_resource   
from    sys.dm_exec_requests   
where  blocking_session_id>0--正在阻塞请求的会话的 ID。如果此列是 NULL,则不会阻塞请求   --查看正在执行的SQL语句   select    a.session_id,sql.text,a.most_recent_sql_handle   
from    sys.dm_exec_connections a   
cross apply   sys.dm_exec_sql_text(a.most_recent_sql_handle) as SQL   --也可用函数fn_get_sql通过most_recent_sql_handle得到执行语句   
where  a.Session_id in(54,55)   
/*   
session_id  text   
----------- -----------------------------------------------   
54          begin tran   update ta set col2='BB' where ID=2   
55          begin tran   select * from ta   
*/   处理方法:   
--连接窗口2   
begin tran   select * from ta with (nolock)--用nolock:业务数据不断变化中,如销售查看当月时可用。   阻塞2(索引):   -----------------------连接窗口1   
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE    --针对会话设置了 TRANSACTION ISOLATION LEVEL   
begin tran   update ta set col2='BB' where COl1=102   --rollback tran   ------------------------连接窗口2   
insert into ta(ID,Col1,Col2) values(5,105,'E')   处理方法:   create index IX_Ta_Col1 on Ta(Col1)--用COl1列上创索引,当更新时条件:COl1=102会用到索引IX_Ta_Col1上得到一个排它键的范围锁   阻塞3(会话设置):   -------------------------------连接窗口1   begin tran   
--update   update ta set col2='BB' where ID=2   select col2 from ta where ID=2   --rollback tran   --------------------------------连接窗口2   SET TRANSACTION ISOLATION LEVEL READ COMMITTED --设置会话已提交读:指定语句不能读取已由其他事务修改但尚未提交的数据   
begin tran   select * from ta    处理方法:   
--------------------------------连接窗口2(善用会话设置:业务数据不断变化中,如销售查看当月时可用)   SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED --设置会话未提交读:指定语句可以读取已由其他事务修改但尚未提交的行   
begin tran   select * from ta

转载于:https://www.cnblogs.com/Roy_88/archive/2008/07/21/5463100.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科学计算机二进制算法,计算机是怎么理解二进制的?

计算机是怎么理解二进制的?计算机的发明最初纯粹是为了计算数字, 让一个机器能够通过输入不同的数字, 进行加减乘除等. 首先要约定好机器能处理的数是什么样的, 即输入是什么样的, 才能去制造计算机. 二进制只是一种尝试, 十进制也有科学家尝试过, 但由于复杂程度较二进制要高…

OpenCV人脸特效制作

https://blog.csdn.net/zxc024000/article/details/50456917 https://blog.csdn.net/huanghuangjin/article/details/81666134 DLibOpenCV 脸部跟踪张贴小物件(遮盖眼部或者眼睛变大) 所以首先需要人脸识别,然后再类似GAN之类的进行处理或生成 https://wysaid.org/9…

abp.event.on与abp.event.off使用

apb的全局事件 var eventName "app.createOrEditFieldModalSaved";var reloadPage function () { dt.ajax.reload();};abp.event.on(eventName, reloadPage); //弹窗关闭事件_modalManager.onClose(function () {//注销事件,要不然多次打开列表后&…

为JavaOne 2014做好准备!

保持那个想法! 是的……我希望我能在Java One 2014上做演讲-但我现在只值得在梦里做到这一点! 但是,没有什么阻止我遵循Java One并跟踪有关我最喜欢的主题的会话/对话。 我希望甲骨文能够像我们2013年版那样,像我们这样的凡人在网…

WPF 实现ScrollViewer的垂直偏移滚动跳转

问题:考虑屏幕大小,一般都是会在表单问卷的页面使用ScrollViewer。问卷中问题漏填漏选时,在提交时校验不过,需要滚动跳转至漏填漏选项。 页面如下: 每个选项使用StackPanel,并对复选框和单选的勾选事件进行…

13 个应该记住的最不寻常的搜索引擎

13 个应该记住的最不寻常的搜索引擎 如果你通过Digg或其他社会化媒体网站,向世界传播,我会非常感激,您对此文的随手评论会让此文展示在更多人面前。谢谢 你已经天天使用一些常见的搜索引擎,象 Google,Msn,Y…

限制 计算机中 某用户上网 win7,Win7旗舰版怎么限制孩子的上网时间?电脑限制孩子上网时间的方法...

Win7旗舰版怎么限制孩子的上网时间?我们在家里有孩子的时候非常害怕孩子沉迷与网络,不把心思放在学习上。所以会想方设法的限制孩子上网。那么我们怎么使用电脑的自带的功能限制孩子上网呢?下面小编就带着大家一起看一下吧!设置管…

第八章(三)基于Listcheck适配器的访问控

denier适配器访问控制比较死板。Listchecker的适配器更加灵活。 定义handler: apiVersion: config.istio.io/v1alpha2 kind: listchecker metadata:name: chaos spec:overrides: ["v1","v3"] # 列表blacklist: true # 黑名单类型 定义t…

checkbox 最多选两项

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>久信臻氏</title></head><body><form action"index.php" method"post"> <div> &…

论图计算

自从机械计算开始以来&#xff0c;图形概念就已经存在&#xff0c;并且在纯数学领域已经存在了数十年。 由于数据库的黄金时代&#xff0c;图形在软件工程中变得越来越流行。 图形数据库提供了一种持久化和处理图形数据的方法。 但是&#xff0c;图形数据库并不是存储和分析图形…

注册了

第一天来 转载于:https://www.cnblogs.com/mayanshuang/archive/2008/07/26/1251934.html

html 拼接onmouseout,HTML onmouseout事件用法及代码示例

将鼠标指针移出元素或其子元素时&#xff0c;将发生HTML DOM onmouseout事件。用法:在HTML中&#xff1a;在JavaScript中&#xff1a;object.onmouseout function(){myScript};在JavaScript中&#xff0c;使用addEventListener()方法&#xff1a;object.addEventListener(&quo…

Windows PowerShell Cookbook

Windows PowerShell Cookbook转载于:https://www.cnblogs.com/gavinhughhu/archive/2009/12/29/1634652.html

7 selenium 模块

selenium 模块 一.简介 1.Python的一个第三方库&#xff0c;对外提供的接口可以操作浏览器&#xff0c;然后让浏览器完成自动化的操作。 2.自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器&#xff0c;完全…

vue-resource

安装npm install vue-resource引入import VueResource from vue-resource;Vue.use(VueResource);使用get方法this.$http.get("http://localhost/test.php").then( function (res) { // 处理成功的结果 console.log(res.body); },function (res) { // 处理失败的结果 …

针对新手的Java EE7和Maven项目-第3部分-定义ejb服务和jpa实体模块

从前面的部分恢复 第1部分 第2部分 我们在第三部分继续介绍&#xff0c;我们已经有一个父pom&#xff0c;并且已经为我们的war模块定义了pom。 在我们的原始设置中&#xff0c;我们定义了我们的应用程序将包含一个ejb jar形式的服务jar。 这是我们的Enterprise Java Bean&…

计算机本地网络如何共享,本地网络共享怎么实现

本地网络共享可以满足多台电脑同时联网&#xff0c;台式电脑实现网络共享可以使用路由器&#xff0c;笔记本电脑事项网络共享需要使用无线路由器或者无线网卡。那么本地网络共享又是如何实现的呢&#xff0c;下面为大家详细介绍一下。通过路由器实现本地网络共享&#xff1a;第…

淘宝购物车效果

淘宝购物车效果 今天给大家带来的是淘宝购物车效果&#xff0c;写的不怎么好&#xff0c;请大家多多指教。 效果&#xff1a; 1.点击全选前的选择框&#xff0c;选择所有的选择框。 2.点击商品的加号或者减号可以改变商品的数量值&#xff0c;并且改变商品的小计和他的积分&…

Git初始化配置以及配置github

1&#xff0c;配置用户名和邮箱&#xff08;这里是我github中配置的用户名和邮箱&#xff09;&#xff0c;执行下面命令后&#xff0c;在C:\Users\yaosq盘下会出现一个全局文件.gitconfig. git config --global user.name "这里换上你的用户名" git config --global…

大学计算机专业高考听力,高考英语听力测试对考生听力策略反拨作用的研究

摘要&#xff1a;高考是我国高等院校招生的全国统一性考试,高考听力测试作为听力测试一部分主要测试高考考生的英语听力能力是否达到高校招生的选拔要求.在2011年,有933余万考生参加了高考,其中山东省参加高考的考生约59万人.作为一项全国性选拔考试,高考对我国的中学教育具有重…