仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 587|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL编程:SQL Server 逝世锁处置和优化心得

[复制链接]
小妖女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
有了数据以后,我们就要想一个比较统一的方法来闪回。上面我们说了对于DML操作,可以通过反向执行所有逆操作来实现,对于语句里面的DDL,只能直接跳过。原因是一个DDL不一定有直接的逆操作。前段工夫提到的"sqlserver2005逝世锁办理探究",逝世锁严峻,均匀天天会产生一次逝世锁,在办理和处置SQLserver2005逝世锁中查了良多材料和想了良多举措,对为什么呈现逝世锁和如何较少逝世锁有了进一步熟悉,在这里和人人一同分享:

sqlserver锁范例
在数据库中次要存在两种锁:S(共享锁)和X(排他锁)

S(共享锁):在实行查询数据时,sqlserver会将行锁定,这时候只能查询数据,删,改被堵塞,

X(排他锁):在拔出和删除数据时,将行锁定,这时候增,删,改都被堵塞

以上两种锁城市引发逝世锁:

逝世锁界说:在两个或多个义务中,假如每一个义务锁定了其他义务试图锁定的资本,此时会形成这些义务永世堵塞,从而呈现逝世锁



这里摹拟一下逝世锁情况:

创建情况:
----逝世锁例子,创建表数据
createtable[dbo].[[zping.com1]]](
Avarchar(2)
,Bvarchar(2)
,Cvarchar(2))

--拔出数据
insertinto[dbo].[[zping.com1]]]
selecta1,b1,c1
unionallselecta2,b2,c2
unionallselecta3,b3,c3

--创建表数据
createtable[dbo].[[zping.com2]]]
(Dvarchar(2)
,Evarchar(2))

--拔出数据
insertinto[dbo].[[zping.com2]]]
selectd1,e1
unionallselectd2,e2



1.1排他锁引发的逝世锁
实行语句:

begintran
update[dbo].[[zping.com2]]]
setD=d5
whereE=e1
waitfordelay00:00:05

update[dbo].[[zping.com1]]]
setA=aa
whereB=b2


begintran
update[dbo].[[zping.com1]]]
setA=aa
whereB=b2
waitfordelay00:00:05

update[dbo].[[zping.com2]]]
setD=d5
whereE=e1


新建两个窗口,在5秒钟内实行下面语句,不久就会呈现逝世锁提醒。(停止跋文住要把事件回滚啊)

1.2共享锁引发的逝世锁
begintran
update[dbo].[[zping.com2]]]
setD=d5
whereE=e1
waitfordelay00:00:05

select*from[dbo].[[zping.com1]]]
whereB=b2


begintran
update[dbo].[[zping.com1]]]
setA=aa
whereB=b2
waitfordelay00:00:05

select*from[dbo].[[zping.com2]]]
whereE=e1


新建两个窗口,在5秒钟内实行下面语句。不久就会呈现逝世锁提醒。(停止跋文住要把事件回滚啊)



晓得逝世锁发生的缘故原由,在临盆情况发生的逝世锁就相似这两种情形。



厥后在网上查阅了良多材料,包含sqlserver2005的匡助文档。总结有以下有次要几点:

1,下降断绝级别大概利用行版本把持断绝级别

2,进步数据的会见速率

3,削减事件长度

4,将按按次会见热门表(如将会见频仍的表放在最初会见)



碰到的坚苦
但在我们此次优化中,有些是不太优点理的如:

1,削减事件长度,事件的巨细不是我们来决意的,是由营业逻辑来决意的(来自tom的《Oracle9i/10g深切外部系统机构》中)

2,按按次会见热门表,我们发明代码中办法间相互挪用很频仍,常常一个表挪用屡次,要修正表的会见按次是对照坚苦的。



接纳的办法
厥后我们就利用了以下办法:

1,将数据库断绝级别改成行版本把持断绝级别。(没有了共享锁逝世锁)

2,重修和优化索引,优化SQL语句和接纳分区视图等办法。进步会见速率。(削减了锁准时间)

3,程度拆分表(分区)并在程序读写时只管做到分区打消,削减读写的行数,下降锁定晋级的频次和工夫。(削减锁的晋级)



经由过程4个月摆布的运转,体系就产生过一次逝世锁,比之前年夜年夜下降。

这章描述如何检查和处理在MySQL数据库中的数据损坏。如果你的表损坏很多,你应该尝试找出其原因!见G.1调试一个MySQL服务器。
活着的死人 该用户已被删除
沙发
发表于 2015-1-19 06:28:48 | 只看该作者
比如日志传送、比如集群。。。
兰色精灵 该用户已被删除
板凳
发表于 2015-1-25 09:43:22 | 只看该作者
很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
愤怒的大鸟 该用户已被删除
地板
发表于 2015-2-2 21:35:42 | 只看该作者
SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。
再见西城 该用户已被删除
5#
发表于 2015-2-8 06:36:35 | 只看该作者
连做梦都在想页面结构是怎么样的,绝非虚言
透明 该用户已被删除
6#
发表于 2015-2-24 21:59:03 | 只看该作者
每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。
简单生活 该用户已被删除
7#
发表于 2015-3-7 13:50:56 | 只看该作者
同样会为索引视图等应用带来麻烦。看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的尴尬。
8#
发表于 2015-3-15 07:37:15 | 只看该作者
始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
冷月葬花魂 该用户已被删除
9#
发表于 2015-3-21 22:22:19 | 只看该作者
原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-29 06:39

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表