zoukankan      html  css  js  c++  java
  • mysql 并发 行锁 inoodb

    http://www.cnblogs.com/hitwtx/archive/2011/09/12/2174297.html

    1. 锁是数据库区别于文件系统的重要特性之1,锁机制用于管理对共享文件的并发访问

       innodb使用的是行级锁

       myisam,使用的是表级锁,在并发条件下,读操作没有问题,但是并发插入会有性能上的影响

       sql server 2005之前的版本都是页级锁的,相对于myisam言,并发访问上性能有所提高,在2005以及之后,sql server 支持乐观并发和悲观并发,在乐观并发下执行行级锁,但实现方式和与innodb不相同,在sql server中,锁是一种稀有的资源,而在mysql innodb中,锁没有相关的开销,可以同时得到并发性和一致性

    2. innodb的锁类型

        共享锁和排他锁

       共享锁 (S Lock): 允许事务读一行数据

       排他锁(X Lock):允许事务写或者修改一行数据

      ,可以在一行上使多个S锁,但是只要有X锁,就不能在加其他的锁了

      innodb存储引擎支持多粒度锁定,这种锁定允许在表级和行级上的锁同时存在,为了支持在不同粒度上架锁,innodb  提供了一种意向锁,意向锁是表级锁,且分为 意向共享锁和排他共享锁


    +++++++++++++++++++++++++++++++++++++

    http://blog.csdn.net/xiaoxu0123/article/details/5736172

    获取InnoDB行锁争用情况    

    可以通过检查InnoDB_row_lock状态变量来分析系统上的行锁的争夺情况:

    mysql> show status like 'innodb_row_lock%';

    +-------------------------------+-------+

    | Variable_name                 | Value |

    +-------------------------------+-------+

    | InnoDB_row_lock_current_waits | 0     |

    | InnoDB_row_lock_time          | 0     |

    | InnoDB_row_lock_time_avg      | 0     |

    | InnoDB_row_lock_time_max      | 0     |

    | InnoDB_row_lock_waits         | 0     |

    +-------------------------------+-------+

    5 rows in set (0.01 sec)

    如果发现锁争用比较严重,如InnoDB_row_lock_waits和InnoDB_row_lock_time_avg的值比较高,还可以通过设置InnoDB Monitors来进一步观察发生锁冲突的表、数据行等,并分析锁争用的原因。

    具体方法如下:

    mysql> CREATE TABLE innodb_monitor(a INT) ENGINE=INNODB;

    Query OK, 0 rows affected (0.14 sec)

    然后就可以用下面的语句来进行查看:

    mysql> Show innodb status/G;

    *************************** 1. row ***************************

      Type: InnoDB

      Name:

    Status:

    ------------

    TRANSACTIONS

    ------------

    Trx id counter 0 117472192

    Purge done for trx's n:o < 0 117472190 undo n:o < 0 0

    History list length 17

    Total number of lock structs in row lock hash table 0

    LIST OF TRANSACTIONS FOR EACH SESSION:

    ---TRANSACTION 0 117472185, not started, process no 11052, OS thread id 1158191456

    MySQL thread id 200610, query id 291197 localhost root

    ---TRANSACTION 0 117472183, not started, process no 11052, OS thread id 1158723936

    MySQL thread id 199285, query id 291199 localhost root

    Show innodb status

    监视器可以通过发出下列语句来停止查看:

    mysql> DROP TABLE innodb_monitor;

    Query OK, 0 rows affected (0.05 sec)

    设 置监视器后,在SHOW INNODB STATUS的显示内容中,会有详细的当前锁等待的信息,包括表名、锁类型、锁定记录的情况等,便于进行进一步的分析和问题的确定。打开监视器以后,默认 情况下每15秒会向日志中记录监控的内容,如果长时间打开会导致.err文件变得非常的巨大,所以用户在确认问题原因之后,要记得删除监控表以关闭监视 器,或者通过使用“--console”选项来启动服务器以关闭写日志文件。


    ++++++++++++++++++++++++++++++++++


    20.3.4 InnoDB行锁实现方式

    http://book.51cto.com/art/200803/68127.htm
    <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
    阅读(661) | 评论(0) | 转发(1) |
    给主人留下些什么吧!~~
    评论热议
  • 相关阅读:
    java.lang.Math.pow方法
    【动态代理】增强代理方法、代理多种方法
    Exception in thread "main" java.net.ConnectException: Connection refused: connect
    serialVersionUID设置自动添加
    三个线程之间的通信
    LinkedList源码分析
    JavaScript学习
    Java学习大纲
    w3cschool-javascript教程-学习笔记
    FreeMarker学习总结
  • 原文地址:https://www.cnblogs.com/ztguang/p/12648305.html
Copyright © 2011-2022 走看看