Chinaunix首页 | 论坛 | 博客
  • 博客访问: 62645
  • 博文数量: 33
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 345
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-02 08:41
文章分类

全部博文(33)

文章存档

2015年(13)

2014年(20)

我的朋友

分类: 数据库开发技术

2014-12-03 19:23:31

    eXtremeDB采用行级锁latches,是用原子操作实现的一种轻量级的高效的锁。
    MVCC事务管理器可以并发运行读写事务。由于latches存在,当并发的事务更新同一个对象时,容易出现事务冲突,MVCC事务管理器会让一个事务完成更新操作,而其它的事务被中止,并返回应用程序MCO_E_CONFLICT。应用程序可以判断返回的错误码来解决冲突:

点击(此处)折叠或打开

  1. do {
  2.     mco_trans_start( db,
  3.                      MCO_READ_WRITE,
  4.                      MCO_TRANS_FOREGROUND,
  5.                      &t);
  6.  
  7.     ...<update database>...
  8.  
  9.     rc = mco_trans_commit(t);
  10. } while ( rc == MCO_E_CONFLICT );
    如果并发的事务量非常大的时候,大量的冲突会导致应用程序性能降低。而这时候,MVCC事务管理器会临时将隔离级别改为MCO_SERIALIZABLE。在C/C++应用程序中,可以通过下面的函数来设置冲突的阀值。

点击(此处)折叠或打开

  1. void mco_trans_optimistic_threshold( mco_db_h db,
  2.                                      int max_conflicts_percent,
  3.                                      int disable_period)
    当冲突的事务数量超过设置的阀值,事务管理器将隔离级别改为MCO_SERIALIZABLE。默认值为100,意味着无论有多少事务冲突都不会有存在这个阀值。
阅读(1295) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~