mysql内存和IO优化一些重要参数

1、innodb_flush_log_at_trx_commit

0:日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,但是在一个事务提交不做任何操作。

1:在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到磁盘操作的刷新。

2:在每个提交,日志缓冲被写到文件,但不对日志文件做到磁盘操作的刷新。对日志文件每秒刷新一次。

默认值是 1,也是最安全的设置,即每个事务提交的时候都会从 log buffer 写到日志文件(buffer log),而且会实际刷新磁盘,但是这样性能有一定的损失。

如果可以容忍在数据库崩溃的时候损失一部分数据,那么设置成 0 或者 2 都会有所改善。

设置成 0,则在数据库崩溃的时候会丢失那些没有被写入日志文件的事务,最多丢失 1 秒钟的事务,这种方式是最不安全的,也是效率最高的。

设置成 2 的时候,因为只是没有刷新到磁盘,但是已经写入日志文件,所以只要操作系统没有崩溃,那么并没有丢失数据 ,比设置成 0 更安全一些。

在 mysql 的手册中,为了确保事务的持久性和复制设置的耐受性、一致性,都是建议将这个参数设置为 1 的。

2、innodb_log_file_size

日志组中的每个日志文件的大小(单位 MB)。如果 n 是日志组中日志文件的数目,那么理想的数值为 1M 至下面设置的缓冲池(bufferpool)大小的 1/n。

较大的值,可以减少刷新缓冲池的次数,从而减少磁盘 I/O。但是大的日志文件意味着在崩溃时需要更长的时间来恢复数据。一般用512M左右,具体取决于服务器的空间。

3、innodb_log_buffer_size

InnoDB 将日志写入日志磁盘文件前的缓冲大小。理想值为 8M左右。大的日志缓冲允许事务运行时不需要将日志保存入磁盘而只到事务被提交(commit)。

因此,如果有大的事务处理,设置大的日志缓冲可以减少磁盘I/O。

4、innodb_buffer_pool_size

InnoDB用来高速缓冲数据和索引内存缓冲大小。更大的设置可以使访问数据时减少磁盘I/O。在一个专用的数据库(inndb专用)服务器上可以将它设置为物理内存的80 %,

和key_buffer相同,如果数据量比较小也不怎么增加,那么不要把这个值设太高也可以提高内存的使用率。因为物理内存的使用竞争可能会影响操作系统的页面调用。

5、innodb_additional_mem_pool_size

InnoDB 用来存储数据字典(data dictionary)信息和其它内部数据结构(internal data structures)的存储器组合(memory pool)大小。理想的值为 2M,

如果有更多的表你就需要在这里重新分配。如果 InnoDB 用尽这个池中的所有内存,它将从操作系统中分配内存,并将错误信息写入 MySQL 的错误日志中。

6、innodb_file_io_threads

InnoDB 中的文件 I/O 线程。 通常设置为 4。

7、sync_binlog

二进制日志(binary log)同步到磁盘的频率。binary log 每写入sync_binlog 次后,刷写到磁盘。如果 autocommit 开启,每个语句都写一次 binary log,否则每次事务写一次。

默认值是 0,不主动同步,而依赖操作系统本身不定期把文件内容 flush 到磁盘

设为 1 最安全,在每个语句或事务后同步一次 binary log,即使在崩溃时也最多丢失一个语句或事务的日志,但因此也最慢。

大多数情况下,对数据的一致性并没有很严格的要求,所以并不会把 sync_binlog 配置成 1,为了追求高并发,提升性能,可以设置为 100 或直接用 0。

8、write/read thread

异步IO线程数

innodb_write_io_threads=16

innodb_read_io_threads=16

(该参数需要在配置文件中添加,重启mysql实例起效)脏页写的线程数,加大该参数可以提升写入性能

9、innodb_max_dirty_pages_pct

最大脏页百分数,当系统中脏页所占百分比超过这个值,INNODB就会进行写操作以把页中的已更新数据写入到磁盘文件中。默认75,一般现在流行的SSD硬盘很难达到这个比例。可依据实际情况在75-80之间调节

10、innodb_io_capacity=5000

从缓冲区刷新脏页时,一次刷新脏页的数量。根据磁盘IOPS的能力一般建议设置如下:

SAS 200

SSD 5000

PCI-E 10000-50000

11、innodb_flush_method=O_DIRECT(该参数需要重启mysql实例起效)

控制innodb 数据文件和redo log的打开、刷写模式。有三个值:fdatasync(默认),O_DSYNC,O_DIRECT。

fdatasync模式:写数据时,write这一步并不需要真正写到磁盘才算完成(可能写入到操作系统buffer中就会返回完成),真正完成是flush操作,buffer交给操作系统去flush,并且文件的元数据信息也都需要更新到磁盘。

O_DSYNC模式:写日志操作是在write这步完成,而数据文件的写入是在flush这步通过fsync完成。

O_DIRECT模式:数据文件的写入操作是直接从mysql innodb buffer到磁盘的,并不用通过操作系统的缓冲,而真正的完成也是在flush这步,日志还是要经过OS缓冲,在大量随机写的环境中O_DIRECT要比fdatasync效率更高些,顺序写多的话,还是默认的fdatasync更高效。

