数据库的主要瓶颈在io。下面是设计到一下影响innodb io性能的主要参数。
1、innodb_buffer_pool_size
概念:为[InnoDB]数据表及其索引而保留的RAM内存量(默认设置是8MB)。
这个参数对速度有着相当大的影响,如果计算机上只运行有[MySQL]/[InnoDB]数据库服务器,就应该把全部内存的80%用于这个用途。
2、innodb_additional_men_pool_size
概念:InnoDB用来存储数据字典(data dictionary)信息和其它内部数据结构(internaldata structures)的存储器组合(memorypool)大小。
说明:Innodb申请缓冲池(innodb_buffer_pool_size)的空间,但是每个缓冲池的缓冲帧(frame)还有缓冲控制对象(buffercontrolblock),这些对象记录了诸如LRU、锁等待等方面的信息,而这个对象的内存需要从额外内存池冲(innodb_additional_men_pool_size)申请。 所以,提高InnoDB缓冲池时,这个值也应该相应增加。
3、innodb_max_dirty_pages_pct
概念:内存中最大脏页的百分数
说明:当系统中脏页所占百分比超过这个值,INNODB就会进行写操作以把页中的已更新数据写入到磁盘文件中。5.1版本以前(包括5.1)默认90,google对这个问题进行了测试,80最优。mysqlplugin版本是75,和80接近。
备注:Innodb存储引擎会在每1s刷新缓冲池和flushloop时,会判断这个值,如果大于这个百分比,才会刷新100个脏页。因此,当内存很大或数据服务器眼里很大时,刷新脏页的速度会降低。
4、memlock
使用memlock可以避免MySQL内存进入swap
5、innodb_log_buffer_size
概念:InnoDB将日志写入日志磁盘文件前的缓冲大小。
说明:大的日志缓冲允许事务运行时不需要将日志保存入磁盘而只到事务被提交(commit)。因此,如果有大的事务处理,设置大的日志缓冲可以减少磁盘I/O。
http://www.mysqlab.net/knowledge/kb/detail/topic/innodb/id/6553
6、innodb_log_file_size
概念:重做日志文件大小。
说明:此参数在高写入负载尤其是大数据集的情况下很重要,值越大相性能越高,但是带来的副作用是系统灾难恢复时间加大。如果太小了会导致一个数据日志需要多次切换,在错误日志里面警告。
备注:http://www.mysqlperformanceblog.com/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/
7、innodb_log_files_in_group
概念:使用多少个日志文件(默认设置是2)。
说明:[InnoDB]数据表驱动程序将以轮转方式依次填写这些文件;当所有的日志文件都写满以后,之后的日志信息将写入第一个日志文件的最大长度。
8、innodb_flush_log_at_trx_commit
概念:控制缓冲区中的数据写到日志文件以及日志文件刷新到磁盘的操作时机
说明:
0:日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,但是在一个事务提交不做任何操作。
1:在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到磁盘操作的刷新。
2:在每个提交,日志缓冲被写到文件,但不对日志文件做到磁盘操作的刷新。对日志文件每秒刷新一次。
默认值是1,也是最安全的设置,即每个事务提交的时候都会从logbuffer写到日志文件,而且会实际刷新磁盘,但是这样性能有一定的损失。如果可以容忍在数据库崩溃的时候损失一部分数据,那么设置成0或者2 都会有所改善。
设置成0,则在数据库崩溃的时候会丢失那些没有被写入日志文件的事务,最多丢失1秒钟的事务,这种方式是最不安全的,也是效率最高的。
设置成2的时候,因为只是没有刷新到磁盘,但是已经写入日志文件,所以只要操作系统没有崩溃,那么并没有丢失数据,比设置成0更安全一些。
9、innodb_flush_method
概念:日志文件的同步办法(仅适用于UNIX/Linux系统)。
说明:datasync,O_DSYNC和O_DIRECT,其中fdatasync是默认值。它们控制了InnoDB刷新日志和数据的模式。用fsync()函数进行同步; O_DSYNC,用O_SYNC()函数进行同步。
10、binlog_cache_size
概念:未提交的二进制日志缓存大小
说明:binlog_cache_size是基于session的,一事务一缓存,所以不能设置过大。事务的记录大于设定值就会临时写到硬盘,影响性能,所以不能设置过小。
判断标准:查看BInlog_cache_use和BInlog_cache_disk_use,两者分别表示缓冲写二进制日志的次数和临时文件写二进制日志的次数
11、sync_binlog
概念:每经过n次日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)
说明:n=1是最安全的做法,但效率最低。默认设置是n=0,意思是由操作系统来负责二进制日志文件的同步工作。
12、thread_cache_size
概念:服务器线程缓存数目
说明:这个值表示可以重新利用保存在缓存中线程的数量,当断开 连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线 程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能
http://www.oschina.net/question/17_525