|
知识路径: > 测试技术的分类 > 应用负载压力测试 > 负载压力测试实施 > 结果评估与测试报告 > 数据库服务器性能问题及原因分析 >
|
相关知识点:7个
|
|
|
|
锁冲突是每个以关系数据库为核心的信息系统必须解决的问题。这里的锁冲突是指同一类型或不同类型事务在并发执行的情况下,由于资源互斥而相互影响,造成一个或多个事务无法正常执行的情况,包括资源锁定造成的数据库事务超时和死锁两个方面。
|
|
|
|
资源锁定导致的数据库事务超时,其原因是多方面的,其中,批任务影响其他类型独立事务的情况占有相当大的比重。此外,某些改造过的批任务由于频繁对特定资源进行锁定,也会对独立事务造成相当大的影响。如果在设定时间内,数据库服务器由于资源锁定没有能够完成客户端发出的操作请求,数据库服务器将通知被锁定的客户端该操作超时。
|
|
|
某些大粒度事务在并发执行的实例较多时也会造成同类或不同事务的数据库超时。
|
|
|
此外,应用系统如果没有健壮的异常处理机制,很可能造成锁资源不被释放(即,开始的事务既没有提交也没有回滚)。当这种错误发生时,必然造成资源被长久锁定。对此类问题,应用系统在开发的过程中需要采取一套完善的异常处理机制,确保资源不被长期锁定。
|
|
|
|
由于数据库死锁可以看作进程间死锁的一种特殊情况,我们可以采取与处理操作系统死锁相类似的方法解决数据库死锁的问题。造成死锁必须具备下述条件(Coffman et al 1971):
|
|
|
①互斥条件。每一个资源或者被分配给特定的进程,或者可用。
|
|
|
②持有并等待条件。被授权持有资源较早的进程可以请求新的资源。
|
|
|
③不可取代原则。事先被赋予的资源不能够从该进程被强制取走,它们必须被所持有的进程明确释放。
|
|
|
④环等待条件。必须存在两个或者多个进程的环形链,其中每一进程都等待由环形链的下一个成员所持有的资源。
|
|
|
由于软件开发人员对资源争用可能造成的死锁问题往往没有充分考虑,而目前主流数据库管理系统主要采用乐观的并发控制算法,导致应用系统实际使用过程中频繁发生死锁。应该说明,同类型数据库事务的不同实例之间由于访问资源的顺序一致,通常情况不会发生死锁;不同类型事务之间如果没有按照一个统一的契约进行并发访问,将极容易形成死锁。因此,在确保应用系统功能的前提下,制定一个不同事务之间进行并发访问的原则,就可以有效消除环等待,减少死锁发生的可能性。
|
|
|
针对数据库的性能问题,一般应采用什么样的解决办法呢?
|
|
|
在对数据库服务器常见性能问题进行充分研究的基础上,我们制定了一套适用于解决已发布系统性能问题的通用方法,步骤如下:
|
|
|
|
|
|
④对规模较大的数据或者无法通过一般优化解决的锁冲突进行分布。
|
|
|
必须指出,解决数据库性能问题是一个迭代和往复的过程,通常需要在各种条件的矛盾之间寻求最佳的平衡点。
|
|
|