mysql机制总结
Innodb和myisam最大的不同就是
innodb支持事物 采用了行锁
myisam 采用了表锁 默认就使用了表锁
表锁:速度快 并发小 发生锁冲突高 开销小
行锁:速度慢 并发高 发生锁冲突低 开销大
myisam 只支持表锁 查看表争锁情况
mysql> show status like 'table%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Table_locks_immediate | 2979 |
| Table_locks_waited | 0 |
+-----------------------+-------+
2 rows in set (0.00 sec))
table_locks_waited 值越高 说明 争锁情况比较严重 (单词理解:表锁等待)
myisam表的锁模式 表共享锁 表独占写锁
对Myisam表的读操作 不会阻塞其他用户对表的读请求 但是会阻塞写请求 写操作 会阻塞其他用户对同一表的读和写操作。读和写操作之间,以及写写操作直接是串行的(串行的理解:就是排队 一个一个执行)
myisam在执行查询语句前,会自动给涉及的所有表加读锁,在执行 更新 删除 插入前 会自动加写锁 不需要用户手动加
手动加表锁:lock tables order red local,order_detail red local; 给两个表增加读锁
总体而言myisam表的读和写是串行的,在一定条件下 也可以并发进行 可以通过系统变量 concurrent_insert 设置为0 不允许并发插入 为1 如果表中没有被删除的行 另一个进程可以从表尾插入记录 这也是Mysql默认设置 为2时 无论有没有被删除的行 都允许在表尾插入记录。
innodb行锁模式两种类型
共享锁 就是读锁 加锁方式:select * from table where ... lock in share mode 如果给一行加了共享锁 其他的事物不能获取当前行的排他锁
排他锁 就是写锁 加索方式:select * from table where .... for update 如果给一行加了排他锁 其他的事物不能获取当前行的共享锁以及排他锁
如果加了锁 长时间不提交 就会报错
innodb行锁是通过索引上的索引加锁来实现的 也就是 只有通过索引条件检索数据,innodb才会使用行锁,否则,将使用表锁!
如果该表没有使用索引 在使用过程中给该表加了排他锁 另外的事物在获取排他锁的时候就会出现等待 这是因为innodb会默认为该表是表锁 因为没有加索引导致的。
如果该表中加了索引 但是列中出现了相同的值 innodb也会给该表使用行锁。
当表使用了索引 并且该列数据不一致 行锁中的排他锁才不会失效。
即使都使用了索引 是否使用索引来检索数据 是由Mysql通过判断不同的执行任务来决定的 如果Mysql认为全表扫描效率更高,比如一些特别小的表,Mysql就不会使用索引,这种情况下innodb使用表锁 而不是行锁 因此分析锁冲突时 别忘了检查sql的执行计划,以确认是否真正使用了索引。通过使用explain检查执行计划
原文:https://blog.csdn.net/a5582ddff/article/details/79566654
mysql机制总结的更多相关文章
- 《黑客大曝光》实践部分——sql注入(7/8)
SQL注入实践 由于<黑客大曝光>中涉及到形形色色的攻击方式,从软件到硬件,甚至还有物理锁的开锁教程,当中的很多教程很有趣,但是我没有相关的环境,实践起来不好操作,比如说,查点扫描我还可以 ...
- 阿里巴巴2014研发project师实习生面试经历
java研发project师的初面是在上周三进行的,终于结果到了晚上才出,而没有通过的则是一结束网上就更新了状态.之后阿里通知这周三,也就是今天进行二面. 凑巧的是今早被舍友吵醒,中午那个困啊,但没时 ...
- kafka学习指南(总结版)
版本介绍 从使用上来看,以0.9为分界线,0.9开始不再区分高级/低级消费者API. 从兼容性上来看,以0.8.x为分界线,0.8.x不兼容以前的版本. 总体拓扑架构 从上可知: 1.生产者不需要访问 ...
- 20169211《Linux内核原理及分析》第十二周作业
Collabtive 系统 SQL 注入实验 实验介绍 SQL注入漏洞的代码注入技术,利用web应用程序和数据库服务器之间的接口.通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串, ...
- Qt SQLite 批量插入优化(SQLite默认将每条语句看成单独的事务)good
使用SQLite存储数据时发现插入速度太慢,程序跑了将近五分钟才插入了不到三千条.上网查资料才发现,SQLite这种文件数据库与MySql机制不一样,每条事务都有打开和关闭文件的步骤,SQLite默认 ...
- MySQL学习笔记十六:锁机制
1.数据库锁就是为了保证数据库数据的一致性在一个共享资源被并发访问时使得数据访问顺序化的机制.MySQL数据库的锁机制比较独特,支持不同的存储引擎使用不同的锁机制. 2.MySQL使用了三种类型的锁机 ...
- MySQL锁机制总结(二)
前言: Mysql是一个支持插件式存储引擎的数据库系统,本文讨论的锁机制也主要包含两部分SERVER层的锁和存储引擎的锁,存储引擎是指innodb,其它存储引暂不讨论. 1. 数据库中锁相关的基本概念 ...
- mysql锁机制总结
1.隔离级别 (1)读不提交(Read Uncommited,RU) 这种隔离级别下,事务间完全不隔离,会产生脏读,可以读取未提交的记录,实际情况下不会使用. (2)读提交(Read commited ...
- Mysql事务,并发问题,锁机制
.什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点. 原子性:要不全部成功,要不全部撤销 隔离性:事务之间相互独立,互不干扰 一致性:数据库正确地改变状态后,数据库的一致性约束 ...
随机推荐
- JavaEE JDBC RowSet行集
RowSet行集 @author ixenos 应用背景 1.基于结果集的缺点:在与用户的整个交互过程中,必须始终与数据库保持连接 后果:当用户长时间离开时,数据库连接长时间被占用,而这属于稀缺资源: ...
- NYOJ-1188并集与交集,STL的灵活运用!
并集与交集 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 给你两个字符串的集合A和B,让你求这两个字符串集合的并集和交集,按字典序排序后输出. 然后又给出给出两个字符串 ...
- dynamic-imports & web components & html dynamic import
dynamic-imports web components & html dynamic import https://github.com/webcomponents/html-impor ...
- 树剖 lca
GeneralLiu 橙边为轻边 红边为重边 绿数为每个点的 top 橙数为每个点的编号 步骤 1 先预处理 每个点的 deep深度 size子树大小 dad父节点 2 再预处理 每个点的 to ...
- HDU 4473
题目大意: 给定一个long long 型的数 n,找到一共有多少对a,b,使比n小的某一个数的是a*b的倍数 这样我们可以理解为 存在a*b*c <= n,令 a <= b <= ...
- 调用系统相机拍照,保存照片,调用系统裁剪API对照片处理,显示裁剪之后的照片
package com.pingyijinren.test; import android.annotation.TargetApi; import android.app.Notification; ...
- hiho一下 第四十九周 欧拉路
http://hihocoder.com/contest/hiho49/problem/1 给定无孤立结点图G,若存在一条路,经过图中每边一次且仅一次,该条路称为欧拉路. 一个无向图存在欧拉路当且仅当 ...
- HDU——2647 Reward
Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- 创建简单的spring-mvc项目
1.第一步:创建项目 new—>Dynamic Web Project 项目创建成功后,展示如图: 2.第二步:导入springmvc的jar包和common-logging.jar 3.第三步 ...
- NOIP 2010 乌龟棋
P1541 乌龟棋 题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行 NN 个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第 NN 格是终点, ...