并发疑惑
最近学习数据库的事务与并发,看了几天还是很困惑;如:数据库的事务隔离级别,目的是保证并发读取数据的正确性,隔离级别有四种,其中低级别的 read uncommitted会发生脏读、重复读、虚读等,高级别的serializable则都不会发生,事务隔离级别越高并发性能则越低,事务隔离级别越低则并发能力越高,并发能力与数据准确似乎很矛盾,有的大型系统、网站处理并发能力感觉非常厉害,但,又是怎么保证数据的准确呢?? 注:本人没接触过大型项目 sql?server 并发,事务
[解决办法]
并发这个不能一概而论,如果并发都是很小的事务,假设在默认的隔离级别下,比如update只影响1、2行,并且马上提交,操作顺序也合理,那事务一下子就结束,这种情况下并发量其实可以达到很大。但是如果一个update每次都要全表扫描、更新聚集索引等,那并发度就会降低。
有些系统通过使用快照隔离,借助tempdb来提高并发度。我做过的几个项目其实也不大,库也是200G~1T左右,即使默认隔离级别都不会出现什么问题。
[解决办法]
事务隔离级别越低则并发能力越高,并发能力与数据准确似乎很矛盾
这个理解,一般情况下是对的,这个确实是一个矛盾。
说到底就是一种资源的争用问题,资源总是有限的,所以才会出现这个矛盾
但把思维扩展一下,比如你采用了分区表的设计方案,那么就能把对一个表的操作,分散到这个表的多个分区中,那么就能缓解这种矛盾