王老师讲解:SQL Server 2005数据库nolock的使用【来自Aisino_BBS】
前两天去安徽航天信息解决A6系统的性能问题,去之前进销存项目组研发人员小苏和小卢把他们认为性能
有问题的SQL已经发给了我,我把优化方法提交给了他们。本以为到那之后会非常轻松,但还是有些插曲在其中。
到安徽航天信息后,我检查操作系统和数据库日志、服务器配置,通过性能监视器查看CPU、内存和磁盘I/O
情况。安徽航信的技术人员把临时补丁打上后,统计分析--销售收入明细列表的执行时间在2~3秒,他们很满意,
销售管理-帐表查询-销售发票明细的执行时间还是不令人满意,更要命的是一但有人查询销售发票
明细,其他人查询就会被挂起......。销售发票明细查询出来后,其它查询才会查出结果。很明显
没有出现死锁,一定是这个查询阻塞了其它查询。
通过查询sysprocesses和sys.dm_exec_sql_text视图,发现引起阻塞的进程所执行的SQL语句是:
select tempTable_.* into tempTable_556975850345921751 from ( select......)被阻塞的进程
执行的语句可能是select cguid code,cName name,cOften from PT_QueryPlan where cFormID =@P0
and cOrgnId=@P1 and (cUserID=@P2 or cType='s') and cOften='1' order by cName。select语句
一般情况下会在被查询对象上加共享锁,共享锁不会阻止其它语句加共享锁,事情有些怪异了。
据本人的经验,引起阻塞的语句一定在现在执行的语句之前执行的语句,那条语句的执行修改了
某个表的数据,在没有提交前导致了这个select cguid code,cName name,cOften from PT_QueryPlan
无法完成,这个表应该就是PT_QueryPlan了!
回公司后和平台研发人员沟通,了解到使用临时表进行查询的大致过程是1)执行上面这个语句,
查询PT_QueryPlan中有无当前用户相应的查询方案?2)根据查询结果修改PT_QueryPlan或向该表中插
入相应数据;3)执行select tempTable_.* into tempTable_XXXXXXXXXXXXX from ( select......)
正是由于这条插入临时表的语句执行得较慢,事务没有在短时间内完成,查询 PT_QueryPlan表的语句
才由于等待而被暂时挂起了,这与SQL Server的机制有关,Oracle不会默认事务隔离级别不会出现这
种问题!
问题找到了,解决办法是select cguid code,cName name,cOften from PT_QueryPlan......执行
时不要对表加共享锁,语句改为select cguid code,cName name,cOften from PT_QueryPlan with
(nolock) ......,也就是在表名后加上with (nolock),简单吧!
以下是根据网上的文章整理而成,供参考:
在SQL Server 2005数据库查询时,为了提高查询的性能,我们往往会在表后面加一个with(nolock),让数据库在
查询时不锁定表,从而提高查询的速度。
某些不利的影响,例如:
弃修改,数据回到修改之前,这两个不同的结果就是脏读。
用户修改了这个数据,然后第二次读取的数据正好是其它用户修改的数据,这样造成两次读取的记录不同,如果事务中
锁定这条记录就可以避免。
做了修改,方法可能是修改,删除,新增,第二次查询时,会发现第一次查询的记录条目有的不在第二次查询结果中,或
者是第二次查询的条目不在第一次查询的内容中。
决并发访问的方案之一。
从数据库系统的角度来看:分为独占锁(即排它锁),共享锁和更新锁。
速度,但它并不是没有缺点的,起码它会引起脏读(读取其它事务尚未提交的数据)。这一点相当重要!能不能在应用中降低
锁的级别要视情况而定!!切记,切记
而且会存在不可预期的技术问题。应该有选择性的挑选最适合的表来放弃共享锁的使用。
文章author:DBA,wanghengfeng老师
王老师讲解:SQL Server 2005数据库nolock的使用【来自Aisino_BBS】相关推荐
- 胡百敬老师谈SQL Server 2005
博文专访--与作者面对面 胡百敬老师谈SQL Server 2005 针对胡百敬老师的新书<SQL Server 2005数据库开发详解>的出版,博文视点对胡百敬老师进行了专访,以飨读者. ...
- 烂泥:SQL Server 2005数据库备份与恢复
本文首发于烂泥行天下. 服务器的迁移,因为业务使用的数据库是SQL Server 2005,所以就要首先对数据库进行备份. 备份可以分为手动备份和自动备份,我们先来介绍手动备份. 打开SQL Serv ...
- SQL Server 2005 数据库邮件 使用要点
1 利用SQL Server 2005数据库邮件,首先启用数据库邮件服务, 如下:打开SQL Server"配置工具"中的"外围应用配置器",选择"功 ...
- SQL Server 2005数据库日志文件损坏的情况下如何恢复数据库
在某些偶然的情况下,会引起SQL Server 2005数据库日志文件的损坏,比如:硬件故障.计算机非正常重启或关机. 当SQL Server 2005数据库日志文件损坏时,可能会出现以下情况: 1. ...
- Microsoft SQL Server 2005数据库安装
Microsoft SQL Server 2005数据库,电脑里原有的mssql2000已经不适用了,到网上寻找SQL Server 2005简体中文开发版的下载地址,一开始下载了个学习版的expre ...
- Eclipse如何连接SQL Server 2005数据库
做管理系统当然少不了经常与数据库打交道,在网上搜了很多数据库版本都不小,大的有好几个G的,小的也有几百兆的,我这可怜的内存,最终找了个精简版中的精简版的Sql server2005,只有80几兆,本来 ...
- SQL Server 2005数据库快照
SQL Server 2005数据库快照 -------------------------------------------创建数据库DemoDB create database DemoDB o ...
- SQL Server 2005数据库教程
SQL Server 2005数据库教程 此主题相关图片如下:000.jpg 下载信息 [文件大小:1.4 MB 下载次数:67] 点击浏览该文件:sql server 2005数据库简明教程 ...
- 远程连接SQL Server 2005数据库
由于项目需要,我要远程连接到一台团队服务器上的SQL Server 2005数据库.但是试了几次都没有成功,后来在网上搜了很多相关资料终于搞定了,这里把它总结一下. 确保服务器端的数据库中存在sa. ...
最新文章
- DOM解析和SAX解析的区别
- Spark通过YARN提交任务不成功(包含YARN cluster和YARN client)
- 测试Mybatis时事务自动回滚,无法完成增删改
- JMeter 监听器之保存响应到文件
- 原型模式(Prototype )
- 【基础】模型评估指标 AUC 和 ROC,这是我看到的最透彻的讲解
- 北京理工大学小学期乐学 t23树上统计
- 专利与论文-5:《专利说明书》的撰写与注意事项
- 开箱即用——用模板快速上线一个HR 服务中心
- html页面上允许文字复制,网页上的文字无法复制?教你如何破除网页限制
- 7z001怎么解压在安卓手机上面_安卓手机来电闪光灯怎么设置
- C语言:开平方判断素数
- 好看的照片要怎么拍?
- 如何把云服务器恢复到最原始的状态
- 开始CentOS世界 从yum搭建lnmp环境开始,root的密码破解,定时任务, 后续其他功能 redHat5.4
- nyoj 1237-最大岛屿
- 为什么数字化时代需要 BizDevOps?
- 3dsmax 2020下载安装
- 【USB网络摄像头】基于mjpeg-streamer的视频采集与播放【QT上位机软件】
- 破解root密码详细流程