小编Avi*_*ias的帖子

如何在SQL Server 2008中有效地使用LOCK_ESCALATION

我目前在SQL Server 2008中使用特定用户表频繁死锁时遇到麻烦.以下是有关此特定表的一些事实:

  1. 有大量的行(1到2百万)
  2. 此表中使用的所有索引仅在其选项中勾选 "使用行锁定" 编辑:表上只有一个索引是其主键
  3. 行经常由多个事务更新,但是是唯一的(例如,每小时可能会有一千个或更多个更新语句被执行到不同的唯一行)
  4. 该表不使用分区.

检查表格后sys.tables,我发现lock_escalation设置为TABLE

我非常想把这张桌子的lock_escalation转到,DISABLE但我不确定这会产生什么副作用.从我的理解,使用DISABLE将最小化升级锁从TABLE级别,如果与索引的行锁设置结合,理论上应该最小化我遇到的死锁..

根据我在确定锁升级阈值时所看到的,当单个事务获取5000行时,锁定似乎会自动升级.

在这个意义上,单笔交易意味着什么?单个会话/连接通过单独的更新/选择语句获得5000行?

或者是一个获取5000行或更多行的单个sql update/select语句?

非常感谢,btw,n00b DBA在这里

谢谢

sql-server deadlock locking

12
推荐指数
1
解决办法
1万
查看次数

与删除和重新创建索引相比,禁用和重新启用索引有什么区别?

正如问题所述,两者在性能方面有何不同,哪种情况更好?

或者这两个有同样的效果吗?如果适用,每种方法的优缺点是什么?

根据我的理解,重建索引也会导致其重建类似于收集统计数据(11g)

如何禁用和重新启用索引?它是否也会自动收集统计数据?

请注意,我问的是需要进行大量批量插入/更新的心态

非常感谢

sql oracle indexing performance bulk-load

2
推荐指数
1
解决办法
4185
查看次数

标签 统计

bulk-load ×1

deadlock ×1

indexing ×1

locking ×1

oracle ×1

performance ×1

sql ×1

sql-server ×1