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

    一、表锁(偏读):

    偏向MyISAM存储引擎,开销小,加锁快;无死锁;锁定粒度大,发生锁冲突的概率最高,并发低。

    -- 查看是否有表锁
    show open tables;
    -- 加表锁(读锁-共享锁、写锁)
    lock table 表名 read, 表名 write;
    -- 解锁
    unlock tables;

    MyISAM在执行查询语句(select)前,会自动给涉及的所有表加读锁,在执行增删改操作前,会自动给涉及的表加写锁。
    mysql的表锁有两种模式:
    表共享读锁
    表独占写锁

    对MyISAM表进行操作,会有以下情况:
    1、对MyISAM表的读操作(加读锁),不会阻塞其他进程对同一表的读请求,但会阻塞对同一表的写请求。只有当读锁释放后,
    才会执行其他进程的写操作。
    2、对MyISAM表的写操作(加写锁),会阻塞其他进程对同一表的读和写操作,只有当写锁释放后,才会执行其他进程的读写操作。
    简而言之,就是读锁会阻塞写,但是不会堵塞读。而写锁则会把读和写都堵塞。

    表锁分析
    -- 查看是否出现表锁
    show open tables;

    -- 查看表锁定次数与发生等待的次数
    show status like 'table%';
    结果:
    Table_locks_immediate:产生表级锁定的次数,表示可以立即获取锁的查询次数。
    Table_locks_waited:出现表级锁定争用而发生等待的次数,此值高则说明存在着较严重的表级锁争用情况;


    二、行锁:

    偏向InnoDB存储引擎,开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率最低,并发度也最高。
    InnoDB与MyISAM的最大不同有两点:一是支持事务;二是采用了行级锁。

    行锁分析:
    通过检查Innodb_row_lock状态变量来分析系统上的行锁的争夺情况
    命令:show status like 'innodb_row_lock%';

    对各个状态的说明如下:
    innodb_row_lock_current_waits:当前正在等待锁定的数量;
    innodb_row_lock_time:从系统启动到现在锁定总时间长度;
    innodb_row_lock_time_avg:每次等待所花平均时间;
    innodb_row_lock_time_max:从系统启动到现在等待最长的一次所花的时间;
    innodb_row_lock_waits:系统启动后到现在总共等待的次数;

  • 相关阅读:
    异常处理
    添加headers头文件反爬虫
    爬百思不得姐的视频(爬多页时for的循环)
    图片爬取百思不得姐(正则的取法,下载的方法,%s的用法)
    创建一个网页
    集合幂级数总结
    题解(新)
    JOI汉堡肉
    NOIO 2020 r2 总结
    长链剖分
  • 原文地址:https://www.cnblogs.com/gaojr/p/15513791.html
Copyright © 2011-2022 走看看