mysql 锁
2021/7/26 2:35:30
本文主要是介绍mysql 锁,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 1 概述
- 1.1 锁的分类
- 2 表锁(偏读)
- 2.2 表锁的使用
- 2.3 表锁读锁的权限
- 2.4 表锁写锁的权限
- 3 行锁
- 4 间隙锁
- 5 怎样锁定一行
- 6 行锁的分析
1 概述
锁是计算机协调多个进程或线程并发访问某一个资源的机制,
在数据库中,除传统的计算资源(cpu,ram,io)的争用外,数据也是许多用户共享的资源,为了保证数据并发访问的一致性,有效性。锁冲突也是影响数据库并发访问性能的一个重要因素
1.1 锁的分类
从对数据操作的类型
-
读锁
针对同一份数据,多个读操作可以同时进行而不会互相影响 -
写锁
当前写操作没有完成前,会阻断其他写锁与读锁
从对数据操作的粒度分
-
表锁
-
行锁
2 表锁(偏读)
偏向myisam存储引擎,开销小,加锁快;无死锁,锁定粒度大,发生锁冲突概率高,并发度最低。
2.2 表锁的使用
- 对锁的查看
show open tables
- 加表锁
lock table [tableName] [read/write]
- 分析表锁定
show status like 'table_locks%';
Table_locks_immediate:产生表级锁定的次数,表示立即获取锁的查询次数,没立即获取锁值加一
Table_locks_waited:出现表级锁定争用而发生等待的次数,此值高则说明存在着严重的表级锁争用情况
- 解锁
unlock tables;
2.3 表锁读锁的权限
表共享读锁 (Table Read Lock):不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求;
2.4 表锁写锁的权限
表独占写锁 (table write lock):会阻塞其他用户对同一表的读和写操作
myisam的读写锁调度是写优先,这也是myisam不适合做写为主表的引擎,因为写锁后,其他线程不能做任何操作,大量更新会使查询很难得到锁,从而造成阻塞。
3 行锁
偏向innodb存储引擎,开销大,加锁慢;会出现死锁,锁粒度最小,发生锁冲突的概率最低,并发度最高。
innodc与myisam1的最大不同有两点:一是支持事务;而是采用了行级锁
索引失效会导致行锁变为表锁
4 间隙锁
- 什么是间隙锁
当我们使用的是范围条件而不是相等条件检索数据,在请求共享或排他锁时,innodb会给符合条件已有的数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做间隙gap,innodb也会对这个间隙加锁。
- 危害
在执行过程中通过范围查找的话,他会锁定整个范围内所有索引键值,即使这个键值不存在。间隙锁有一个致命弱点,就是当锁定一个范围键值之后,即使某些不存在的键值也会被锁定,造成在锁定的时候无法插入锁定键值范围内的任何数据
5 怎样锁定一行
begin; select xxx...for update commit;
select xxx…for update表示锁定某一行后,其他操作会被阻塞,直到锁定行的会话提交commit;
6 行锁的分析
通过innodb_row_lock可以查看航所情况
show status like 'innodb_row_lock%';
innodb_row_lock_current_waits:当前正在等待锁定的数量
innodb_row_lock_time:从系统启动到现在锁定时间的长度(等待的总时长)
innodb_row_lock_watis 等待的总次数
innodb_row_lock_time_avg等待的平均时长
这篇关于mysql 锁的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20部署MySQL集群入门:新手必读指南
- 2024-11-20部署MySQL集群教程:初学者指南
- 2024-11-20部署MySQL集群项目实战:新手教程
- 2024-11-20部署MySQL集群资料:新手入门教程
- 2024-11-20MySQL集群部署教程:入门级详解
- 2024-11-20MySQL集群教程:入门与实践指南
- 2024-11-20部署MySQL集群教程:新手入门指南
- 2024-11-20MySQL读写分离教程:轻松入门
- 2024-11-20部署MySQL集群入门:一步一步搭建你的数据库集群
- 2024-11-19部署MySQL集群学习:入门教程