MyISAM和InnoDB引擎优化分析
服务器型号:IBM S226
CPU:四核至强
内存:4g
硬盘:两80g为RAID1
系统:Windows Server 2003 SP1 32位企业版
MySQL版本:5.5
根据自己服务器的实际情况,优化和参数如下:
1。公共选择
跳过外部锁,避免外部锁,减少错误概率,提高稳定性。
跳过名称解析/ MySQL外部连接来禁止DNS解析,使用此选项可以消除MySQL DNS解析时间。但重要的是要注意,如果您打开此选项,您必须为所有远程主机使用IP地址模式,否则MySQL将无法处理连接请求。
max_connections = 1024 / / MySQL指定允许的最大连接数的过程。如果有太多的连接错误提示经常出现访问论坛的时候,你需要增加参数值。
query_cache_size = 16m / / 0默认情况下不启用。指定MySQL查询缓冲区的大小。下面的命令可以通过执行以下MySQL控制台命令观察:
显示变量''%1 query_cache % > #;
显示状态like'qcache % > #;
#如果qcache_lowmem_prunes价值是非常大的,在不足的情况经常出现缓冲区;
如果qcache_hits价值是非常大的,它表明查询缓冲是非常频繁的。如果值很小,它会影响效率,所以我们可以考虑没有查询缓冲区。如果qcache_free_blocks非常大,这表明有缓冲区中的许多片段。
每个线程的sort_buffer_size = 6m /排序缓冲区大小的排序选项组中扮演了一个角色。注:分配的内存这个参数是每个连接专用!如果有100个连接,总排序缓冲区大小的实际配置是100 * 6 = 600mb。所以,一个记忆在4gb服务器,建议设置为6m。
record_buffer = 16m / /每一个顺序扫描线作为缓冲扫描每个表的大小分布,可以设置为大于2m
所有线程的table_cache = 512 / /打开的表的数量,增加这个值可以增加文件描述符需要由mysqld数。MySQL需要2个文件描述符为每只打开表。
二、MyISAM的选择
key_buffer_size = 256m / / key_buffer_size指定用于索引缓冲区的大小,将它添加到指标较好的加工性能。对于一个记忆在4gb服务器,该参数可以设置为256M或384m。
注意:参数值过大会降低服务器整体效率!
read_buffer_size = 4m / /读查询可以使用的缓冲区的大小。如sort_buffer_size,分配的内存这个参数也是每个连接专用!
myisam_sort_buffer_size = 64m /除以1600万默认的缓冲区,用于设置,恢复大小,和修改表不宜设置太多。
join_buffer_size = 8m /联合查询可以使用的缓冲区的大小,和sort_buffer_size,对应于每个连接的内存分配参数是独家的!
三、InnoDB选项
innodb_buffer_pool_size =的1G / InnoDB中的重要参数,MyISAM和key_buffer_size参数有相似之处,但也有区别。这个参数主要缓存InnoDB表的索引时,缓冲区的数据插入数据。设置越大,访问表中的数据所需的磁盘I/O量就越少。它通常是一半的内存,不超过2G,否则系统将崩溃。优化InnoDB加速度的主要参数,该参数对内存分配原则:此参数指定默认只有8M,可以说是一个很小的值,如果它是一个专用的数据库服务器,然后他可以占70% - 80%的内存。此参数不能动态改变的,所以配置需要考虑的。大的分配将使交换的太多,所以MySQL的查询是非常慢的。如果你的数据是比较小的,所以你的数据大小分布有关10%这个参数的值。
例如,数据的大小是50M,然后innodb_buffer_pool_size = 64M其实分配到这个值
innodb_additional_mem_pool_size = 16m / / InnoDB内部目录用于存储此值没有分配过大,系统可以自动调整。你不需要设定得太高了。一般来说,更大的数据集16M足够,如果表较多,可以适当增加,如果这个值自动增加,它将在错误日志显示。
innodb_log_file_size = 256m / /每个日志文件组中的日志中的大小一般是innodb_buffer_pool_size 25%,innodb_buffer_pool_size 40-50%的建议。在几个日志文件一般控制增加在2G的大小比较好。特别是,你需要看你的交易规模,数据的大小。描述:这种价值分配的大小是写入数据库的速度密切相关,该交易的规模,和恢复后的异常重启。
指定的innodb_log_files_in_group = 2 / /你有几个日志组。我们可以利用分配的一般原则:在值组。默认是两。
innodb_log_buffer_size = 3m /交易在内存缓冲区。分配原则:控制在2~8的价值。是不是太多了。他的记忆通常是写在第二盘。具体的写作风格是你的事务提交相关。在Oracle和其他数据库的理解,它是适当的3M指定最大的。
innodb_flush_logs_at_trx_commit = 0 / /控制事务提交的分配原则:这个参数只有3个值,0, 1, 2请确认自己可以接受的水平。默认值为1。请不要改变主图书馆。高性能可以设置为0或2,但一次交易损失。说明:这个参数的设置对InnoDB的性能有很大的影响,所以给出更多的解释,此值为1时:InnoDB的事务日志写入日价值的文件后,每个提交并刷新日值到磁盘。这可以在不丢失任何的交易。当该值为2,在每一个提交,日志缓冲区写入文件,而不是刷新磁盘操作的日志文件,并刷新2日志文件也发生每一秒。然而,值得注意的是,由于工艺要求的问题,它并不能保证100%的发生二。它是性能最快。但交易的最后一秒将如果操作系统崩溃或断电删除。此值为0时,日志缓冲区写入日志文件,每秒一次,和磁盘操作刷新,但没有行动,在一个事务提交的。mysqld崩溃过程消除了交易前的最后一秒钟崩溃。
从上面的分析中,当这个值不是1时,它可以达到更好的性能,但是如果遇到的话会有损失,所以需要根据自己的情况来衡量。