MySQL配置信息,innodb 相关选项

如果你的MySQL服务包含InnoDB支持但是并不打算使用的话,

使用此选项会节省内存以及磁盘空间,并且加速某些部分

skip-innodb

这对Innodb表来说非常重要,Innodb把所有的数据和索引都缓存起来,此参数设置越大,数据存取时所需要的磁盘I/O越少。

Innodb比MyISAM表对缓冲更为敏感。MyISAM可以在默认的 key_buffer_size 设置下运行的可以,然而Innodb在默认的 innodb_buffer_pool_size 设置下却跟蜗牛似的。

注意:

1. 当然如果你的数据量不大,并且不会暴增,也无需把 innodb_buffer_pool_size 设置的太大

2. 如果在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的80%

3. 注意在32位系统上你每个进程可能被限制在 2-3.5G,

属重点优化参数

innodb_buffer_pool_size = 2048M

InnoDB 将数据保存在一个或者多个数据文件中成为表空间

如果你只有单个逻辑驱动保存你的数据,一个单个的自增文件就足够好了

其他情况下.每个设备一个文件一般都是个好的选择

你也可以配置InnoDB来使用裸盘分区

innodb_data_file_path = ibdata1:1024M:autoextend

文件IO的线程数,一般为 4

此值在Unix下被硬编码为4,但是在Windows下可以设置得较大.

innodb_file_io_threads = 4

允许线程数量。

服务器有几个CPU就设置为几,建议用默认设置。

过高的值可能导致线程的互斥。

innodb_thread_concurrency = 16

如果设置为1 ,InnoDB会在每次事务提交后将事务日志写到磁盘上,

基于性能考虑,可以设置为0或2,但要承担在发生故障时丢失数据的风险。

0代表日志只大约每秒写入日志文件并且日志文件刷新到磁盘.

2代表每次提交后日志写入日志文件,但是日志文件每秒刷新到磁盘上。

几点说明:

1. 如果是游戏服务器,建议此值设置为2;如果是对数据安全要求极高的应用,建议设置为1;

2. 设置为0性能最高,但如果发生故障,数据可能会有丢失的危险!

3. 默认值1每一次事务提交都需要把日志写到硬盘,这是很费时的。

4. 特别是使用电池供电缓存(Battery backed up cache)时。设成2对于很多运用,特别是从MyISAM表转过来的是可以的,

5. 它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬盘,所以你一般不会丢失超过1-2秒的更新。

6. 设成0会更快一点,但安全方面比较差,即使MySQL挂了也可能会丢失事务的数据。而值2只会在整个操作系统挂了时才可能丢数据

属重点优化参数

innodb_flush_log_at_trx_commit = 2

此参数用于写日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,但意外的故障将会丢失数据。

当缓存大小达到设定值后, InnoDB会将这些数据写到到磁盘上。

由于基本上每秒都会刷新一次,所以没有必要将此值设置的太大,MySQL开发人员建议设置为1-8M之间

innodb_log_buffer_size = 16M

此参数用于确定日志文件的大小

为避免在日志文件覆写上不必要的缓冲池刷新

一般设置为日志文件总合大小到你缓冲池大小的25%~100%

但这同时也会增加恢复故障数据库所需的时间

innodb_log_file_size = 1024M

日志组中的文件总数. 为提高性能,MySQL会以循环方式将日志写到多个文件中

通常来说2~3是比较好的.

innodb_log_files_in_group = 3

InnoDB的日志文件所在位置. 默认是MySQL的datadir.

你可以将其指定到一个独立的硬盘上或者一个RAID1卷上来提高其性能

innodb_log_group_home_dir

在InnoDB缓冲池中最大允许的脏页面的比例.

如果达到限额, InnoDB会开始刷新他们防止他们妨碍到干净数据页面.

这是一个软限制,不被保证绝对执行.

innodb_max_dirty_pages_pct = 90

InnoDB用来刷新日志的方法.

表空间总是使用双重写入刷新方法

默认值是 “fdatasync”, 另一个是 “O_DSYNC”.

innodb_flush_method=O_DSYNC

在被回滚前,一个InnoDB的事务应该等待一个锁被批准多久.

InnoDB在其拥有的锁表中自动检测事务死锁并且回滚事务.

如果你使用 LOCK TABLES 指令, 或者在同样事务中使用除了InnoDB以外的其他事务安全的存储引擎

那么一个死锁可能发生而InnoDB无法注意到.

这种情况下这个timeout值对于解决这种问题就非常有帮助.

innodb_lock_wait_timeout = 30

[mysqldump]

不要在将内存中的整个结果写入磁盘之前缓存. 在导出非常巨大的表时需要此项

quick

max_allowed_packet = 64M

[mysql]

no-auto-rehash

指定一个请求的最大连接时间,对于4GB左右的内存服务器来说,可以将其设置为5-10。

wait_timeout = 10

开启该选可以彻底关闭MySQL的TCP/IP连接方式,如果WEB服务器是以远程连接的方式访问MYSQL数据库服务器的,则不要开启该选项,否则将无法正常连接。

skip_networking

将没有使用索引的查询也记录下来

log-queries-not-using-indexes

此处评论已关闭

[player id="719102"/]