zoukankan      html  css  js  c++  java
  • mysql锁机制

    MySQL 不同的存储引擎支持不同的锁机制
    
    MyISAM和MEMORY存储引擎 使用 表级锁(table-level locking)
    BDB存储引擎使用页面锁(page-level locking),但也支持表级锁
    InnoDB存储引擎 支持行级锁(row-level locking) 表级锁, 默认使用行级锁
    
    
    表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 
    行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 
    页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般 
    
    MyISAM表锁
    表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)
    
    读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求
    写操作,会阻塞其他用户对同一表的读和写操作
    当一个线程获得对一个表的写锁后,只有持有锁的线程可以对表进行更新操作。其他线程的读、写操作都会等待,直到锁被释放为止。
    
    
    
    MyISAM执行查询语句(SELECT) 自动给涉及的所有表加读锁,
    在执行更新操作 (UPDATE、DELETE、INSERT等)会自动给涉及的表加写锁, 
    一般不需要直接用LOCK TABLE命令给MyISAM表显式加锁
    
    查询表级锁争用情况
    
    show status like 'table%';
    
    Variable_name | Value 
    Table_locks_immediate | 2979 
    Table_locks_waited | 0 
    
    
    并发插入(Concurrent Inserts)
    
    MyISAM表的读和写是串行的,在一定条件下,支持查询和插入操作的并发进行。 
    concurrent_insert,用于控制并发插入行为,其值分别可以为0 1 2
    
    0  不允许并发插入。
    1  如果MyISAM表中没有空洞(即表的中间没有被删除的行),MyISAM允许在一个进程读表的同时,另一个进程从表尾插入记录,默认设置。
    2  无论MyISAM表中有没有空洞,都允许在表尾并发插入记录。
    
  • 相关阅读:
    c++/c语言中如何调用DLL
    fortran出现stack overflow的原因及解决办法
    iOS: ARC和非ARC下使用Block属性的问题
    Objective-C Autorelease Pool 的实现原理
    class-dump 复制到/usr/bin目录不可写,Operation not permitted 解决办法
    Auto Layout 使用心得
    iOS-关于微信支付
    IOS应用安全(五):高级Runtime分析和操作
    Objective-C Runtime 运行时之六:拾遗
    Objective-C Runtime 运行时之五:协议与分类
  • 原文地址:https://www.cnblogs.com/daomeidan/p/12393347.html
Copyright © 2011-2022 走看看