eX
tremeDB采用行级锁latches,是用原子操作实现的一种轻量级的高效的锁。
MVCC事务管理器可以并发运行读写事务。由于latches存在,当并发的事务更新同一个对象时,容易出现事务冲突,MVCC事务管理器会让一个事务完成更新操作,而其它的事务被中止,并返回应用程序MCO_E_CONFLICT。应用程序可以判断返回的错误码来解决冲突:
-
do {
-
mco_trans_start( db,
-
MCO_READ_WRITE,
-
MCO_TRANS_FOREGROUND,
-
&t);
-
-
...<update database>...
-
-
rc = mco_trans_commit(t);
-
} while ( rc == MCO_E_CONFLICT );
如果并发的事务量非常大的时候,大量的冲突会导致应用程序性能降低。而这时候,MVCC事务管理器会临时将隔离级别改为MCO_SERIALIZABLE。在C/C++应用程序中,可以通过下面的函数来设置冲突的阀值。
-
void mco_trans_optimistic_threshold( mco_db_h db,
-
int max_conflicts_percent,
-
int disable_period)
当冲突的事务数量超过设置的阀值,事务管理器将隔离级别改为MCO_SERIALIZABLE。默认值为100,意味着无论有多少事务冲突都不会有存在这个阀值。
阅读(1382) | 评论(0) | 转发(0) |