mysql myisam 锁机制_MySQL--MyISAM之锁机制

一、概述

MySQL有三种锁的级别:页级、表级、行级。

MyISAM存储引擎采用的是表级锁(table-level locking);

MySQL这3种锁的特性可大致归纳如下:

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

二、MyISAM表锁

MyISAM存储引擎只支持表锁,是现在用得最多的存储引擎。

1、查询表级锁争用情况

可以通过检查table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争夺:

mysql> show status like 'table%';

+———————–+———-+

| Variable_name | Value |

+———————–+———-+

| Table_locks_immediate | 76939364 |  (表示可以立即获取锁的次数)

| Table_locks_waited | 305089 |  (表示不能立即获取锁,需要等待锁的次数;)

+———————–+———-+

2 rows in set (0.00 sec)

Table_locks_waited/(Table_locks_immediate+Table_locks_waited)

这个比例值越大说明表级锁争用的情况越严重。

例:比例值=0.01说明100次进程里就有一次是需要等待锁的进程;

2、MySQL表级锁的锁模式

MySQL的表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table WriteLock)。MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁。所以对MyISAM表进行操作,会有以下情况:

读锁:当某一进程对某张表进行读操作时(select),其他线程也可以读,但是不能写。简单的理解就是,我读的时候你不能写。

写锁:当某一进程对某种表某张表的写时(insert,update,,delete),其他线程不能写也不能读。可以理解为,我写的时候,你不能读,也不能写。

因此MyISAM的读操作和写操作,以及写操作之间是串行的!MyISAM在执行读写操作的时候会自动给表加相应的锁(也就是说不用显示的使用lock table命令),MyISAM总是一次获得SQL语句所需要的全部锁,这也是MyISAM不会出现死锁的原因。

3、并发插入

原则上数据表有一个读锁时,其它进程无法对此表进行更新操作,但在一定条件下,MyISAM表也支持查询和插入操作的并发进行。MyISAM存储引擎有一个系统变量concurrent_insert,专门用以控制其并发插入的行为,其值分别可以为0、1或2。

a、当concurrent_insert设置为0时,不允许并发插入。

b、当concurrent_insert设置为1时,如果MyISAM表中没有空洞(即表的中间没有被删除的行),MyISAM允许在一个进程读表的同时,另一个进程从表尾插入记录。这也是MySQL的默认设置。

c、当concurrent_insert设置为2时,无论MyISAM表中有没有空洞,都允许在表尾并发插入记录。

例子:

当前进程:

1)mysql> lock table first_test read local;--加入local选项是说明,在表满足并发插入的前提下,允许在末尾插入数据。当前进程不能进行插入和更新操作

Query OK, 0 rows affected (0.00 sec)

2)mysql> insert into first_test(age) values(15);

ERROR 1099 (HY000): Table 'first_test' was locked

with a READ lock and can't be updated

3)mysql> update first_test set age=200 where id =1;

ERROR 1099 (HY000): Table 'first_test' was locked

with a READ lock and can't be updated

其他进程:

1)mysql> insert into first_test(age) values(15);--其他进程可以进行插入、查询和更新操作,但是更新操作要等待。。。

Query OK, 1 row affected (0.00 sec)

2)mysql> update first_test set age=200 where id =2;

等待.....

3)mysql> select * from first_test;

+----+----+

| id |age |

+----+---+

| 1 | 100|

| 2 | 11 |

| 3 | 12 |

| 4 | 13 |

| 5 | 14 |

| 6 | 14 |

+---+-- -+

6 rows in set (0.00 sec)

释放锁以后皆大欢喜

mysql> unlock table;

Query OK, 0 rows affected (0.00 sec)

4、MyISAM的锁调度

