sql server 高级技巧系列之四:事务以及并发

23
MSSQL 技技技技技技 技技技技技技 中中中中中中中中中中中 中中

Upload: -

Post on 24-Jul-2015

1.873 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Sql Server 高级技巧系列之四:事务以及并发

MSSQL技巧系列之四:事务以及并发

中讯汉杨微软电信项目组:向翔

Page 2: Sql Server 高级技巧系列之四:事务以及并发

ACID

• 原子性 Atomicty• 一致性 Consistency• 隔离性 Isolation• 持久性 Duration

Page 3: Sql Server 高级技巧系列之四:事务以及并发

并发控制模型

• 悲观并发• 读写的阻塞• 乐观并发• 读写的并行

Page 4: Sql Server 高级技巧系列之四:事务以及并发

悲观并发模型

• 一个锁定系统,可以阻止用户以影响其他用户的方式修改数据。如果用户执行的操作导致应用了某个锁,只有这个锁的所有者释放该锁,其他用户才能执行与该锁冲突的操作。这种方法之所以称为悲观并发控制,是因为它主要用于数据争用激烈的环境中,以及发生并发冲突时用锁保护数据的成本低于回滚事务的成本的环境中。

Page 5: Sql Server 高级技巧系列之四:事务以及并发

乐观并发模型

• 在乐观并发控制中,用户读取数据时不锁定数据。当一个用户更新数据时,系统将进行检查,查看该用户读取数据后其他用户是否又更改了该数据。

• 这种方法之所以称为乐观并发控制,是因为它主要用于数据争用较少的环境中,以及回滚事务的成本偶尔高于读取数据时锁定数据的成本的环境中。

Page 6: Sql Server 高级技巧系列之四:事务以及并发

并发带来的数据问题

• 丢失更新• 脏读• 不可重复读• 幻影读

Page 7: Sql Server 高级技巧系列之四:事务以及并发

丢失更新

• 两个会话同时读取了同一数据后并且又更新了数据,造成一方的更新数据丢失

Page 8: Sql Server 高级技巧系列之四:事务以及并发

脏读

• 一个读取会话读取了未提交事务的数据,然后此事务在其后又回滚了数据,导致读取会话读取的数据不真实

Page 9: Sql Server 高级技巧系列之四:事务以及并发

不可重复读

• 两个会话中其中一个读取数据后又再次读取发现数据并不一致,原因在于两次读取数据间被其他事物更改过一次数据

Page 10: Sql Server 高级技巧系列之四:事务以及并发

幻影读

• 在一次查询中将 where 条件的数据查出,然后删除此部分数据,结果发现在事务完成后却又还存在满足 where 条件的记录,原因在于删除前数据已经又被插入了满足条件的新数据

Page 11: Sql Server 高级技巧系列之四:事务以及并发

隔离级别

• MSSQL 的隔离级别专门用于管理数据的各种并发问题,使得在满足现有数据一致性的同时,以更快的速度运行数据系统

Page 12: Sql Server 高级技巧系列之四:事务以及并发

未提交读

• 放弃对高一致性数据的追求,而强求的是数据访问的并发能力,未提交读是通过使数据操作时不占用任何锁来实现的。

• 该选项的作用与在事务内所有 SELECT 语句中的所有表上设置 NOLOCK 相同。

Page 13: Sql Server 高级技巧系列之四:事务以及并发

已提交读

• 保证一个操作不会读到别的会话已经修改但是并未提交的事务数据。

• 这样可以防止脏读。

Page 14: Sql Server 高级技巧系列之四:事务以及并发

可重复读

• 指定语句不能读取已由其他事务修改但尚未提交的行,并且指定,其他任何事务都不能在当前事务完成之前修改由当前事务读取的数据。

• 防止不可重复读

Page 15: Sql Server 高级技巧系列之四:事务以及并发

可串行化读

• 在事务未提交以前其他事务不可以对当前事务内的更新插入删除的条件记录上做修改。

• 防止幻影读

Page 16: Sql Server 高级技巧系列之四:事务以及并发

闩和锁

•闩是保持数据的物理一致性• 锁是保持数据的逻辑一致性•闩是在数据页拆分,索引树更新等情况

时发生

Page 17: Sql Server 高级技巧系列之四:事务以及并发

锁模式

•排他锁•共享锁•意向锁• 更新锁•键范围锁•架构锁

Page 18: Sql Server 高级技巧系列之四:事务以及并发

锁范围

• 行锁•页锁•区锁• 表锁•键锁

Page 19: Sql Server 高级技巧系列之四:事务以及并发

自旋锁

•等待会话会不断请求锁数据,直到他可用为止

Page 20: Sql Server 高级技巧系列之四:事务以及并发

• S 共享锁• X 排他锁• U 更新锁• IS 意图共享锁• IU 意图更新锁• IX 意图排他锁• SIX 共享意图排他锁• SIU 共享意图更新锁• UIX 更新意图排他锁• Sch-S 编译锁• Sch-M 表结构修改锁• BU 大容量插入锁

Page 21: Sql Server 高级技巧系列之四:事务以及并发

锁提示• HoldLock 相当于 serilisable 提示• UPDlock• Tablock 保持表级共享锁• Paglock 页级共享锁• Tablockx 表级独占锁,直到事务结束• Rowlock• ReadUncommitted|Readcommmitted|repeatable|

Serilisable• Nolock• Readpast• xlock

Page 22: Sql Server 高级技巧系列之四:事务以及并发

锁升级

•每个锁占用的内存开销是 64 字节( 32位系统),锁过多会造成内存的巨大浪费

• 在行锁达到一个数量级( 5000 )以后会自动升级为表锁(不会升级为页锁和区锁)

Page 23: Sql Server 高级技巧系列之四:事务以及并发