14.1.1 InnoDB as the Default MySQL Storage Engine
- 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的更多相关文章
- 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, ...
- 14.6.1 InnoDB Startup Configuration 启动配置
14.6.1 InnoDB Startup Configuration 启动配置 首先描述关于InnoDB 配置设计数据库文件,日志文件,page size 和内存buffer 的配置. 推荐你定义数 ...
- 14.4.1 InnoDB Startup Configuration
14.4 InnoDB Configuration :InnoDB 配置: 14.4 InnoDB Configuration 14.4.1 InnoDB Startup Configuration ...
- 14.7.4 InnoDB File-Per-Table Tablespaces
14.7.4 InnoDB File-Per-Table Tablespaces 从历史上看,所有的InnoDB 表和indexes 是存储在system 表空间. 这个整体的方法是针对机器是整个用于 ...
- ubuntu 14.04 64位 下 编译安装MySQL 5.7.11
步骤一: 先去mysql的官方网站 去down 编译源码包 mysql 网址:www.mysql.com downloads (MySQL Community Server) 下载版本选择 sou ...
- 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 恢复正 ...
- 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 ...
- 14.2.4 InnoDB Undo Logs
14.2.4 InnoDB Undo Logs : 一个Undo log (或者成为回滚段) 是一个存储区域 持有被活动事务修改的数据的copy. 如果另外的事务需要看原始的数据(作为一致性读操作的一 ...
- 14.2.2 InnoDB Multi-Versioning InnoDB 多版本
14.2.2 InnoDB Multi-Versioning InnoDB 多版本: InnoDB 是一个多版本的存储引擎: 它保留信息关于改变数据的老版本,为了支持事务功能 比如并发和回滚. 这些信 ...
随机推荐
- PHP学习笔记8-文件操作
在data文件中写入数据: <?php /** * Created by PhpStorm. * User: Administrator * Date: 2015/6/29 * Time: 17 ...
- iPhone开发技巧之日志保存教程
http://mobile.51cto.com/iphone-283337.htm Objective-C开发程序的时候,有专门的日志操作类NSLog,它将指定的输出到标准的错误输出上(stderr) ...
- hdu3483之二项式展开+矩阵快速幂
A Very Simple Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- cocos2d-x游戏开发系列教程-超级玛丽01-前言
前言 上次用象棋演示了cocos2dx的基本用法,但是对cocos2dx并没有作深入的讨论,这次以超级马里奥的源代码为线索,我们一起来学习超级马里奥的实现,并以一些篇幅来详细讲述遇到的具体问题和具体的 ...
- 基于visual Studio2013解决算法导论之013基数排序
题目 基数排序 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #in ...
- 基于visual Studio2013解决C语言竞赛题之0415特殊对数
题目 解决代码及点评 这道题也是锻炼for循环,在for循环中遍历所有可能的数,然后再判断该数是不是有这样的性质 /********************************* ...
- [置顶] 自定义java Annotation快速入门与提高
我们先来看看一个简单的注解类定义 import java.lang.annotation.Documented; import java.lang.annotation.Retention; impo ...
- ExecuteReader: CommandText 属性尚未初始化
没有对sqlcommand对象的commandtext属性赋值说白了就是没写SQL语句 -.- 无语死了.
- AdbWinApi编译详解(本人亲历)
1. 从微软官方下载WDDK,比如:GRMWDK_EN_7600_1.ISO(http://download.microsoft.com/download/4/A/2/4A25C7D5-EFBE-41 ...
- Can't connect to MySQL server on 'XXX' (13)
出现can't connect to MySQL server using '' (13)的错误,结果是 SELinux 不让 httpd 访问外网,一开始还以为是iptables造成的,关闭之后发现 ...