`
san_yun
  • 浏览: 2669975 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

InnoDB 介绍

 
阅读更多

InnoDB 是 MySQL 上第一个提供外键约束的引擎,除了提供事务处理外,InnoDB 还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数量。
InnoDB 的设计目标是处理大容量数据时最大化性能,它的 CPU 利用率是其他所有基于磁盘的关系数据库引擎中最有效率的。

InnoDB 是一套放在 MySQL 后台的完整数据库系统,InnoDB 有它自己的缓冲池,能缓冲数据和索引,InnoDB 还把数据和索引存放在表空间里面,可能包含好几个文件,这和 MyISAM 表完全不同,在 MyISAM 中,表被存放在单独的文件中,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB。

MySQL 的源代码中,从 3.23.34a 开始包含 InnoDB 表,并在 MySQL -Max 的二进制版本中激活。

如果你使用源码版本下载,自己编译的话,需要采用 --with-innodb 选项:

./configure --with-innodb

在 MySQL-Max-3.23 上使用 InnoDB 时,必须在 my.cnf 或者 my.ini 文件中的 [mysqld] 小节指定启动参数:

innodb_data_file_path=ibdata:30M

InnoDB 以 GNU GPL 版本 2 的许可发布。

MySQL-Max-3.23: 这个产品可以用于生产环境使用。
MySQL-4.0: 这个是开发版本,和 3.23 相比增加了多表删除,查询结果缓冲,SSL 通信,4.0.1 为 Beta 版本。

在 3.23 中,必须至少指定 innodb_data_file_path 的大小,但是在 MySQL-4.0 中这个值默认为 64MB,文件名为 ibdata1。

为了得到好的性能,必须指定 InnoDB 参数,例如:
对于一台 128MB 内存, 10GB 硬盘的 Windows NT 机器的配置如下:

[mysqld]

innodb_data_home_dir = c:/ibdata
# 数据文件必须能容下数据和索引
innodb_data_file_path = ibdata1:2000M;ibdata2:2000M
# 设置缓冲池大小为内存的 50 - 80 %
set-variable = innodb_buffer_pool_size=70M
set-variable = innodb_additional_mem_pool_size=10M
innodb_log_group_home_dir = c:/iblogs
# log_arch_dir 必须和 log_group_home_dir 一样
innodb_log_arch_dir = c:/iblogs
innodb_log_archive=0
set-variable = innodb_log_files_in_group=3
# 设置日志文件大小为缓冲池的 15%。
set-variable = innodb_log_file_size=10M
set-variable = innodb_log_buffer_size=8M
# 如果丢失最近的几个事务影响不大的话,设置 flush_log_at_trx_commit 为 0。
innodb_flush_log_at_trx_commit=1
set-variable = innodb_file_io_threads=4
set-variable = innodb_lock_wait_timeout=50

注意 InnoDB 不会自己建立目录,你必须使用操作系统命令建立目录,并注意 MySQL 的权限。

第一次运行 MySQL 时,建议使用命令行方式。在 Windows 下,用命令行开启:

C:/MYSQL>mysqld-max --standalone --console

在 Windows 下设置配置文件的原则是:
my.cnf 和 my.ini 只能是一个有效。
my.cnf 放在 C: 根目录下, my.ini 文件放在 WINDIR 目录下,C:/WINDOWS 或者 C:/WINNT。

在 Linux 下面,初始配置文件按下面的顺序搜索:

/etc/my.cnf 全局选项
COMPILATION_DATADIR/my.cnf 服务器范围的选项
defaults-extra-file 采用 --defaults-extra-file=.... 的文件
~/.my.cnf 用户指定的选项

假设你有一台 512MB 内存,三台 20GB 硬盘(路径分别为:"/","/dr2","/dr3“)的服务器,设置的例子为:

[mysqld]
innodb_data_home_dir = /
innodb_data_file_path = ibdata/ibdata1:2000M;dr2/ibdata/ibdata2:2000M
set-variable = innodb_buffer_pool_size=350M
set-variable = innodb_additional_mem_pool_size=20M
innodb_log_group_home_dir = /dr3/iblogs
innodb_log_arch_dir = /dr3/iblogs
innodb_log_archive=0
set-variable = innodb_log_files_in_group=3
set-variable = innodb_log_file_size=50M
set-variable = innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
set-variable = innodb_file_io_threads=4
set-variable = innodb_lock_wait_timeout=50
#innodb_flush_method=fdatasync
#innodb_fast_shutdown=1
#set-variable = innodb_thread_concurrency=5

为了提升性能,我们把日志文件和数据文件放在不同的磁盘,另外还可以采用裸的磁盘分区来存储数据以提升性能。

需要提醒的是,在 Linux x86 上不要把内存设置太高,glibc 会把进程堆增长到线程堆栈之上,能把服务器给搞垮,下面的值接近于 2GB 时就很危险:

innodb_buffer_pool_size + key_buffer +
max_connections * (sort_buffer + record_buffer) + max_connections * 2 MB

每个线程将使用 2MB(二进制版本为 256 KB) 的堆栈,在最坏的情况下,还会使用 sort_buffer + record_buffer 的附加内存。

分享到:
评论

相关推荐

    MySQL内核:InnoDB存储引擎 卷1.pdf

    《MySQL内核:InnoDB存储引擎 卷1》由资深MySQL专家,机工畅销图书作者亲自执笔,在以往出版的两本InnoDB介绍性图书的基础之上,更深入地介绍InnoDB存储引擎的内核,例如latch、B+树索引、事务、锁等,从源代码的...

    MySQL技术内幕 InnoDB存储引擎.pptx

    本书还详细介绍了InnoDB的内部存储格式、物理存储结构、日志系统、事务处理、恢复机制等高级话题,以及如何优化InnoDB的性能,从而更好地利用MySQL进行数据库操作。 本书适合于MySQL DBA和开发者阅读,也适合于对...

    MySQL Innodb 索引原理详解

    本文详细介绍了MySQL InnoDB存储引擎中的索引原理及其实现方式,特别是B+树的应用。通过对比不同的树形结构,我们了解到B+树为何成为数据库索引的理想选择。此外,还讨论了InnoDB与MyISAM的主要差异,以及索引的插入...

    py_innodb_page_info工具

    本文将详细介绍`py_innodb_page_info`的使用及其背后的数据库知识。 首先,`py_innodb_page_info`是一个Python库,它的主要功能是解析InnoDB的数据页和日志文件,帮助开发者获取有关MySQL数据库内部结构的详细信息...

    XtraDB、InnoDB 内部结构示意图

    标题《XtraDB、InnoDB 内部结构示意图》表明文章将重点介绍MySQL数据库中XtraDB和InnoDB存储引擎的内部架构。由于内容描述中未给出更详细的信息,我们将基于提供的部分内容来推测文章的核心知识点。 从内容来看,...

    mysql内核 innodb存储引擎

    全书首先全景式地介绍了MySQL独有的插件式存储引擎,分析了MySQL的各种存储引擎的优势和应用环境。接着以InnoDB的内部实现为切入点,逐一详细讲解了InnoDB存储引擎内部的各个功能模块,包括InnoDB存储引擎的体系结构...

    mysql安装innodb插件

    本文将详细介绍在已安装MySQL的情况下,如何安装InnoDB插件,以确保您的数据库环境能够充分利用这些高级功能。 #### 二、理解InnoDB与MySQL的关系 InnoDB作为MySQL的一个存储引擎,其实质上是一个插件。当您安装...

    MySQL Innodb 参数详解与优化实践

    本文将详细介绍InnoDB的一些关键参数及其对数据库性能的影响,并提供一些优化建议。 #### 二、InnoDB参数详解 ##### 1. `innodb_data_home_dir` - **描述**:此参数用于指定InnoDB表空间的根目录。如果未在`my.cnf...

    innodb官方文档,很实用

    - **高级特性**:除了基本的安装和配置指导外,该用户指南还详细介绍了InnoDB Plugin 1.0.6中的一些高级特性,例如索引组织表、热备份支持等。 #### 技术细节 - **事务处理**:InnoDB Plugin 1.0 支持ACID事务,...

    Mysql 高可用 InnoDB Cluster 多节点搭建过程

    下面将详细介绍这个搭建过程。 一、简介 InnoDB Cluster 是 Mysql 的一个高可用性解决方案,它可以将多个 Mysql 节点组合成一个集群,提供高可用的数据库服务。InnoDB Cluster 可以分为两种情况,即实验环境使用 ...

    MySQL5.6版InnoDB引擎深入剖析

    MySQL5.6版InnoDB深度介绍。

    InnoDB 中文参考手册(CHM)

    1. **InnoDB存储引擎介绍** InnoDB存储引擎是MySQL中用于处理事务型数据的主要引擎,它支持外键约束,确保数据的一致性和完整性。与其他存储引擎相比,InnoDB提供了更高的数据安全性,适合于需要高并发和数据一致...

    InnoDB官方文档中文翻译版

    InnoDB是MySQL数据库管理系统...这份官方文档详细介绍了这些概念,并给出了实际操作的指导,是学习和使用InnoDB不可或缺的参考资料。通过深入学习,你可以更好地理解InnoDB的工作原理,从而更高效地设计和管理数据库。

    MySql innodb 引擎表存储分析

    本文将深入解析InnoDB存储引擎中的表存储机制,重点介绍其如何管理和存储数据。 #### InnoDB表存储结构 InnoDB表存储结构的核心特点之一是它采用索引组织表(Index Organized Table, IOT)的方式存储数据。这意味着表...

    innodb文件格式分析器

    本文将详细介绍一款名为"Innodb文件格式分析器"的工具,它专门用于解析InnoDB的文件格式,为用户提供深入洞察数据库内部结构的能力。 首先,InnoDB存储引擎的核心文件包括数据文件(.ibd)和系统表空间文件(ibdata...

    关于使用InnoDB

    本文主要介绍InnoDB存储引擎的特点、设置方法以及相关的注意事项。 #### InnoDB存储引擎的优点 1. **支持事务安全**:InnoDB支持ACID特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性...

    mySql 存储引擎 启用 Innodb

    本文将详细介绍如何在MySQL中启用InnoDB存储引擎,并对比分析InnoDB与其他存储引擎(如MyISAM)之间的主要差异。 #### 二、InnoDB简介 InnoDB是MySQL数据库的一种默认存储引擎,自MySQL 5.5版本开始,默认启用...

    mysql,innodb索引介绍

    MySQL数据库的InnoDB存储引擎广泛使用BTree索引来优化查询性能。BTree索引是一种常见的索引类型,尤其适用于范围查询和排序操作。在MySQL中,InnoDB存储引擎的索引分为聚簇索引(主键索引)和非聚簇索引(二级索引)...

Global site tag (gtag.js) - Google Analytics