首页 > 数据库技术 > 详细

innodb 源码分析 --锁

时间:2015-11-04 14:22:24      阅读:354      评论:0      收藏:0      [点我收藏+]

innodb引擎中的锁分两种

1)针对数据结构, 如链表 

    互斥锁

    读写锁

2)针对数据表中记录

    行锁

    表锁

 

innodb中的互斥锁是依据操作系统中的spin lock自旋锁,进行一些修改而成的

 修改方面:

  1.当获得不到锁时, 一直在CPU高速缓冲区中读取值,避免与内存打交道,以免造成总线风暴

      2.当自旋超过20us后,将线程放入wait array,待时机成熟后再唤醒,而不是放入系统的等待队列,避免上下文切换

详情请见 http://www.cnblogs.com/taek/p/4809685.html

 

这里主要分析下innodb的行锁

当执行sql 如 update user set name=‘xx‘ where id=1;时

innodb引擎会针对id=1这条记录加一个LOCK_REC行锁

这个锁并没有附在物理记录本身,而是存储于单独一个结构体中

typedef struct lock_struct    lock_t; //利用typedef定义一个变量的类型

/** Lock struct */
struct lock_struct {
    trx_t*        trx;        /*!< transaction owning the lock */
    UT_LIST_NODE_T(lock_t)  trx_locks;    /*!< list of the locks of the transaction */
    ulint        type_mode;    /*!< lock type, mode, LOCK_GAP or
                            LOCK_REC_NOT_GAP,
                            LOCK_INSERT_INTENTION,
                            wait flag, ORed */
    hash_node_t    hash;        /*!< hash chain node for a record lock */
    dict_index_t*    index;        /*!< index for a record lock */
    union {
        lock_table_t    tab_lock;    /*!< table lock */
        lock_rec_t    rec_lock;     /*!< record lock */
    } un_member;                  /*!< lock details */
};

 

 

加锁时分加快锁和加慢锁

 

innodb 源码分析 --锁

原文:http://www.cnblogs.com/taek/p/4935651.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!