Chinaunix首页 | 论坛 | 博客
  • 博客访问: 427007
  • 博文数量: 239
  • 博客积分: 8010
  • 博客等级: 中将
  • 技术积分: 2431
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-02 21:12
文章分类
文章存档

2008年(239)

我的朋友

分类: DB2/Informix

2008-06-17 23:17:58

系统并发控制的调整

我们前面讲述了锁机制和多版本机制,不同的数据库系统会采用不同的并发控制。用户在管理和使用数据库系统时,应首先了解系统使用了那种并发控制,然后结合相关知识,根据自己的需要对系统的并发控制进行管理和配置。

 

1. 锁机制

 

锁机制是通过锁来实现事务之间的并发处理和可串行化调度,因此避免锁的等待、减少系统在锁管理上的开销是优先要考虑的问题。对使用锁机制的数据库系统,我们在管理时应当坚持以下的原则:

1)选择合理的锁粒度。

记录级别上的锁具有最大的并行处理能力,但对锁的存储和管理需要更多的系统资源。这些正好和表级别上的锁相反。一般来说,交互式的应用系统由于其事务多、涉及的数据量小,可以考虑使用记录级别锁;而对大批量数据的查询和汇总,表级别锁应该是更好的选择。用户应当根据自己的需要,进行合理地选择。

2)应当避免锁的升级。

如果系统中出现锁的升级,就表明系统对锁的使用存在问题。这时,要么调整系统的配置参数,增大整个系统以及单个事务可用的锁数量;要么调整应用程序,改变程序中事务对锁的使用方式。

3)在事务处理中,使用满足业务需要、最小的隔离级别。

由于数据被访问时,隔离级别决定数据如何被加锁、如何与其他事务隔离,因此为事务选择合适的隔离级别很重要。隔离级别不仅影响事务之间的隔离程度,也影响单个事务的性能特性,因为获取、释放锁所要求的CPU、内存资源随隔离级别而改变,隔离级别越高,需要的系统资源就越多。

4)应当在应用系统设计和开发时,就考虑对死锁问题的处理。

不要将死锁问题的解决和处理完全交由数据库系统完成,在应用系统设计和开发时对死锁问题的考虑,将会达到事半功倍的效果。对于死锁很少出现、甚至不会发生的应用系统,可以增大死锁检测的时间间隔,从而减少死锁检测的执行次数,避免不必要的系统开销。

 

2. 多版本两阶段封锁机制

 

多版本两阶段封锁机制使用数据的多个版本和两阶段封锁协议,来实现事务之间的并发处理和可串行化调度。对使用这种并发控制机制的数据库系统,我们在管理时应当做以下的考虑:

1)合理地分布数据的存放。

相对于锁机制,一个数据项存在多个版本,需要更多的磁盘空间倒是其次,关键是可能有多个事务要同时访问这些数据版本,系统需要消耗更多的I/O操作去读取这些数据。为减少磁盘的I/O竞争,应当仔细地规划数据的存放方式和位置。

2)保证有足够的CPU、内存资源。

相对于锁机制,系统对多版本数据的管理和维护,需要更多的CPU处理时间、更多的内存存放空间。使系统有足够的CPU、内存资源,可保证数据库系统的正常运行。

3)系统一般不会出现锁的问题,但也要合理地使用锁。

由于查询处理不需要任何锁,大大降低了系统使用的锁数目以及对锁的管理,死锁发生的可能性也大大减少。但对死锁的避免以及数据更新处理时对锁级别的选择,也需要在应用系统设计和开发时仔细地考虑和规划。

阅读(654) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~