• 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:系统启动后到现在总共等待的次数;

  • 相关阅读:
    主机名与域名
    Screen 状态栏配置
    linux 修改时间
    vsftpd2.3.2安装、配置详解
    mysql 二进制日志
    linux下mysql操作的命令
    Apache加载PHP.ini顺序
    页面异步加载javascript文件
    一段实现页面上的图片延时加载的js
    如何在MySql中记录SQL日志
  • 原文地址:https://www.cnblogs.com/gaojr/p/15513791.html
Copyright © 2020-2023  润新知