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

  • 相关阅读:
    22.112.leetcode_path_sum
    21.leetcode111_minimum_depth_of_binary_tree
    20.leetcode110_balanced_binary_tree
    19.leetcode108_convert_sorted_array_to_binary_search_tree
    论文阅读 | RoBERTa: A Robustly Optimized BERT Pretraining Approach
    CheckList:ACL 2020 Best Paper
    激活函数综述
    盘点深度学习中的损失函数
    逻辑回归
    机器学习之参数估计
  • 原文地址:https://www.cnblogs.com/gaojr/p/15513791.html
Copyright © 2020-2023  润新知