Mysql的锁机制之表锁

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: Mysql的锁机制之表锁 锁是计算机协调多个进程或线程并发访问某一资源的机制.       在数据库中,除传统的计算资源(如CPU,RAM,I/O等)的争用外,数据也是一种供许多用户共享的资源,如何保证数据并发访问的一致性,有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素.

Mysql的锁机制之表锁

锁是计算机协调多个进程或线程并发访问某一资源的机制.

      在数据库中,除传统的计算资源(如CPU,RAM,I/O等)的争用外,数据也是一种供许多用户共享的资源,如何保证数据并发访问的一致性,有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素.从这个角度来说,锁对数据库而言现得尤其重要,也更加复杂.

   按照对数据库的操作分为读锁和写锁

   读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响.

   写锁(排他锁):当前写操作没有完成前,它会阻断其他写锁和读锁.

   按对数据操作的粒度分为表锁和行锁。

    表锁:开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低
    行锁:开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高
    页锁:开销和加锁速度介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般

 


  lock table 表名字 read(write),表名字2 read(write);
查看表上加过的锁.
 show open tables;

       MyISAM表锁

读锁

     MyISAM存储引擎只支持表锁,新建book表,存储引擎为MyISAM.

写锁

为book表添加写锁;

  MyISAM在执行查询语句之前,会自动给涉及的所有表加读锁,在执行增删改操作前,会自动给涉及的表加写锁. 

   MySQL的表级锁有两种模式:

        表共享读锁(Table Read Lock)

        表独占写锁(Table Write Lock)

锁类型 可否兼容 读锁 读锁
读锁
写锁

结论:对MyISAM表进行操作,会有以下情况

    1.对MyISAM表的读操作(加读锁),不会阻塞其他进程对同意表的读请求,但会阻塞对同一表的写请求.只有当读锁释放后,

才会执行其他进程的写操作.

     2,对MyISAM表的写操作(加写锁),会阻塞其他进程对同一表的读和写操作,只有当写锁释放后,才会执行其他进程的读写操作.

         读锁会阻塞写,但是不会阻塞读。而写锁则会把读和写都阻塞.

看看哪些表被锁了

SHOW OPEN TABLES;

分析表锁定 


SHOW STATUS LIKE 'table%';
SHOW GLOBAL STATUS LIKE 'table_locks%';

Table_locks_immediate 和Table_locks_waited状态变量记录MySQL内部表级锁定的情况,

Table_locks_immediate 产生表级锁定的次数,表示可以立即获取锁的查询次数,每次立即获得则加1

Table_locks_waited  出现表级锁定争用而发生等待的次数(不能立即获取锁的次数,没等待一次锁则加1),此值高则说明存在着较严重的表级锁定争用情况.

    MyISAM的读写锁调度是写优先,这也是MyISAM不适合做写为主表的引擎.因为写锁后,其他线程不能做任何操作,大量的更新会使查询很难得到锁,从而造成永远阻塞.

如果 Table_locks_immediate / Table_locks_waited > 5000,最好采用InnoDB引擎,因为InnoDB是行锁而MyISAM是表锁,对于高并发写入的应用InnoDB效果会好些.

原文地址 https://blog.csdn.net/yjaspire/article/details/81133149
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
关系型数据库 MySQL
|
23天前
|
SQL 关系型数据库 MySQL
【MySQL】一文带你搞懂MySQL中的各种锁
【MySQL】一文带你搞懂MySQL中的各种锁
37 0
|
24天前
|
存储 SQL 关系型数据库
MySQL - 深入理解锁机制和实战场景
MySQL - 深入理解锁机制和实战场景
|
2月前
|
存储 监控 关系型数据库
mysql中的锁及其作用
mysql中的锁及其作用
19 0
|
2天前
|
SQL 关系型数据库 MySQL
Mysql事务隔离级别和锁特性
Mysql事务隔离级别和锁特性
|
2天前
|
存储 关系型数据库 MySQL
mysql的锁机制实现原理
mysql的锁机制实现原理
|
8天前
|
存储 SQL 关系型数据库
MySQL事务底层原理和MVCC机制
MySQL事务底层原理和MVCC机制
16 1
|
10天前
|
存储 关系型数据库 MySQL
mysql锁的应用
mysql锁的应用
13 0
|
23天前
|
存储 关系型数据库 MySQL
百度搜索:蓝易云【MySQL的行锁、表锁触发教程】
需要注意的是,行锁和表锁的使用会对数据库的性能产生影响。行锁可以提高并发性,但可能导致死锁问题,而表锁可以简单粗暴地避免死锁,但会降低并发性。因此,在使用锁时需要根据实际情况来选择合适的锁级别。如果需要更精细的并发控制,可以考虑使用行锁,如果对并发性要求不高,可以考虑使用表锁。
18 1
|
1月前
|
存储 缓存 关系型数据库
Mysql 专栏 - MVCC机制
Mysql 专栏 - MVCC机制
59 0