12、innodb_adaptive_flushing

设置为 ON (使刷新脏页更智能)

13、innodb_max_dirty_pages_pct

这个参数据控制脏页的比例如果是innodb_plugin或是MySQL5.5以上的版本,建议这个参数可以设制到75%-90%都行。如果是大量写入,而且写入的数据不是太活跃,可以考虑把这个值设的低一点。 如果写入或是更新的数据也就是热数据就可以考虑把这个值设为:95%

时间: 2024-10-01 05:25:40

mysql内存和IO优化一些重要参数的相关文章

MySQL 内存和CPU优化相关的参数

mysql> SHOW GLOBAL STATUS LIKE 'innodb%read%'; +---------------------------------------+---------+ | Variable_name | Value | +---------------------------------------+---------+ | Innodb_buffer_pool_read_ahead_rnd | 0 | | Innodb_buffer_pool_read_ahead

mysql内存使用以及优化中需要的几点注意

1.从内存中读取数据是微秒级别的.而从磁盘读则是毫秒级别的.二者相差一个数量级.所以想优化数据库,第一个要做到的就是优化io. 2.key_buffer_size[global]设置的内存区域大小缓存了myisam表的索引.由于myisam只缓存索引在内存中,并不缓存数据在内存,所以如果内存允许,要让这个参数足够能容纳所有myisam的所有索引来提高性能.另外,在myisam表上,尽量让所有的查询条件都限制在索引上,以便能让缓存替我们提高查找效率. 3.bulk_insert_buffer_si

mySQL内存及虚拟内存优化设置

为了装mysql环境测试,装上后发现启动后mysql占用了很大的虚拟内存,达8百多兆.网上搜索了一下,得到高人指点my.ini.再也没见再详细的了..只好打开my.ini逐行的啃,虽然英文差了点,不过多少M还是看得明的^-^ 更改后如下: innodb_buffer_pool_size=576M ->256M InnoDB引擎缓冲区占了大头,首要就是拿它开刀 query_cache_size=100M          ->16M 查询缓存 tmp_table_size=102M       

MySQL设计规范与性能优化

引言 MySQL是目前使用最为广泛的关系型数据库之一,如果使用得当,可支撑企业级高并发.高可靠服务,使用不当甚至连并发量略高的个人网站都难以支撑: 就算使用了缓存,大量的数据库访问依旧在所难免,即使设置了较长的缓存有效期,而且缓存命中率较理想,但缓存的创建和过期后的重建都是需要访问数据库的: 本文主要从MySQL表结构设计规范和MySQL自身性能优化两方面来讨论该如何对MySQL数据库进行优化: MySQL表结构设计规范 1. 数据库设计命名规范 (1)数据库,数据表一律使用前缀,前缀名称一般不

Mysql内存表配置及性能测试

centos7 mysql数据库安装和配可以参考一下文章,基本照做就可以了(我选的方法二): http://www.cnblogs.com/starof/p/4680083.html 说到内存表,首先有两个概念简单区分下: 1.临时表:2.内存表: 临时表与内存表的区分: 临时表是指使用create temprary table创建的临时表.临时表可以使用任何存储引擎,临时表只在单个连接中可见,当连接断开时,临时表也会消失. MySQL最初会将临时表创建在内存中,当数据变的太大后,就会转储到磁盘

【mysql】关于IO/内存方面的一些优化

这里使用的是mysql  Ver 14.14 Distrib 5.6.19, for Linux (i686) using  EditLine wrapper 一.mysql目录文件 ibdata1:系统表空间 包含数据字典.回滚日志/undolog等 (insert buffer segment/double write segment/rollback segment/index segment/dictionary segment/undo segment) ib_logfile0/ib_

mysql性能优化之服务器参数配置-内存配置

MySQL服务器参数介绍 MySQL获取配置信息路径 命令行参数 mysqld_safe --datadir=/data/sql_data 配置文件 mysqld --help --verbose | grep -A 1 'Default options' /etc/my.cnf/ /etc/mysql/my.cnf /home/mysql/my.cnf ~/.my.cnf MySQL配置参数的作用域 全局参数(需要重新登录才能生效) set global 参数名=参数值; set @@glob

mysql内存参数整理和条调优以及内存统计

date:20140530auth:Jin 参考:http://dev.mysql.com/doc/refman/5.5/en/server-status-variables.html#http://dev.mysql.com/doc/refman/5.5/en/memory-use.htmlhttp://blog.csdn.net/wyzxg/article/details/7268122http://blog.csdn.net/wyzxg/article/details/7268175 *.

Mysql性能优化之缓存参数优化

数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所以,要优化数据库,首先第一步需要优化的就是 IO,尽可能将磁盘IO转化为内存IO.本文先从 MySQL 数据库IO相关参数(缓存参数)的角度来进行IO优化: 一.query_cache_size/query_cache_type (global)    Query cache 作用于整个 MySQL Inst