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个特点. 原子性:要不全部成功,要不全部撤销 隔离性:事务之间相互独立,互不干扰 一致性:数据库正确地改变状态后,数据库的一致性约束 ...
随机推荐
- linux 下CPU数量、核心数量、是否支持超线程的判断
判断依据:1.具有相同core id的cpu是同一个core的超线程.2.具有相同physical id的cpu是同一颗cpu封装的线程或者cores. 英文版:1.Physical id and c ...
- 【判断二分图】C. Catch
https://www.bnuoj.com/v3/contest_show.php?cid=9154#problem/C [题意] 给定一个无向图,给定小偷的起始位置 从这个起始位置开始,小偷可以在单 ...
- POJ 1741 Tree【Tree,点分治】
给一棵边带权树,问两点之间的距离小于等于K的点对有多少个. 模板题:就是不断找树的重心,然后分开了,分治,至少分成两半,就是上限为log 然后一起统计就ok了 #include<iostream ...
- Django:(5)分页器 & forms组件
Django组件:分页器 目录结构: urls.py from django.contrib import admin from django.urls import path from app01 ...
- 程序猿是如何解决SQLServer占CPU100%的--马非码
http://www.cnblogs.com/marvin/p/ASolutionForSQLServerCauseHighCPU.html
- 踩坑录- Spring Boot - CORS 跨域 - 浏览器同源策略
1.解决办法,创建一个过滤器,处理所有response响应头 import java.io.IOException; import javax.servlet.Filter; import javax ...
- 【转】深入理解javascript作用域——词法作用域和动态作用域
前面的话 大多数时候,我们对作用域产生混乱的主要原因是分不清楚应该按照函数位置的嵌套顺序,还是按照函数的调用顺序进行变量查找.再加上this机制的干扰,使得变量查找极易出错.这实际上是由两种作用域工作 ...
- 使用Maven对JAVA程序打包-带主类、带依赖
使用Maven对JAVA程序打包-带主类.带依赖 http://blog.csdn.net/strongyoung88/article/details/54097830
- Centos7下安装.bin格式
1.检查系统是否已经存在jdk版本,#java –version.javac –version 2.赋予.bin的jdk安装包的执行权限chmod u+x jdk-6u25-linux-x64.bin ...
- 深度学习-theano-windows -cuda-环境搭建
本文将具体介绍深度学习之cuda的环境搭建 工具:支持CUDA的显卡(安装cuda6.5),VS2013.Anaconda. 步骤: 1.安装cuda6.5 这个不具体介绍,网上有很多文章.注意选择你 ...