zoukankan      html  css  js  c++  java
  • 14.1 Introduction to InnoDB 介绍InnoDB

    Chapter 14 The InnoDB Storage Engine

    14.1 Introduction to InnoDB 介绍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.5中, 它是默认的存储引擎。在MySQL 5.6,执行CREATE TABLE 语句 不指定 an ENGINE= clause

    创建一个InnoDB表。

    InnoDB的关键优势

    InnoDB 表的主要有点包括:

    1.它的DML 操作 ACID 模型, 具有事务功能 提交,回滚,crash-recovery 功能用于保护数据

    2.行级锁和Oracle风格一致性读 增加多个用户的并发和性能

    3.InnoDB 表安排你的数据在磁盘上优化查询 基于主键

    4.为了维护数据完整性,InnoDB 也支持外键约束。

    Inserts, updates, and deletes都会被检索来确保不会导致不一致在不同的表

    1. 你可以自由的混合InnoDB 表与其他的MySQL 存储引擎, 即使是相同的语句。

    比如, 你可以关联操作结合InnoDB和MEMORY 表在一个的单独的查询。

    InnoDB 已经被设计 CPU优化和最大性能 当处理大数据量的时候:

    Table 14.1 InnoDB Storage Engine Features

    [a] InnoDB 支持 geospatial indexing 是可用的在MySQL 5.7.5 和更高的版本

    [b] InnoDB 使用 hash indexes 内部的用于它的自适应的 Hash Index feature.

    [c] InnoDB 支持FULLTEXT indexes is available in MySQL 5.6.4 and higher.

    InnoDB 存储引擎维护它自己的buffer poool 用于cache数据和索引在内存里。

    默认, 启用 innodb_file_per_table ,每个新的InnoDB 表和它的相关的索引是存储在单独的文件。

    当 innodb_file_per_table option 是禁用,InnoDB 存储它所有的表和索引在一个单独的系统表空间,

    可能有几个文件组成。InnoDB 表可以处理大量的数据, 即使操作系统文件是限制为2GB

    比较InnoDB和其他的存储引擎 。

    InnoDB 增强功能和新特性:

    关于InnoDB 信息增强和新功能在MySQL 5.6,参见:

    InnoDB 增强列表在章节1.4, “What Is New in MySQL 5.6”,

    提供了一个新增功能的概述。

    该版本的发行说明,它提供了信息关于每个版本的改变信息:

    Additional Resources 额外的信息:

    1. InnoDB相关的术语和定义,查看MySQL 词汇表:

    14.1.1 InnoDB as the Default MySQL Storage Engine 默认的MySQL 存储引擎 是InnoDB

    MySQL 有一个良好的声誉,是易于使用和提供性能和可扩展性。

    在MySQL 5.5之前, MyISAM 是默认的存储引擎。在我们的经验里,大多数用户从来不改变默认设置。

    在MySQL 5.5和以后版本,InnoDB 是默认的存储引擎.

    再次,我们希望大多数用户不要改变默认的设置。但是,由于InnoDB,

    默认的存储引擎提供收益于用户从它们的数据库,ACID事务,参照完整性,Crash Recovery.

    存储引擎使用趋势

    在MySQL 增长的第一年,早期的基于web的应用没有按并发性和可扩展性的限制。

    近年来,硬盘和内存容量和性能/价格比 ,用户推动MySQL 的性能界面关心可靠性和crash recovery

    MySQL数据库是大的,繁忙的,分布式的和重要的。

    InnoDB 记录那些顶级用户的权限,存储引擎使用的趋势已经转移到更多可扩展的InnoDB

    因此,在MySQL 5.5是逻辑事过度版本让 InnoDB the default storage engine.

    MySQL 继续努力解决使用情况,以前需要MyISAM 表, In MySQL 5.6 and higher:

    InnoDB 可以使用全文索引类型执行全文搜索。见第14.2.6.3,“InnoDB全文索引”的细节。

    InnoDB 现在执行更好的 只读或者读为主的工作。 自动优化应用InnoDB 查询在自动模式,

    你可以明确的标记事务为只读 使用语法START TRANSACTION READ ONLY. See Section 8.5.3, “Optimizing InnoDB Read-Only

    Transactions” for details.

    应用分布在只读介质现在可以使用InnoDB表,See Section 14.3.2, “Configuring InnoDB for Read-Only Operation” for

    details.

    InnoDB 作为默认的存储引擎的重要性:

    从MySQL 5.5.5,默认的存储引擎对于新表的InnoDB.

    这个变化应用于新创建的表没有使用一个存储引擎 子句 such as ENGINE=MyISAM.

    mysql和information_schema databases,仍旧使用MyISAM.

    特别是,你不能切换授权表使用InnoDB.

    Benefits of InnoDB Tables InnoDB 表的好处

    如果你使用MyiSAM 表,但是系于技术原因,你会发现使用InnoDB 表更加方便。

    如果你的服务器crashes 由于硬件和软件问题, 无论在数据库中发生了什么,

    在数据库重启后 你不需要做任何操作。 InnoDB 自动crash recovery,完成任何改变已经被提交的在crash前,

    会馆那些操作在处理的但是没有提交的, 只需重启然后继续在你离开的地方,这个过程是更快的 相比MySQL 5.1和更早的版本。

    InnoDB buffer pool caches table 和index data 当数据被访问时。

    频繁使用的数据是在内存里直接处理的,这个cache适用于很多类型的信息,并加快处理,

    专用的数据库服务器配置最多80%的物理内存给InnoDB buffer pool.

    如果你分散相关的数据到不同的表,你可以设置外键来强制完整性约束。

    Update or delete data, 重新分布数据到其他表来自动的更新和删除。

    尝试插入数据到第2个表 .

    如果数据变的腐败在磁盘或者在内存里, 一个checksum 机制提醒你 在你使用它之前。

    当你设计你的数据库适当的主键列对于每个表,操作设计那些列是自动优化的。

    快速的关联主键列在WHERE 子句里,ORDER BY 列,GROUP BY clauses, and join operations.

    Inserts, updates, deletes是自动优化机制的 称为改变buffer,

    InnoDB 不只是运行并发的读和写访问同样的表, 它cache 改变的数据到 streamline disk I/O.

    性能优势不局限于大表对于长时间运行的查询,

    当相同的记录被一个表访问,一个功能称为自适应Hash Index takes 。

    InnoDB表的最佳实践

    如果你使用InnoDB 很长时间,你已经知道了关于它的特性 像事务和外键。如果不是,

    阅读这个章节。

    指定一个最平凡使用的列或者多列为主键,或者一个自增值 如果没有明显的主键。

    拥抱了关联的想法,数据是从多个表基于相同的ID值产生。 为了加快连接性能,

    定义外键在连接列上, 定义那些列为相同的数据类型在每个表。

    外键也传递删除的或者更新的所有英雄的表,避免在子表里插入的数据 如果相应的ID 不在父表里。

    关闭自动提交,一秒钟提交上百次

    相关DML操作的组集, 到一个事务,通过START TRANSACTION 和commit语句。

    这样你不需要提交的太频繁,你也不需要执行大量的批量插入,删除和更新语句 运行多个小时,而没有更新。

    停止使用LOCK TABLE 语句,InnoDB 可以处理多个会话一次读和写相同的表,不需要牺牲可靠性或者高性能。

    要获得独占写入访问一组记录, 使用SELECT … FOR UPDATE 语句来锁定你想要更新的行。

    启用innodb_file_per_table 选项 把单个表的数据和索引到单独的文件, 而不是一个单独的系统表空间。

    此设置需要一些其他的功能,如表压缩和快速truncate.

    评估是否你的数据和访问模式从新的InnoDB 表压缩功能授予 (ROW_FORMAT=COMPRESSED)

    在创建表的时候,你可以压缩InnoDB 表不牺牲读写能力。

    运行server 带选项 –sql_mode=NO_ENGINE_SUBSTITUTION 防止表被创建不同的存储引擎

    innoDB表的最新改进

    1.你可以压缩表和相关的索引

    2.你可以创建和删除索引 更少的性能和可用性的影响相比之前

    3.truncate 表是更快的,并能释放磁盘空间,操作系统重用,相比腾出空间只有InnoDB 可以重用。

    4.表数据的存储布局对于BLOBS和长文件字段是更有效的,使用DYNAMIC row format.

    5.你可以通过监控内部的工作情况看通过查询INFORMATION_SCHEMA tables.

    6.你可以监控性能详情通过查询performance_schema tables.

    测试和基准测试InnoDB 作为默认的存储引擎

    即使在完成升级从MySQL 5.1 或者更早的到MySQL 5.5或者更高的版本,

    你可以预览 是否你的数据库或者应用工作正确的在默认的InnoDB存储引擎下。

    设置InnoDB作为默认的存储引擎在早期的MySQL 发布版本中,要么在命令行指定 –default-storage-engine=InnoDB,

    或者在你的my.cnf 文件里增加default-storage-engine=innodb 在[mysqld]章节,重启服务器。

  • 相关阅读:
    golang 使用 os/exec
    golang调用 exec命令 出现too many open files
    nginx: [error] invalid PID number “” in “/usr/local/var/run/nginx/nginx.pid”
    Docker 实时查看docker容器日志
    curl 查看HTTP 响应头信息
    go -- go 程序 启动docker容器
    go -- 测试
    Linux /var/log下各种日志文件
    LDAP -- ldap 的cn, ou, dc的含义
    一条命令 杀死某个端口 所有程序
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351238.html
Copyright © 2011-2022 走看看