关闭

14.3.1 InnoDB Initialization and Startup Configuration

135人阅读 评论(0) 收藏 举报
分类:

14.3 InnoDB Configuration:

14.3.1 InnoDB Initialization and Startup Configuration
14.3.2 Configuring InnoDB for Read-Only Operation
14.3.3 InnoDB Buffer Pool Configuration
14.3.4 Configuring the Memory Allocator for InnoDB
14.3.5 Configuring InnoDB Change Buffering
14.3.6 Configuring Thread Concurrency for InnoDB
14.3.7 Configuring the Number of Background InnoDB I/O Threads
14.3.8 Configuring the InnoDB Master Thread I/O Rate
14.3.9 Configuring Spin Lock Polling
14.3.10 Configuring InnoDB Purge Scheduling
14.3.11 Configuring Optimizer Statistics for InnoDB
14.3.12 Configuring the Merge Threshold for Index Pages

这个章节介绍配置信息和InnoDB 初始化的过程,启动,各种组件和功能。

14.3.1 InnoDB Initialization and Startup Configuration InnoDB 初始化和启动配置

第一个决定关于InnoDB 配置涉及如何设计 InnoDB 数据文件,

多少内存分配InnoDB 存储引擎。

你记录那些选择可以记录在配置文件里在MySQL 启动的时候,或者在命令行指定它们。

InnoDB 表空间和Log Files概要

两个重要的基于磁盘的资源管理通过InnoDB 存储引擎是它的表空间数据和它的日志文件。

如果你没有指定InnoDB 配置选项,MySQL 创建一个自动增长的数据文件,

略大于12MB,叫做ibdata1 和2个日志文件 ib_logfile0 and ib_logfile1 在MySQL 数据目录下。

大小有innodb_log_file_size 变量决定,为了得到更好的性能,显示的 提供InnoDB 参数如下讨论,

当然,编辑的设置以适应你的硬件和要求。

这个例子有代表性。参见14.11节,“InnoDB启动选项和系统变量”有关InnoDB相关配置参数。

存储设备的注意事项:

在某系情况下,数据库性能改善如果数据不被放置在同一个物理磁盘上。

放置log files 在不同的磁盘上对性能是有益的。

这个例子阐释了如何做到这个, 它放置两个数据文件到不同的磁盘和放置日志到第三个磁盘。

InnoDB 填满从第一个数据文件开始, 你也可以使用raw disk 分区。

注意:

InnoDB 是一个事务安全(遵从ACID)存储引擎对于MySQL 已经提交,回滚,和crash-recovery 能力来保护它的数据。

然而, 它不能这样做 如果它依赖的操作系统或者硬件不按预期的话。

很多操作系统或者磁盘子系统可能延迟或者重新安排些操作来改善性能。

在一些操作系统上,每个fsync() 系统调用必须等待直到所有的非写数据对于一个文件已经被刷新

可能实际返回在数据已经被刷新到磁盘。

由于这个,一个操作系统crash 或者断电可能会破坏最近提交的数据m或者在最坏的情况下,

甚至破坏数据库因为写操作已经被重新安排。

如果数据完整性是重要的,执行一些“拔插头”测试在你使用任何东西在生产环境。

On OS X 10.3 and up,InnoDB 使用一个指定的fcntl() 文件更新方法,在Linux下,

它是可以关闭协会缓存的。

在ATA/SATA 磁盘,一个命令hdparm -W0 /dev/hda 可以禁用回写cache.

-W Get/set drive write-caching flag (0/1)

对于InnoDB 恢复功能来保护数据,InnoDB 使用一个文件刷新技术涉及一个机构称为doublewrite buffer,

通过(innodb_doublewrite=ON)启用。 doublewrite buffer 增加安全来恢复

在一个crash 或者停电,通过减少 fsync()操作来改善性能。

它是推荐innodb_doublewrite 选项保持启用如果你关心的是数据的完整性或者可能出现的故障

