您现在的位置: 首页  > MySQL > 性能与优化
通行证登录
 

Mysql主要配置参数4:其他参数

作者:[51ak ]

Mysql主要参数
在优化MySQL时,有两个配置参数是最重要的,即table_cache和key_buffer_size。而具体到应用环境还有个查询参数query_cache_size直接影响查询性能。下面主要是整理的关于下面三个参数的文章
1.table_cache 表缓存
2.key_buffer_size 键缓冲
3.query_cache_size查询缓存
4.其他参数
5.参考文章

首先,在了解这些参数设置前需要明确的概念是
• 什么是mysql/l_13_1.htm" title="MYSQL" >MYSQL的缓存:在内存中预留的块
• 访问内存中的数据快于访问磁盘上的数据。
• 把数据保存在内存中更重要的是可以减少磁盘IO操作。
• 当数据变化(update insert delete...)时对应的缓存就失效
• 内存是有限的


4.其他参数
skip-name-resolve  # 禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间 。
# 但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!
skip-locking # 避免MySQL的外部锁定,减少出错几率增强稳定性
back_log = 200 # back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。
max_connections = 768 # 指定MySQL允许的最大连接进程数。如果在访问论坛时经常出现Too Many Connections的错误提 示,则需要增大该参数值。
sort_buffer_size = 4M # 查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB。
所以,对于内存在4GB左右的服务器推荐设置为6-8M。
read_buffer_size = 4M # 读查询所能使用的缓冲区大小。该参数对应的分配内存也是每连接独享! 如果有100个连接,那么实际分配的总共读取缓冲区大小为100 × 4 = 400MB。
join_buffer_size = 8M # 联合查询所能使用的缓冲区大小,该参数对应的分配内存也是每连接独享!如果有100个连接,那么实际分配的总共联合查询缓冲区大小为100 × 8 = 800MB。
thread_concurrency = 8 # 该参数取值为服务器逻辑CPU数量×2
wait_timeout = 10 # 指定一个请求的最大连接时间,对于4GB左右内存的服务器可以设置为5-10
back_log = 384 指定MySQL可能的连接数量。当MySQL主线程在很短的时间内接收到非常多的连接请求,该参数生效,主线程花费很短的时间检查连接并且启动一个新线程。
back_log 参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。如果系统在一个短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的侦听队列的大小。不同的操作系统在这个队列大小上有它自己的限制。
试图设定back_log高于你的操作系统的限制将是无效的。默认值为50。对于Linux系统推荐设置为小于512的整数。
thread_cache_size = 64 入站连接会在MySQL中创建一个新的线程,因为MySQL中打开和关闭连接都很廉价,速度也快,它就没有象其它数据库,如Oracle那么多持续连接了,但线程预先创建并不会节约时间,这就是为什么要MySQL线程缓存的原因了。
A:网上有人说:1G —> 8  2G —> 16 3G —> 32 >3G —> 64
B:如果是短连接,适当设置大一点,因为短连接往往需要不停创建,不停销毁,如果大一点,连接线程都处于取用状态,不需要重新创建和销毁,所以对性能肯定是比较大的提升。对于长连接,不能保证连接的稳定性,所以设置这参数还是有一定必要,可能连接池的问题,会导致连接数据库的不稳定性,也会出现频繁的创建和销毁,但这个情况比较少,如果是长连接,可以设置成小一点,一般在50-100左右。关键还是要根据实际情况来确定。
如果在增长请密切注意创建的线程,让你的线程缓存更大,对于2550或100的thread_cache_size,内存占用也不多