`
rq2_79
  • 浏览: 234534 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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 的附加内存。

后续的文章,我们还将介绍 InnoDB 表的建立,MyISAM 到 InnoDB 的转换,外键约束的使用,自动增长列的操作,InnoDB 数据库的备份和恢复,事务的使用,性能调优等内容。

请继续关注,FreeLAMP.com 为您提供的企业级的开放源码数据库解决方案。
分享到:
评论

相关推荐

    mysql内核 innodb存储引擎

    《MySQL技术内幕:InnoDB存储引擎》是国内目前唯一的一本关于InnoDB的著作,由资深MySQL专家亲自执笔,中外数据库专家联袂推荐,权威性毋庸置疑。内容深入,从源代码的角度深度解析了InnoDB的体系结构、实现原理、...

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

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

    MySQL中InnoDB锁的介绍及用途

    一、InnoDB引擎对隔离级别的支持 事务隔离级别 脏读 不可重复读 幻读 读未提交(read-uncommitted) 可能 可能 可能 不可重复读(read-committed) 不可能 可能 可能 可重复读(repeatable-read) 不可能...

    MySQL数据库InnoDB数据恢复工具的使用小结详解

    本文从实际使用经验出发,介绍一款开源的MySQL数据库InnoDB数据恢复工具:innodb-tools,它通过从原始数据文件中提取表的行记录,实现从丢失的或者被毁坏的MySQL表中恢复数据。例如,当你不小心执行DROP TABLE、...

    使用innodb_force_recovery解决MySQL崩溃无法重启问题

    主要介绍了使用innodb_force_recovery解决MySQL崩溃无法重启问题,这只一个成功案例,并不是万能的解决方法,需要酌情考虑,需要的朋友可以参考下

    mysql之innodb的锁分类介绍

    一、innodb行锁分类 record lock:记录锁,也就是仅仅锁着单独的一行 gap lock:区间锁,仅仅锁住一个区间(注意这里的区间都是开区间,也就是不包括边界值。 next-key lock:record lock+gap lock,所以next-key ...

    简述MySQL InnoDB存储引擎

    虽然 MySQL 支持种类繁多的存储引擎,但最常用的当属 InnoDB 了,本篇文章将主要介绍 InnoDB 存储引擎相关知识。 1. InnoDB 简介 MySQL 5.5 版本以后,默认存储引擎就是 InnoDB 了。InnoDB 是一种兼顾了高可靠性和...

    浅析在线调整 innodb_buffer_pool_size

    浅析在线调整 innodb_buffer_pool_size 作者:zhou ...16KB的大小设定),而buffer_pool是用来管理和缓存这些page的,innodb会把一块连续的内存划分给buffer_pool使用,并把buffer_pool等分为多个buffer

    innblock | InnoDB page观察利器

    引用作者对工具的介绍:“InnoDB中索引块的内部组织一直是大家比较感兴趣并且乐于研究的东西,我们从很多书籍和文章都不惜笔墨进行大量的描述比如运维内参>>中就能感受到作者用了大量篇幅描述什么是slot、什么是heap...

    MySQL的InnoDB引擎入门学习教程

    主要介绍了MySQL的InnoDB引擎入门学习教程,对InnoDB的存储结构有一个较好的总结,需要的朋友可以参考下

    修改Innodb的数据页大小以优化MySQL的方法

    主要介绍了修改Innodb的数据页大小以优化MySQL的方法,Innodb是MySQL下一个颇具人气的数据引擎,需要的朋友可以参考下

    MySQL中InnoDB数据结构和索引介绍

    二、B+Tree介绍 b+树有个特点,数据都是存在子节点上(叶子节点)如下图: 特点: 其它节点只存索引,数据都是存在叶子节点上,而且叶子节点是有序的,在查询时有更高效率,而且这样的结构,不用存下一个节点磁

    深入探讨:MySQL数据库MyISAM与InnoDB存储引擎的比较

    InnoDB是事务型引擎,支持回滚、崩溃恢复能力、多版本并发控制、ACID事务,支持行级锁定(InnoDB表的行锁不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,如like操作时的

    MySQL存储引擎,Innodb与MyISAM谁更叼?

    本文将主要讲述两个存储引擎的实现方式,顺带介绍一下他们的一些特性区别,和适用场景。 非聚集索引与聚集索引 MyISAM索引实现 MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是...

    MySQLInnoDB特性:两次写(DoubleWrite)

    我们知道,由于文件系统对一次大数据页(例如InnoDB的16KB)大多数情况下不是原子操作,这意味着如果服务器宕机了,可能只做了部分写入。16K的数据,写入4K时,发生了系统断电/oscrash,只有一部分写是成功的,这种...

    Xtrabackup使用指南 InnoDB数据备份工具

    一、Xtrabackup介绍 A、Xtrabackup是什么 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。 Xtrabackup有两个主要的工具:...

    mysql执行sql文件报错Error: Unknown storage engine‘InnoDB’的解决方法

    最近在执行一个innoDB类型sql文件的时候,发现系统报错了,通过查找相关的资料终于解决了,所以下面这篇文章主要给大家介绍了关于mysql执行sql文件时报错Error: Unknown storage engine 'InnoDB'的解决方法,需要的...

    聊一聊MyISAM和InnoDB的区别

    主要介绍了聊一聊MyISAM和InnoDB的区别,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    MySQL存储引擎InnoDB的配置与使用的讲解

    今天小编就为大家分享一篇关于MySQL存储引擎InnoDB的配置与使用的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    关于MySQL innodb_autoinc_lock_mode介绍

    下面小编就为大家带来一篇关于MySQL innodb_autoinc_lock_mode介绍。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Global site tag (gtag.js) - Google Analytics