在MyISAM中当一个进程请求某张表的读锁,而另一个进程同时也请求写锁,Mysql会先让后者获得写锁。即使读请求比写请求先到达锁等待队列,写锁也会插入到读锁之前。因为Mysql总是认为写请求一般比读请求重要,这也就是MyISAM不太适合有大量的读写操作的应用的原因,因为大量的写请求会让查询操作很难获取到读锁,有可能永远阻塞。

可以通过一些设置来调节MyISAM的调度行为:

a、通过指定启动参数low-priority-updates,使MyISAM引擎默认给予读请求以优先的权利。

b、通过执行命令SET LOW_PRIORITY_UPDATES=1,使该连接发出的更新请求优先级降低。

c、通过指定INSERT、UPDATE、DELETE语句的LOW_PRIORITY属性,降低该语句的优先级。

上面3种方法都是要么更新优先,要么查询优先的方法。这里要说明的就是,不要盲目的给mysql设置为读优先,因为一些需要长时间运行的查询操作,也会使写进程“饿死”。只有根据实际情况,来决定设置哪种操作优先。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大厂架构师经验分享!成功跳槽字节跳动

前言 毫不夸张地说,JVM是现代软件工程最成功的案例之一。因为它自带GC,又有无数可以微调的参数,且运行极其稳定可靠,所以,许多厂商的核心业务系统,才敢放心地用Java编写,运行在JVM之上。 近几…

java停车场管理系统程序设计代码_社区养老服务管理系统,java程序设计

登录界面菜单功能界面1菜单功能界面2菜单功能界面3社区养老服务管理系统设计与实现springspringMVCmybatis框架对象(javaBean,pojo)设计:服务工单javaBean创建语句如下:package project.model;import org.springframework.format.annotation.DateTimeFor…

大厂面试必问!50w字+的Java技术类校招面试题汇总

前言 刚刚过去的双十一,让“高性能”“高可用”“亿级”这3个词变成了技术热点词汇,也让很多人再次萌发成为「架构师」的想法。先问大家一个问题:你觉得把代码熟练、完成需求加上点勤奋,就能成为架构师么?如果你这么认…

c++客户端发送加锁_MySQL语句加锁分析详解

前言建立一个存储三国英雄的hero表:CREATE TABLE hero ( number INT, name VARCHAR(100), country varchar(100), PRIMARY KEY (number), KEY idx_name (name)) EngineInnoDB CHARSETutf8;然后向这个表里插入几条记录:INSERT INTO hero V…

大厂面试必问!如何写出高效率的SQL

前言 Spring框架自2002年诞生以来一直备受开发者青睐,它包括SpringMVC、SpringBoot、Spring Cloud、Spring Cloud Dataflow等解决方案。有人亲切的称之为:Spring 全家桶。 很多研发人员把spring看作心目中最好的java项目,没有之一。所以这是…

accsess转成mysql语句_轻松教你SQL转ACCESS

SQL数据库转access数据库步骤: 1. 建立access数据库:在access中建立access数据库和表,access字段类型与sql中字段类型的对应关系。 2. 在Access中建表是应注意它的保留关键字:比如Password 如果表中的某个字段使用了关键字&#x…

大厂首发:2021年Java工作或更难找

前言 提起MySQL,其实网上已经有一大把教程了,为什么我还要写这篇文章呢,大概是因为网上很多网站都是比较零散,而且描述不够直观,不能系统对MySQL相关知识有一个系统的学习,导致不能形成知识体系。为此我撰…

linux mysql 运行状态_Linux中使用mysqladmin extended-status配合Linux命令查看MySQL运行状态...

