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个特点. 原子性:要不全部成功,要不全部撤销 隔离性:事务之间相互独立,互不干扰 一致性:数据库正确地改变状态后,数据库的一致性约束 ...
随机推荐
- HDU 2475 Box
Box Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 247564 ...
- 全文搜索(AC-1)-互联网信息过载问题
什么是信息过载? 信息检索技术是什么? 信息过滤技术是什么?
- 食物(bzoj 3280)
Description 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险! 我们暂且不讨论他有多么NC,他又幻想了他应该带一些什么东西.理所当然的,你当然要帮他计算携带N件物品的方案数. 他 ...
- [NOIP2006] 普及组
明明的随机数 STL真是偷懒神器 /*by SilverN*/ #include<algorithm> #include<iostream> #include<cstri ...
- Delphi:ClientDataset+TDataSetProvider的数据保存问题
看到一篇介绍ClientDataSet和TDataSetProvider,非常精彩,特此保存. ==================================================== ...
- 洛谷 P1404 平均数
P1404 平均数 题目描述 给一个长度为n的数列,我们需要找出该数列的一个子串,使得子串平均数最大化,并且子串长度>=m. 输入输出格式 输入格式: N+1行, 第一行两个整数n和m 接下来n ...
- ppc_85xx-gcc -shared -fPIC liberr.c -o liberr.so
fPIC作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code), 则产生的代码中,没有绝对地址,所有使用相对地址.故而代码能够被载入器载入到内存的随意 ...
- javascript 閉包
這兩種寫法都是可以的. 第一種: function a(){ var m=[]; for(var i=1; i<10; i++){ (function(i){ function b(){ con ...
- HTML5:理解head
HTML文档的head部分,通常包含指定页面标题.为搜索引擎提供关于页面本身的信息.加载样式表,以及加载JavaScript文件(出于性能考虑.多数时候放在页面底部</body>标签结束前 ...
- 打开google 新地址
还在为谷歌打不开而发愁吗? 那就试试这个吧 91.213.30.151