mysql数据库引擎InnoDB和MyISAM
一.Mysql锁分类
- 表级锁:开销小,加锁块;不会出现死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低。
- 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发性也最高。
- 页面锁:开销和加锁界于表锁和行锁之间,会出现死锁;锁定粒度界与表锁和行锁之间,并发一般。
二.MyISAM
1.开门见山
- 1.MyISAM不支持事物;
- 2.MyISAM只支持表锁;
- 不能在表损坏后恢复数据;
MyISAM表锁有两种模式:表共享读锁(table read lock)和表独占写锁(table write lock),锁的解释如下:
- myISAM表的读操作,不会阻塞其他用户对同一个表的读请求,但会阻塞对同一个表的写请求。
- myISAM表的写操作,会阻塞其他用户对同一个表的读和写操作。
- myISAM表的读、写操作之间、以及写操作之间是串行的。
适合在以下几种情况下使用:
- 做很多count的计算
- 查询非常频繁
MyISAM在执行查询前,会自动执行表的加锁、解锁操作,一般情况下不需要用户手动加、解锁,但是有的时候也需要显示加锁。当然也可以用union做关联查询代替
lock table t1 read, t2 read;
select count(t1.id) as 'total' from t1;
select count(t2.id) as 'total' from t2;
unlock tables;
2.并发插入问题
MyIAM表的读和写是串行的,但是这是就总体而言,在一定条件下MyISAM表也支持查询和插入操作的并发进行.
MyISAM存储引擎有一个系统变量concurrent_insert,专门用于充值其并发插入的行为,其值分别可以为0,1和2
当concurrent_insert = 0 时,不允许并发插入
当concurrent_insert = 1时,如果myisam表中没有空洞(即表的中间没有被删除的行),myisam允许在一个进程读表的同时,另一个进程从表尾插入记录
当concurrent_insert = 2时,无论myisam表中有没有空洞,都允许在表尾并发插入记录
3.MyISAM锁调度问题
- 通过指定启动参数low-priority-updates,使MyISAM引擎默认给与读请求优先的权限
- 通过执行set low_PRIORITY_UPDATES=1,降低更新请求的优先级。
- 指定INSERT、UPDATE、DELETE语句的LOW_PRIORITY属性。
三.InnoDB存储引擎
1.开门见山
具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。
- 支持事物和外键
- 默认是行锁
- 支持数据恢复
注意:行锁在某些情况下会变成表锁,比如SQL的更新(update)或者删除(delete)语句中未使用到索引,导致在InnoDB在对数据进行相应操作的时候必须把整个表锁起来进行检索(表锁)。而如果使用了索引的话,InnoDB只会通过索引条件检索数据,而只锁住索引对应的行(行锁)。
2.实例分析
问题描述:
- 系统中有一个实时的定时任务,当有条件触发的时候,会更新对应的A表;
- 但是同时有另外一个对A表的写操作,因此当进行测试的时候,有时候会不固定的出“Lock wait timeout exceeded”的错误。
当出现这个问题的时候,从很多的地方进行了分析,然后都无法得到正确的解决方案(因为描述1模块不是我写的,所以没有去查看更新表的代码操作)
可能的原因:
在描述1中定时任务更新表A的时候,更新条件中没有使用索引,导致当进行定时任务更新表的时候形成了表锁。然后因为表A数据量比较大,检索较慢,然后导致了描述2中对表A的写操作的等锁超时。
3.适用的场景
- 更新和查询都相当的频繁,多重并发
- 要求事务,或者可靠性要求比较高
- 外键约束,MySQL支持外键的存储引擎只有InnoDB
一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB是不错的选择。
mysql数据库引擎InnoDB和MyISAM的更多相关文章
- mysql数据库引擎InnoDB和MyISAM的区别
InnoDB支持行级锁和表级锁(默认行级锁),支持事务,外部键等:大量的insert和update更快等.只有通过索引条件检索数据,InnoDB 才使用行级锁,否则,InnoDB 将使用表锁. MyI ...
- 常用Mysql存储引擎--InnoDB和MyISAM简单总结
常用Mysql存储引擎--InnoDB和MyISAM简单总结 2013-04-19 10:21:52| 分类: CCST|举报|字号 订阅 MySQL服务器采用了模块化风格,各部分之间保持相 ...
- Mysql数据库中InnoDB和MyISAM的差别
Mysql数据库中InnoDB和MyISAM的差别 InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理, ...
- MySQL存储引擎InnoDB,MyISAM
MySQL存储引擎InnoDB,MyISAM1.区别:(1)InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语 ...
- MySQL存储引擎——InnoDB和MyISAM的区别
MySQL5.5后,默认存储引擎是InnoDB,5.5之前默认是MyISAM. InnoDB(事务性数据库引擎)和MyISAM的区别补充: InnoDB是聚集索引,数据结构是B+树,叶子节点存K-V, ...
- mysql 存储引擎 InnoDB 与 MyISAM 的区别和选择
http://www.blogjava.net/jiangshachina/archive/2009/05/31/279288.html 酷壳 - MySQL: InnoDB 还是 MyISA ...
- Mysql 存储引擎 InnoDB与Myisam的主要区别
MySQL默认采用的是MyISAM. 1,事务处理 innodb 支持事务功能,myisam 不支持. Myisam 的执行速度更快,性能更好. MyISAM不支持事务,而InnoDB支持.InnoD ...
- MySQL存储引擎Innodb和MyISAM对比总结
Innodb引擎 InnoDB是一个事务型的存储引擎,设计目标是处理大数量数据时提供高性能的服务,它在运行时会在内存中建立缓冲池,用于缓冲数据和索引. Innodb引擎优点 1.支持事务处理.ACID ...
- MySQL数据引擎InnoDB和MyISAM互相转换
MySQL(或者社区开源fork的MariaDB)5.5以上支持InnoDB引擎,并将其作为默认数据库引擎.InnoDB带来很多改进,但是对系统资源占用明显增加,对于还在128MB-512MB内存VP ...
随机推荐
- TSQL--如何突破PRINT的8000大限
相信很多DBA都喜欢干的一件事就是拼SQL语句,我也不例外,但是PRINT只能打印4000的Unicode string或8000的Non-unicode string, 这个蛋疼的限制会导致过长的s ...
- TSQL--SQL SERVER 常用系统变量
----------全局变量select @@version as '版本';---------------------------返回当前数据库的版本信息 select APP_NAME ( ) a ...
- Ubuntu下Jenkins(docker)配置Docker远程启动
背景: 在做用Jenkins构建docker的操作,需要用Jenkins调用docker命令,需要先安装docker-build-step插件,然后开启docker远程访问. 默认情况下,Docker ...
- ASP.NET IIS 支持PUT、DELETE请求
IIS 本身不支持PUT.DELETE请求,但可以通过一下方法修改进而达到目的 删除IIS安装的WebDav模块,选择你的项目,右边有个“模块”,双击它:找到WebDavModule,删除它(不推荐, ...
- .Net面试经验,从北京到杭州
首先简单说下,本人小本,目前大四软件工程专业,大三阴差阳错地选了.Net方向,也是从大三开始接触.Net.自认为在学生中.net基础还可以,嘿嘿,吹一下. 大四第一学期学校安排去北京培训,培训了两个月 ...
- deepin jdk 安装
一.安装JDK环境 1 .卸载系统自带的Openjdk(可能不需要) 先用检测是否安装了openjdk dpkg -l | grep openjdk 如果安装了, 使用下面命令卸载. sudo apt ...
- PostMan工具使用之基础篇
PostMan工具使用之基础篇 一.什么是PostMan Postman一款非常流行的API调试工具.(其他测试工具 Jmeter.soapUI) 二.下载及安装: 1.下载: 下载地址:https: ...
- c语言博客作业06-文件
1.本章总结 1.1思维导图 1.2本章学习体会 这周学了结构体和文件,结构体作为一种数据的归类方式,相比数组或变量更具有整体全面性,例如一个数组只可以放一些按照元素顺序存放的单元变量,并且我们用 ...
- ObjectARX动态添加AutoCAD传统下拉菜单入门篇(一)
ObjectARX动态添加传统下拉菜单入门篇 图文by edata , 转载注明出处 http://www.cnblogs.com/edata AutoCAD 添加传统下拉菜单有很多种方式,比较典型 ...
- SQL注入不简单?那是你没有懂它的原理~
我们真的了解SQL注入吗? 不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏 ...