mysql锁类型

操作系统实现锁类型
互斥锁
读写锁
自旋锁
latch和lock
数据库 使用锁是为了支持对共享资源进行并发访问,提供数据完整性和一致性
latch是mysql内部资源锁,如内部队列,lru等资源。目的保证并发线程操作临界资源的正确性,通常没有死锁检测机制
lock是作用于表数据,对象是事物,如表,页,行。并且是lock的对象仅在commit或rollback进行释放,且具有死锁检测和预防机制
lock和latch比较
lock latch
作用对象 事物 多线程共享对象
保护内容 数据库表内容 内存数据结果
持续时间 整个事物过程 临界资源
模式 行锁,表锁,意向锁 读写锁,互斥量
死锁处理或预防方式 通过环路检测和超时机制进行死锁检测和处理 无死锁检测和处理机制,仅通过应用加锁顺序保证无死锁情况发生
存在于 lockmanger的hash表中 多线程共享对象中
锁查看
mysql查看被锁住的表

查询是否锁表
show OPEN TABLES where In_use > 0;
查看所有进程
MySQL:

show processlist;
mariabd:

show full processlist;
查询到相对应的进程===然后 kill id

杀掉指定mysql连接的进程号
kill $pid
查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
查看等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
查看innodb引擎的运行时信息
show engine innodb status\G;
查看造成死锁的sql语句,分析索引情况,然后优化sql语句;

查看服务器状态
show status like ‘%lock%’;
查看超时时间:
show variables like ‘%timeout%’;

锁类型
共享锁(s):允许多个事物同时读取同一行
排他锁(x):只允许单个事物修改同一行
意向共享锁(ls):允许多个事物同时读取多行
意向排他锁(lx):只允许当个事物需改多行
因为innodb支持行级别的锁,因此意向锁不会阻止操作其他几行的数据
锁兼容表
ls lx s x
ls 兼容 兼容 兼容 不兼容
lx 兼容 兼容 不兼容 不兼容
s 兼容 不兼容 兼容 不兼容
x 不兼容 不兼容 不兼容 不兼容
一致性非锁定读
一致性非锁定读是指存储引擎通过多版本控制的方法来读取当前执行时间数据库中行数据。如果读取行正在执行修改或删除,这时读取操作不会因此取等待行的锁释放,相反,innodb储存引擎会去读取行的一个快照数据
读取快照数据是不需要上锁的,因为没有事物需要对历史数据进行修改
不同的事物隔离级别下,读取方式是不同的,也并非每个事物隔离机制都采用一致性非锁定读,即便都采用一致性非锁定读,快照定意也是不同的
快照数据就是当前数据历史版本,一个行记录不止一个快照数据,这种技术称为行多版本技术。并发控制称为多版本并发控制
自增长和锁
插入操作会根据这个锅自增长+1,这种锁机制其实是一种特殊的表锁机制,为了提高插入性能,不是在一个事物完成后才释放,而是完成对插入sql就释放。
锁问题
通过锁机制可以实现事物的隔离要求,使得事物可以并发的控制,解决数据一致性问题,但也带来四个问题
脏页
脏页指的是内存中的数据已经修改,但是没有刷到磁盘,即数据库内存中的页和磁盘中的页不一致
对脏页的读取,是非常正常的。脏页是因为数据库实例内存和磁盘异步造成,这并不影响数据一致性(数据会最终一致性)
脏读
脏读指的是脏数据,一个事物未提交,例外一个事物读到未提交数据
不可重复读
不可重复读是指一个事物多次读取同一个数据集合,而例外一个事物对该数据进行了更改,导致多次读取数据不一致性
一般来说,不可重复读是可接受的,因为读到的是已交数据
丢失更新
丢失更新是指一个事物更新被另外一个事物覆盖
丢失更新在mysql四大隔离技术上都是不会发生。我们在写应用经常发生
阻塞
阻塞是指因为锁之间不同的兼容性,在有些时刻一个事物需要等待另外一个事物锁释放它所占用的资源。阻塞是为了保证事物可以正常运行
死锁
死锁是指两个或两个以上事物正在执行过程中,因为抢占资源而造成一种相互等待现象
死锁处理可通过超时机制避免,或通过环路检测技术解决死锁
饥饿
饥饿是指进程或线程或者协程长时间得不到调度而产生饥饿现象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值