意向锁如何提高性能
2011-03-14 12:17
155 查看
最近看《Microsoft Sql Server企业级平台管理实践》,书中提到,意向锁是用来提高所冲突监测性能的(Page277),但是后面的解释只是一笔带过,语焉不详,后来在网上找到一篇牛新庄博士的文章《DB2和 Oracle的并发控制(锁)比较》有点豁然开朗,试用一个小例子重新阐释一遍:
假设有一个张表Student,有100万条数据,其中有三行:
Name Age
张三 -11
李四 -13
王五 14
程序员A发现数据有错误,有一些学生的年龄有负数,他连接数据库,打算把所有的负数变成正数,并且希望在修改的时候,别人不可以读取数据。此时他对两行数据加了X排他锁。
程序员B发现有几个的姓名写错了,要修改,这时他打算给整张表加上S锁,也就是,别人可以读取数据,但是不能修改。这时数据库需要判断,这张表是否可以加S锁?如何判断呢:要看这张表中的100万行数据中有没有X锁,如果被加锁的这两行数据刚好在最后,那么要判断100万次才能得出结论:有一行加了X锁,该表不能加S锁,请等待该锁释放!显然这速度慢得多。假如有了意向锁,在A连接的时候,给行加上X锁的时候,对该表加上IX锁。B连接申请表的S锁之前,先看到该表有IX锁,就马上知道需要等待,而不需要去判断每一行的锁了。
假设有一个张表Student,有100万条数据,其中有三行:
Name Age
张三 -11
李四 -13
王五 14
程序员A发现数据有错误,有一些学生的年龄有负数,他连接数据库,打算把所有的负数变成正数,并且希望在修改的时候,别人不可以读取数据。此时他对两行数据加了X排他锁。
程序员B发现有几个的姓名写错了,要修改,这时他打算给整张表加上S锁,也就是,别人可以读取数据,但是不能修改。这时数据库需要判断,这张表是否可以加S锁?如何判断呢:要看这张表中的100万行数据中有没有X锁,如果被加锁的这两行数据刚好在最后,那么要判断100万次才能得出结论:有一行加了X锁,该表不能加S锁,请等待该锁释放!显然这速度慢得多。假如有了意向锁,在A连接的时候,给行加上X锁的时候,对该表加上IX锁。B连接申请表的S锁之前,先看到该表有IX锁,就马上知道需要等待,而不需要去判断每一行的锁了。
相关文章推荐
- 意向锁如何提高性能
- Windows 7系统如何调节视觉效果从而提高性能?
- 如何最大限度提高.NET的性能
- 如何使用Rust提高Ruby性能
- php大型网站如何提高性能和并发访问
- 如何提高 App 性能
- 如何让提高ASP.NET性能
- 如何真正提高ASP.NET网站的性能
- 如何提高深度学习(和机器学习)的性能
- 如何用分表存储来提高性能
- 【探讨】索引视图如何提高性能
- 如何提高读取BSEG的性能(sap已清项和未清项的提取)
- 如何提高 Java 中锁的性能
- 如何优化JAVA程序开发,提高JAVA性能?
- Web前端性能优化——如何提高页面加载速度
- 【Java语言】如何提高Java程序性能?
- 如何提高 Java 中锁的性能
- Web前端性能优化——如何提高页面加载速度
- 应该如何利用JNI技术提高Java的性能详解
- 如何提高Java并发编程中锁的性能