mysqladmin是MySQL一个重要的客户端,最常见的是使用它来关闭数据库,除此,该命令还可以了解MySQL运行状态、进程信息、进程杀死等。本文介绍一下如何使用mysqladmin extended-status(因为没有"歧义",所以可以使用ext代替…

大厂首发:338页网易Java面试真题解析火爆全网

前言 为什么互联网资讯这么发达,但是没有出现技术人才井喷? 为什么会出现应届生薪资倒挂多年老员工的现象? 这个世界有太多的现象都可以用**“二八定律”**来解释。 20%拿着高工资,80%每天挣扎在增删改查边缘。 职场一分钱一…

mysql 导入dbm文件_DBM数据导入到mysql数据库方法

本文章分享一篇关于DBM数据导入到mysql数据库方法,有需要的同学可以参考一下本实例。首先说明一下,我以前使用PERL,保存文件 用DBM,有5万多条记录,每条记录有15个字段。现在想用MYSQL,要吧记录导过来。第一…

大牛手把手教你!2021Java最新大厂面试真题

引言 众所周知,软件系统有三高:**高并发、高性能、高可用。**三者既有区别也有联系,门门道道很多,全面讨论可以大战三天三夜。 高并发对于Java开发者来说都不陌生,每年天猫双十一,秒杀大促等场景阿里都稳…

高通8155车载芯片_WEY来“摩卡”云首秀,搭载高通8155芯片

本期亮点“咖啡”一词源自埃塞俄比亚的一个名叫卡法的古镇,在希腊语中“Kaweh”的意思是“力量与热情“,而摩卡咖啡代表着创新和更多可能性。摩卡咖啡是由浓缩咖啡、牛奶、鲜奶油及巧克力糖浆制成的“巧克力咖啡”,相比于其他制作方法&#x…

大牛深入讲解!高并发你真的理解透彻了吗

前言 最其实不管什么时候,找工作都跑不了面试。目前很多小编都做了面试手册了,那就是别人家的孩子都有糖了,作为一个自觉的小编,必须搞。 容我先絮叨一下,制作这个面试手册差不多花了3个多星期时间,过程还…

太厉害了!2021年互联网大厂Java笔经

开头 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。在项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应&…

fritzing导入元件_超屌的 fritzing 新建元件

标签:fritzing 有多好,用了才知道,但是通常会遇到一个问题,他的元件库不一定够用,这时候就得自己做元件了,但是搜了一下网上没有相关的教程啊。算了,去官网看英文吧。。然后官网的帮助见 http:/…

java将字节数组转换成字符串,面试心得体会

1. 前言 大家都知道,Postman是一个非常受欢迎的API接口调试工具,提供有Chrome扩展插件版和独立的APP,不过它的很多高级功能都需要付费才能使用。 如果你连Postman都还没有用过,不妨可以先体验一番。 Postman官网: h…

linux mysql 删除表脚本_linux shell脚本自动删除mysql表前3个月的数据

RDS有一个数据库表tbl_online表,有6千万数据,需要清理,保留3个月。步骤如下:创建月表将需要删除的数据写入月表删除数据优化表shell如下:#!/bin/bashbase"rdsxx.mysql.rds.aliyuncs.com"#前3个月的日期months_agodate -d "-3 …

java将数组中的数据修改,深度集成!

京东Java研发岗一面(基础面,约1小时) 自我介绍,主要讲讲做了什么和擅长什么 springmvc和spring-boot区别 Autowired的实现原理 Bean的默认作用范围是什么?其他的作用范围? 索引是什么概念有什么作用&am…

mysql oracle 表空间大小_最简单的查询表空间的使用量、剩余量的方法 - Focus on Oracle、MySQL and GNU/Linux...

比起用其它的视图写长长的一段脚本、简便多了、据说从7.x到11g都可以用sm$ts_used & sm$ts_freeidle> select * from sm$ts_used;TABLESPACE_NAME BYTES------------------------------ ----------SYSAUX 256573440UNDOTBS1 8323072USERS 3211264SYSTEM 50678988…

java小游戏毕业论文,你不懂还不学?

1. Spring 特点 Spring 主要有如下特点: 轻量级:Spring 是非侵入式,其中的对象不依赖 Spring 的特定类;控制反转(IoC):通过 IoC,促进了低耦合,一个对象依赖的其他对象通…