数据库阻塞、性能问题

luckds 2004-05-13 12:06:12
请问各位老师:
好!!
我维护的数据库很容易出现阻塞 (sp_who blk)客户端出现查询、保存
不响应
我是新手, 想查询时用NOLOCK 因为用了 好象性能是要好一些 但是又害怕 脏数据的读取,我现在不知道怎么办了
请介绍一下 NOLOCK 的使用注意事项
请各位老师 给我点建议!!!
我在线 等待 !
谢谢
...全文
115 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
luckds 2004-05-13
  • 打赏
  • 举报
回复
zjcxc(邹建) 老师:
谢谢您!

是这样的 我仅仅只是维护、管理 (初级人员) 您说的那些 我可能只是 知道一点
或者完全不知道。
我希望能得到您的帮助!
我们的业务系统是集中式的C/S系统,工作站有远程的 通过VPN 连接,网络问题排除不处理,经常看到有BLK 的现象,我希望能将 存储过程中 查询大数据量表的时候 能加上(NOLOCK) 我自己分析了一下 脏数据的可能性很小 应该可以忽略掉
我现在想知道 NOLOCK 是不是 有这样的 作用 或者 功能吧
因为我现在把握不了 因为是查询 应该是共享琐 对吗 呵呵 我自己在书上看到的

就是 这些地方 我不清楚
希望您能帮助我

谢谢 !!!
zjcxc 2004-05-13
  • 打赏
  • 举报
回复
将死锁减至最少
虽然不能完全避免死锁,但可以使死锁的数量减至最少。将死锁减至最少可以增加事务的吞吐量并减少系统开销,因为只有很少的事务:

回滚,而回滚会取消事务执行的所有工作。


由于死锁时回滚而由应用程序重新提交。
下列方法有助于最大限度地降低死锁:

按同一顺序访问对象。


避免事务中的用户交互。


保持事务简短并在一个批处理中。


使用低隔离级别。


使用绑定连接。
按同一顺序访问对象
如果所有并发事务按同一顺序访问对象,则发生死锁的可能性会降低。例如,如果两个并发事务获得 Supplier 表上的锁,然后获得 Part 表上的锁,则在其中一个事务完成之前,另一个事务被阻塞在 Supplier 表上。第一个事务提交或回滚后,第二个事务继续进行。不发生死锁。将存储过程用于所有的数据修改可以标准化访问对象的顺序。



避免事务中的用户交互
避免编写包含用户交互的事务,因为运行没有用户交互的批处理的速度要远远快于用户手动响应查询的速度,例如答复应用程序请求参数的提示。例如,如果事务正在等待用户输入,而用户去吃午餐了或者甚至回家过周末了,则用户将此事务挂起使之不能完成。这样将降低系统的吞吐量,因为事务持有的任何锁只有在事务提交或回滚时才会释放。即使不出现死锁的情况,访问同一资源的其它事务也会被阻塞,等待该事务完成。

保持事务简短并在一个批处理中
在同一数据库中并发执行多个需要长时间运行的事务时通常发生死锁。事务运行时间越长,其持有排它锁或更新锁的时间也就越长,从而堵塞了其它活动并可能导致死锁。

保持事务在一个批处理中,可以最小化事务的网络通信往返量,减少完成事务可能的延迟并释放锁。

使用低隔离级别
确定事务是否能在更低的隔离级别上运行。执行提交读允许事务读取另一个事务已读取(未修改)的数据,而不必等待第一个事务完成。使用较低的隔离级别(例如提交读)而不使用较高的隔离级别(例如可串行读)可以缩短持有共享锁的时间,从而降低了锁定争夺。

使用绑定连接
使用绑定连接使同一应用程序所打开的两个或多个连接可以相互合作。次级连接所获得的任何锁可以象由主连接获得的锁那样持有,反之亦然,因此不会相互阻塞。

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