14.1 Introduction to InnoDB

14.1.1 InnoDB as the Default MySQL Storage Engine
14.1.2 Checking InnoDB Availability
14.1.3 Turning Off InnoDB InnoDB 是一种通用的存储引擎,平衡高可用和高性能。 在MySQL 5.6,InnoDB 是默认的存储引起,执行CREATE TABLE 语句 没有一个ENGINE= clause子句 会创建一个InnoDB表。 InnoDB的优势: InnoDB表的优化包括: 1.DML 操作遵循 ACID 模型, 有事务提交,回滚和crash-recovery能力来保护数据。 2.行级锁和Oracle风格一致读增加多用户并发和性能 3.InnoDB表安排在你的磁盘上优化基于主键 4.维护数据完整性,InnoDB 也支持外键约束。 在启用外键约束下, 插入,更新和删除被检查来确认 它们不会导致不一致在不同的表。 5. 你可以自由地混合InnoDB表与其他的MySQL存储引擎,即使在相同的语句里。 比如,你可以使用一个关联操作来组合InnoDB和MEMORY 表在一个查询里。 6. InnoDB 已经设计了CPU效率和最大性能当处理大量的数据: Table 14.1 InnoDB Storage Engine Features: 存储限制 64TB 事务 YES 锁粒度 Row MVCC Yes 地理空间数据类型支持 Yes Geospatial indexing support Yes B-tree indexes T-tree indexes Hash indexes InnoDB 存储引擎维护它自己的buffer pool用于caching 数据和indexes 在主内存里。 默认的,innodb_file_per_table设置被启用, 每个新的InnoDB 表和它的相关的索引是存储在一个单独的文件。 当 innodb_file_per_table option 被关闭,InnoDB 存储所有它的表和索引 在一个单独的系统表空间,它可以有几个文件组成(或者一个raw disk 分区). InnoDB 表可以处理大量的数据,即使在操作系统 文件大小被限制为2GB 比较InnoDB的功能和其他的存储引擎,查看存储引擎特性 在 Chapter 15, Alternative Storage Engines. InnoDB的增强功能和新功能: InoDB增强功能和新特性 在MySQL 5.6 的信息: 1.InnoDB 增强功能列表在 Section 1.4, “What Is New in MySQL 5.6”, 提供了在MySQL 5.6中添加的功能概要 Additional Resources 额外的资源: 1.对于InnoDB-相关的术语和定义 14.1.1 InnoDB as the Default MySQL Storage Engine InnoDB 默认的存储引擎: InnoDB 是默认存储引擎在MySQL 5.6, InnoDB 是一个事务安全(ACID 标准)存储引擎对于MySQL 已经提交,回滚和 crash-recovery 功能来保护用户的数据。 InnoDB 行级锁(没有升级到粗颗粒度的锁). Oracle-风格的一致性非锁定读增加了多用户并发和性能。 InnoDB 存储用户的数据在clustered indexes来降低I/O对于基于主键的常见的查询 为了维护数据的完整性,InnoDB 也支持外键约束 除非你配置了一个不同的存储引擎,执行CREATE TABLE 语句没有指定ENGINE= clause 创建一个InnoDB 表 InnoDB表的好处; 如果你使用MyISAM表 但是没有提交由于技术原因,你可能找到InnoDB表
有益的对于下面的原因: 1.如果你的服务器崩溃因为一个硬件和软件原因, 无论那个时间数据库发生了什么,你不需要做任何事情在重启数据库后。 InnoDB crash recovery 自动完成任何改变 在crash时间点前提交的, 不会做任何改变 在处理时但是没有提交, 只是重启和继续 在你离开的地方 2.InnoDB buffer pool cache表和索引的数据 当数据被访问, 频繁使用的数据是直接从内存里处理, 这个cache应用于很多类型的信息,并加速处理 3. 如果你把相关数据到不同的表,你可以设置外键来强制完整性约束。 更新或者删除数据,相关的数据在其他的表是被更新或者自动删除。 尝试插入数据到一个secodary 表没有相关数据在primary table,那么坏数据会自动被踢出 4.如果数据变得损坏在磁盘或者内存,一个checksum 机制提醒你虚假数据在你使用前 5. 当你设计你的数据库以适当的主键列对于每个表, 操作涉及哪些列会被自动的优化。 它是非常快的来引用主键列在WHERE子句里,ORDER BY 子句,GROUP BY 子句和join关联。 6.插入,更新,和删除会被优化通过一个自动的机制称为change buffering. InnoDB 不只是允许并发的读和写访问相同的表,它caches 改变的数据到streamline disk I/O. 7.性能优势不局限于长时间查询的巨型表格。 当相同的记录被访问从表反复的访问,一个功能称为一个自动式的Hash Index 任务 会让那些查询变得更快, 如果它们遇到一个hash 表 8.你可以压缩表和相关的索引 9.你可以创建和删除索引对性能和可用性影响很小 10. Truncate 一个 file_per_table tablespace是很快的, 可以释放次磁盘空间用于操作系统重用,而不是释放空间在system tablespace 只有InnoDB可 以使用 11. 表数据的存储布局是更加有效的对于BLOB和long text 字段, 具有动态行格式 12.你可以监控存储引擎的内部工作情况通过查询INFORMATION_SCHEMA tables. 13.你可以通过查询性能Schema tables 来监控存储引擎的性能细节 InnoDB 表的最新改进: MySQL 继续努力的解决使用的情况 以前需要MyISAM表的情况,在MySQL 5.6和更高的版本: 1.InnoDB 可以执行全文搜索使用FULL TEXT index类型。 2.InnoDB 现在执行一个更好的只读和以读为主的负载。自动优化应用InnoDB查询在自动提交 模式, 你也可以显示的让事务为只读 语法是START TRANSACTION READ ONLY. InnoDB 表的最佳实践: 一些常用的最佳实践用于InnoDB表包括: 1.指定一个主键列用于每个表使用最多嘴频繁的查询列或者多列, 或者一个自动增加的值如果没有明显的主键列 2.使用关联无论数据是从多个表基于相同的ID值拉取那些表里。 对于一个快速关联性能,定义外键在关联列上,定义那些列具有相同数据类型在每个表。 增加外键确保相关的列被索引,可以改善性能。外键也会传播删除或者更新到所有相关的表, 避免 数据插入到一个字表如果相应的IDs 是不在父表出现。 3. 关闭自动提交,提交每秒数百次puts 一个性能上限( 由你的存储设备写的速度限制) 4.分组相关的DML操作到事务,通过把它们归为一类 使用 START TRANSACTION和COMMIT 语句 。
这样你不需要太频繁地提交,
你不需要执行大量的批处理插入,修改或者删除 运行几个小时没有提交。 不要使用LOCK TABLE 语句,InnoDB 可以一次处理多个会话都读取和写入相同的表。 不牺牲可靠性或者高性能。 得到排它写访问一个数据集,使用 SELECT ... FOR UPDATE语句来锁住你打算更新的rows. 5.启用 innodb_file_per_table 选项来防止数据和索引对于单独的表到单独的文件, 代替一个单独的巨大的system tablespace. 这个设置是需要使用一些其他的功能, 比如表压缩和快速truncate 6.innodb_file_per_table 选项是在MYSQL 5.6.6中默认启用 7.评估是否你的数据访问模式收益与InnoDB表压缩功能(ROW_FORMAT=COMPRESSED) 在CREATE TABLE 语句,你可以压缩InnoDB 表而不需要牺牲读/写能力 8.运行你的server 带上选项 --sql_mode=NO_ENGINE_SUBSTITUTION 来防止表被创建为一个不同的存储引擎。 测试和设定基准 InnoDB作为默认的存储引擎: 如果 InnoDB 不是你的默认的存储引擎,你可以确定你的数据库服务器或者应用 工作正常 使用InnoDB 通过重启server 带上--default-storage-engine=InnoDB 或者 default-storage-engine=innodb 定义在 [mysqld] 章节在你的my.cnf配置里。 由于改变了默认的存储引擎之影响新表 当它们被创建的时候, 运行你所有的应用安装和安装步骤来确认 所有的安装是正确的。 然后,运用所有的应用程序的功能来确保所有数据的加载,编辑和查询功能正常。 如果一个表依赖一些MyISAM特性功能,你会收到一个错误, 增加ENGINE=MyISAM clause 在创建表的时候来避免错误。 如果你没有最初一个深思熟虑的决定关于存储引擎, 你只想要预览某些表如何工作当它们创建在InnoDB引擎下, 执行ALTER TABLE table_name ENGINE=InnoDB; 对于每个表,或者,运行test查询和其他语句没有描述原始表,做一个表的copy CREATE TABLE InnoDB_Table (...) ENGINE=InnoDB AS SELECT * FROM MyISAM_Table; 得到一个在网站的应用在真实负荷下的性能观点,安装最新的MySQL版本和运行基准测试。 测试完整应用的生命周期, 从安装,通过大量使用,和服务器重启。 杀掉server 进程当数据库是繁忙来模拟一个断电故障, 验证数据是正常恢复的当重启服务器时。 测试任何复制配置,特别是如果你使用不同的MySQL版本和选项在master和slaves上。 验证InnoDB 是默认的存储引擎: 验证InnoDB是默认的存储引擎 1.执行SHOW ENGINES 命令行来查看不同的存储引擎。 查看DEFAULT 在InnoDB 行,另外,查询INFORMATION_SCHEMA ENGINES table. mysql> SHOW ENGINES
-> ;
+--------------------+--------- +----------------------------------------------------------------+-------------- +------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+--------- +----------------------------------------------------------------+-------------- +------+------------+
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+--------- +----------------------------------------------------------------+-------------- +------+------------+ 2.如果InnoDB 不在场,你有一个mysqld binary 编译时没有InnoDB支持 你需要得到另外一个 3.