mysql> show variables like ‘%innodb_doublewrite%’;
+——————–+——-+
| Variable_name | Value |
+——————–+——-+
| innodb_doublewrite | ON |
+——————–+——-+
1 row in set (0.00 sec)

注意:

如果你的数据可靠性是一个顾虑,不需要配置InnoDB 来使用数据文件或者日志文件在NFS 文件系统。

指定InnodDB 表空间文件的位置和大小:

设置InnoDB 表空间文件,使用innodb_data_file_path选项在my.cnf 的[mysqld]章节。

在Windows上,你可以使用my.ini代替。 innodb_data_file_path的值是一个或者多个数据文件的李彪,

如果你的文件对于一个数据文件,用”,”分隔它们。

mysql> show variables like ‘%innodb_data_file_path%’;
+———————–+————————+
| Variable_name | Value |
+———————–+————————+
| innodb_data_file_path | ibdata1:12M:autoextend |
+———————–+————————+
1 row in set (0.00 sec)

innodb_data_file_path=datafile_spec1[;datafile_spec2]…

jrhdpt02:/data01/mysql# ls -ltrh ib*
-rw-rw—- 1 mysql mysql 76M Nov 17 15:42 ibdata1
-rw-rw—- 1 mysql mysql 512M Nov 17 15:42 ib_logfile0
-rw-rw—- 1 mysql mysql 512M Nov 17 15:42 ib_logfile1

下面的设置显示的创建一个最小的系统表空间:

[mysqld]
innodb_data_file_path=ibdata1:12M:autoextend

这个配置一个单独的12MB的数据文件叫做ibdata1 是自动扩展的,没有指定文件的位置,因此默认,

InnoDB 创建它在MySQL data 目录下。

单位使用K,M或者G后缀字母来表示KB,MB或GB。

一个表空间包含一个固定50MB大小的数据文件叫做ibdata1 和一个50MB自动增长的文件叫做ibdata2 在数据目录可以配置为:

[mysqld]
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend

数据文件指定完整的语法包括文件名,它的大小和一些可选的属性。

file_name:file_size[:autoextend[:max:max_file_size]]

自动增长和最大属性可以用于最好的数据文件在innodb_data_file_path

如果你指定自动增长的选项用于最后的数据文件,InnoDB 扩展数据文件如果它超出了空间, 增量是每次8MB默认情况下。

修改每次的增量,改变innodb_autoextend_increment系统变量。

如果磁盘变满了,你可能需要增加另外的数据文件到另外的磁盘。

对于表空间配置说明, see Section 14.4.1, “Resizing the InnoDB System Tablespace”.

InnoDB 不关心文件系统的最大文件大小,因此要小心在文件系统当最大文件大小是一个小的值比如2GB。

指定一个 auto-extending data file的最大值,使用max属性跟着autoextend attribute.

下面的配置运行ibdata1 增大到限制为500MB

[mysqld]
innodb_data_file_path=ibdata1:12M:autoextend:max:500M

InnoDB 创建一个表空间文件在MySQL 数据目录默认情况下。

指定一个明确的位置,使用 innodb_data_home_dir选项。比如,

来使用2个文件ibdata1 和ibdata2 但是在/ibdata目录下创建,配置InnoDB 如下:

[mysqld]
innodb_data_home_dir = /ibdata
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend

注意:

InnoDB 不创建目录,确保/indata目录存在在你启动server前。 这个也同样适用于log file 目录

确保MySQL server 有适当的访问权限来创建文件在目录里。

InnoDB 形成的路径对于每个数据文件通过本地的把 innodb_data_home_dir 和数据文件名字联系起来,

增加一个path name 单独的(斜杠或反斜杠) 在值之间如果需要的话。

如果innodb_data_home_dir 选项没有在my.cnf 文件中指定,默认的值是“dot”目录 ./

