mysql引擎和事务
对于应用程序和用户来说,同样一张表的数据无论用什么引擎来存储,看到的数据都是一样的,只是不同的引擎在功能、占用空间大小、读取性能等方面可能有所差别。
mysql最常用的存储引擎为Innodb、MyISAM和全文索引
5.5.5以前默认存储引擎为MyISAM,5.5.5及之后默认存储引擎为Innodb
mysql> show engines \G查看当前数据库系统支持的引擎
mysql5.5支持事务的引擎:Innodb/ndb(集群的引擎)
对于MyISAM来说,每一个表对应于磁盘上的三个文件,这三个文件名称相同,扩展名不同。
.frm文件保存表的定义(是服务器而不是MyISAM引擎的一部分),.MYD保存表的数据,.MYI是表的索引文件(可参考mysql的系统库mysql下的文件)
特点:
1.不支持事务
2.表级锁定(更新时锁定整个表),锁定的成本小,但大大降低了并发性能
3.读写互相阻塞,不仅会在写入的时候阻塞读取,还会在读取的时候阻塞写入,但是读不会阻塞另外的读
4.只会缓存索引不能缓冲数据,可以通过key_buffer_size缓存索引,减少磁盘IO,但是只会缓存索引不会缓存数据
5.读取速度较快,占用资源相对少(功能相对弱,锁的粒度大)
6.不支持外键约束,但支持全文索引
7.mysql5.5.5默认的存储引擎
适用的生产场景:单一对数据库的操作(纯读或者纯写)可以使用
1.不需要事务支持的业务(例如转账、充值就不行)
2.一般为读多或者写多的网站应用,读写都频繁的场景不适合
3.读写并发相对较低的业务(纯读纯写高并发也可以)
4.数据修改相对较少的业务
5.以读为主的业务,例如www、blog、图片信息数据库
6.对数据一致性要求不很高的业务
7.硬件资源相对较差的机器
调优精要:
1.设置合适的索引
2.调整读写优先级,根据实际需要确保重要的操作更优先执行
3.启用延迟插入改善大批量写入性能(降低写入频率)
4.尽量顺序操作,让insert数据都写入到尾部,减少阻塞
5.分解大的时间长的操作,降低单个操作的阻塞时间
6.降低并发数,某些高并发场景通过应用进行排队队列机制
7.对于相对静态(更改不频繁)的数据库数据,充分利用query cache或者mamcached缓存服务极大的提高访问效率
8.count只有在全表扫描的时候高效,带有其他条件的count都需要进行实际的数据访问
9.可以把主从同步的主库使用Innodb,从库使用MyISAM引擎(不推荐)
Innodb
特点:
1.支持事务
2.行级锁定(更新时一般锁定当前行),通过索引实现,如果进行全表扫描仍然会锁全表与MyISAM相同,注意间隙锁的影响
3.读写阻塞与事务隔离级别相关
4.具有高效的缓存特性,能缓存索引,也能缓存数据
5.整个表和主键以cluster方式存储,组成一棵平衡树
6.所有secondary index都会保存逐渐信息
7.支持分区和表空间,类似oracle数据库
8.支持外键约束,5.5以前不支持全文索引,后续支持
9.与MyISAM相比对硬件资源要求相对较高
适用场景:
1.需要事务支持的业务
2.行级锁定对高并发有很好的适应能力,但需要确保查询通过索引完成
3.数据读写及更新都较为频繁的场景,如bbs、sns、微博、微信等
4.对数据一致性要求较高的业务,例如充值转账
5.硬件设备内存大,可以利用Innodb较好的缓存能力来提高内存利用率,尽可能减少磁盘IO
6.与MyISAM引擎相比,Innodb引擎更消耗资源,速度没有MyISAM快
调优精要:
1.主键尽可能小,避免给secondary index带来过大压力
2.避免全表扫描,否则会使用表锁
3.尽可能缓存所有的索引和数据,提高响应速度,减少磁盘IO消耗
4.在大批量小插入的时候,尽量自己控制事务,而不要使用autocommit
4.合理设置innodb_flush_log_at_trx_commit,不要过度追求安全性
5.避免主键更新,这会带来大量的数据移动
事务:逻辑上的一组sql语句操作,这组sql语句执行时要么全部成功要么全部失败
事务的四大特性ACID
原子性(atomicity):事务是一个不可分割的单位,一个事务中的所有sql操作要么全部成功要么全部失败
一致性(consistency):事务发生前和发生后,事务的完整性必须保持一致
隔离性(isolation):当并发访问数据库时,一个正在执行的事务在执行完毕前,对于其他会话是不可见的,多个并发事务之间的数据是互相隔离的(mysqldump时的参数--single-transaction)
持久性(durability):一个事务一旦被提交,它对数据库中的数据改变就是永久性的,如果出了错误,事务不允许撤销,只能通过“补偿性事务”
mysql数据库的事务默认是自动提交的。如果想多条sql在一个事务中执行,则需要使用事务进行处理。如果开启一个事务没有提交,mysql会自动回滚事务,或者手动使用rollback回滚。
start transaction开启事务
rollback回滚事务
commit提交事务
mysql> show variables like '%commit%';结果为on或者off(默认为on)
表创建后修改引擎的方法
1.mysql语句修改
mysql> alter table test2 engine=MyISAM;
2.使用sed对备份内容进行引擎替换,即用mysqldump备份,使用sed对引擎做替换,再导入替换后的备份语句
3.linux命令mysql_convert_table_format修改
mysql引擎和事务的更多相关文章
- MySQL · 引擎特性 · InnoDB 事务子系统介绍
http://mysql.taobao.org/monthly/2015/12/01/ 前言 在前面几期关于 InnoDB Redo 和 Undo 实现的铺垫后,本节我们从上层的角度来阐述 InnoD ...
- mysql存储引擎、事务
MySQL存储引擎介绍 文件系统 操作系统组织和存取数据的一种机制. 文件系统是一种软件. 文件系统类型 ext2 ext3 ext4 xfs 数据 不管使用什么文件系统,数据内容不会变化 不同 ...
- Spring事务mysql不回滚:mysql引擎修改
若Spring中@Transactional 注解开启且配置没问题的话,很可能是mysql数据库引擎不支持. mysql引擎是MyISAM的话事务会不起作用,原因是MyISAM不支持事务和外键,改成支 ...
- (转)Mysql技术内幕InnoDB存储引擎-事务&备份&性能调优
事务 原文:http://yingminxing.com/mysql%E6%8A%80%E6%9C%AF%E5%86%85%E5%B9%95innodb%E5%AD%98%E5%82%A8%E5%BC ...
- mysql,存储引擎,事务,锁,慢查询,执行计划分析,sql优化
基础篇:MySql架构与存储引擎 逻辑架构图: 连接层: mysql启动后(可以把mysql类比为一个后台的服务器),等待客户端请求,当请求到来后,mysql建立一个一个线程处理(线程池则分配一个空线 ...
- MySQL数据库引擎、事务隔离级别、锁
MySQL数据库引擎.事务隔离级别.锁 数据库引擎InnoDB和MyISAM有什么区别 大体区别为: MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能 ...
- Mysql InnoDB引擎下 事务的隔离级别
mysql InnoDB 引擎下事物学习 建表user CREATE TABLE `user` ( `uid` bigint(20) unsigned NOT NULL AUTO_INCREMENT, ...
- MySQL数据库的事务及存储引擎
一.关系型数据库与非关系型数据库 1.关系型数据库的特点: 1)数据以表格的形式出现 2)每行为各种记录名称 3)每列为记录名称所对应的数据域 4)许多的行和列组成一张表单 5)若干的表单组成数据库 ...
- mysql数据库之 存储引擎、事务、视图、触发器、存储过程、函数、流程控制、数据库备份
目录 一.存储引擎 1.什么是存储引擎? 2.mysql支持的存储引擎 3. 使用存储引擎 二.事务 三.视图 1.什么是视图 2.为什么要用视图 3.如何用视图 四.触发器 为何要用触发器 创建触发 ...
随机推荐
- 2019.03.23 Http
自己也要分清楚 看清楚 request,response 一个是请求 一个是相应 行 头 之间还有个空行 体 HttpRequest请求对象(只读) 当用户访问一个视图函数时,Djan ...
- Charles 使用教程
Charles 的简介 如何安装 Charles 将 Charles 设置成系统代理 Charles 主界面介绍 过滤网络请求 截取 iPhone 上的网络封包 截取 Https 通讯信息 模拟慢速网 ...
- Linux学习笔记:常用100条命令(二)
linux常用命令 1.vi中复制快捷键 yy --复制 p --粘贴 2.vi中保存退出 ZZ 3.linux解压zip unzip 4.查看软件组包 yum grouplist 5.安装组包 yu ...
- RNN的深入理解
针对有着前后序列关系的数据,比如说随着时间变化的数据,显然使用rnn的效果会更好. 循环神经网络的简单结构如下图:简单表示是左边这幅图,展开来看就是右边对每个时刻的数据的处理.单层的RNN网络只有一个 ...
- HDU 1757 A Simple Math Problem(矩阵)
A Simple Math Problem [题目链接]A Simple Math Problem [题目类型]矩阵快速幂 &题解: 这是一个模板题,也算是入门了吧. 推荐一个博客:点这里 跟 ...
- JavaScript-判断指定日期是一年中第几天-按照从大到小的顺序输出
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefinition的解决方案
今天在GitHub上面看到一个有意思的项目,下载下来,使用tomcat部署失败,出现异常,网上说JDK版本太高,改低,还是失败. 由于本人有个习惯,更喜欢把项目直接放入tomcat webapps 里 ...
- 运行vs时打开一个浏览器窗口,而不是在原有窗口上打开一个标签
1.运行vs时打开一个浏览器窗口,而不是在原有窗口上打开一个标签,结束调试时窗口又关闭了,特别麻烦. 在用swagger调试接口时,好不容易输入了测试数据,然而窗口关闭了,再次调试又得重新输入. 解决 ...
- 学习笔记<1>技术体系结构
Android的系统架构采用了分层架构的思想,如上图所示.从上层到底层共包括四层,分别是 1.应用程序程序层 2.应用框架层 3.系统库和Android运行时 4.Linux内核. 每 ...
- c++引用和指针的彻底理解
★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指 ...