14.1.1 InnoDB as the Default MySQL Storage Engine的更多相关文章

  1. Mysql中ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8怎么转换为sql sever2008的代码

    ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8转换sql server AUTO_INCREMENT=2 ,是 自动递增列的 初始数值 = 2, ...

  2. 14.6.1 InnoDB Startup Configuration 启动配置

    14.6.1 InnoDB Startup Configuration 启动配置 首先描述关于InnoDB 配置设计数据库文件,日志文件,page size 和内存buffer 的配置. 推荐你定义数 ...

  3. 14.4.1 InnoDB Startup Configuration

    14.4 InnoDB Configuration :InnoDB 配置: 14.4 InnoDB Configuration 14.4.1 InnoDB Startup Configuration ...

  4. 14.7.4 InnoDB File-Per-Table Tablespaces

    14.7.4 InnoDB File-Per-Table Tablespaces 从历史上看,所有的InnoDB 表和indexes 是存储在system 表空间. 这个整体的方法是针对机器是整个用于 ...

  5. ubuntu 14.04 64位 下 编译安装MySQL 5.7.11

    步骤一: 先去mysql的官方网站 去down 编译源码包 mysql 网址:www.mysql.com downloads  (MySQL Community Server) 下载版本选择  sou ...

  6. 14.2.3 InnoDB Redo Log

    14.2.3 InnoDB Redo Log 14.2.3.1 Group Commit for Redo Log Flushing redo log 是一个基于磁盘数据结构的用于在crash 恢复正 ...

  7. 14.10.1 InnoDB Disk I/O

    14.10 InnoDB Disk IO and File Space Management InnoDB 磁盘IO和文件空间管理: 14.10.1 InnoDB Disk I/O 14.10.2 F ...

  8. 14.2.4 InnoDB Undo Logs

    14.2.4 InnoDB Undo Logs : 一个Undo log (或者成为回滚段) 是一个存储区域 持有被活动事务修改的数据的copy. 如果另外的事务需要看原始的数据(作为一致性读操作的一 ...

  9. 14.2.2 InnoDB Multi-Versioning InnoDB 多版本

    14.2.2 InnoDB Multi-Versioning InnoDB 多版本: InnoDB 是一个多版本的存储引擎: 它保留信息关于改变数据的老版本,为了支持事务功能 比如并发和回滚. 这些信 ...

随机推荐

  1. 【 D3.js 入门系列 — 4 】 如何使用比例尺( scale )

    上一章中使用了一个很重要的概念 — 比例尺( scale ),本节将解说其使用方法. 1. 最大值和最小值 在介绍比例尺( scale )之前,先介绍两个经常和比例尺一起出现的函数,在[第3章]中也出 ...

  2. ZOJ 2972 Hurdles of 110m 【DP 背包】

    一共有N段过程,每段过程里可以选择 快速跑. 匀速跑 和 慢速跑 对于快速跑会消耗F1 的能量, 慢速跑会集聚F2的能量 选手一开始有M的能量,即能量上限 求通过全程的最短时间 定义DP[i][j] ...

  3. php启用gzip压缩

    GZIP(GNU-ZIP)是一种压缩技术.经过GZIP压缩后页面大小可以变为原来的30%甚至更小.这样用户浏览的时候就会感觉很爽很愉快! 要实现GZIP压缩页面需要浏览器和服务器共同支持,实际上就是服 ...

  4. 【转】linux下 postgres的一些操作总结

    参考博文: PostgreSQL详解     1. 基本操作命令 安装完成后,PostgreSQL默认创建了名为postgres数据库用户账户,其与MySQL的root以及SQL Server的sa账 ...

  5. android在view.requestFocus(0)返回false的解决办法

    我们有时候想让listview的第一行自动获取到焦点,我们就会使用view.requestFocus(0)来操作,而有时候并不生效,debug后显示rerurn为false. 这是因为我们获取焦点太早 ...

  6. C++界面库

    刚开始用C++做界面的时候,根本不知道怎么用简陋的MFC控件做出比较美观的界面,后来就开始逐渐接触到BCG  Xtreme ToolkitPro v15.0.1,Skin++,等界面库,以及一些网友自 ...

  7. BNU Questions and answers

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=2490 这个题是先输入一个整数n,说明有几个数据,然后输入n个整数,然后用三个#分开,后面输入整数k, ...

  8. HDU 3790 最短路径问题 (SPFA)

    转载请注明出处:http://blog.csdn.net/a1dark 分析:比一般最短路多了一个花费.多加一个判断即可.用的SPFA.这道题让我搞清楚了以前定义INF为啥爆的问题.受益颇多. #in ...

  9. Codeforces Round #272 (Div. 2)AK报告

    A. Dreamoon and Stairs time limit per test 1 second memory limit per test 256 megabytes input standa ...

  10. Java基础04 封装与接口

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 总结之前的内容,对象(object)指代某一事物,类(class)指代象的类型.对 ...