这意味着MySQL 数据目录。

如果你指定 innodb_data_home_dir 作为一个空的字符串,你可以

指定数据文件的列表

mysql> show variables like ‘%innodb_data_home_dir%’;
+———————-+——-+
| Variable_name | Value |
+———————-+——-+
| innodb_data_home_dir | |
+———————-+——-+
1 row in set (0.00 sec)

[mysqld]
innodb_data_home_dir =
innodb_data_file_path=/ibdata/ibdata1:50M;/ibdata/ibdata2:50M:autoextend

指定InnoDB 配置选项:

对于样本my.cnf 文件对于小的系统,假设你有一个计算机油512MB内存和一块硬盘。

下面的例子显示可能的配置参数在my.cnf或者my.ini 对于InnoDB,

包括自动增长属性。 这个例子适合大多数用户,包括Unix和Windows,

不需要分散InnoDB 数据文件和日志文件到几个磁盘。 它创建一个自动增长的数据文件ibdata1 和2个InnoDB 日志文件

ib_logfile0 和ib_logfile1 在MySQL 数据目录。

[mysqld]

You can write your other MySQL server options here

Data files must be able to hold your data and indexes.

Make sure that you have enough free disk space.

innodb_data_file_path = ibdata1:12M:autoextend
#

Set buffer pool size to 50-80% of your computer’s memory

innodb_buffer_pool_size=256M
innodb_additional_mem_pool_size=20M
#

Set the log file size to about 25% of the buffer pool size

innodb_log_file_size=64M
innodb_log_buffer_size=8M
#
innodb_flush_log_at_trx_commit=1

jrhdpt02:/root# cat /etc/my.cnf | grep innodb
innodb_file_per_table=1
innodb_log_buffer_size=8M
innodb_buffer_pool_size=8G
innodb_log_file_size=512M

innodb_buffer_pool_size = 128M

注意:

数据文件必须小于2GB 在一些系统里,日志文件的大小可以达到512GB,数据文件的大小必须略大于10MB

设置InnoDB 系统表空间

当你创建一个InnoDB 系统表空间,最好是启动MySQL server 从命令行。

InnoDB 然后打印信息关于数据库创建的信息,因此你可以看到发生了什么。

比如,在Windows上,如果mysqld 是位于C:\Program Files\MySQL\MySQL Server 5.6\bin,你可以启动像这样:

C:> “C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld” –console

如果你不发送服务器输出到屏幕,检查server的错误信息来查看 InnoDB的输出:

编辑MySQL 配置文件:

你可以放置InnoDB选项在[mysqld]章节 让你server 读取时

如果你安装MySQL 在Windows 使用安装和配置向导, 选项文件可能是my.ini文件位于MySQL 安装目录

如果你的PC 使用一个启动加载器 ,C盘不是启动盘,你唯一的选择是使用my.ini 文件在你的Windows目录
(典型的C:\WINDOWS).

你可以设置命令在命令行提示符 :

C:> SET WINDIR
windir=C:\WINDOWS

确保mysqld 读选项从一个指定文件,使用 –defaults-file option作为第一个选项在命令行当启动server的时候:

mysqld –defaults-file=your_path_to_my_cnf

简单的my.cnf 文件对于大的系统,假设 你有一个Linux 机器2GB内存和60GB硬盘 在目录路径 / ,/dr2和/dr3

决定InnoDB最大的内存分配

注意:

在32位的LINUX X86 ,要小心不要设置内存太大. 如果下列表达式的值接近或超过2GB是风险:

innodb_buffer_pool_size
+ key_buffer_size
+ max_connections*(sort_buffer_size+read_buffer_size+binlog_cache_size)
+ max_connections*2MB

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1181555次
    • 积分:38681
    • 等级:
    • 排名:第102名
    • 原创:2821篇
    • 转载:14篇
    • 译文:0篇
    • 评论:46条
    文章分类
    最新评论