近几天一直在学习MYSQL性能优化,运行MYSQL的服务器有4G内存.
项目才运行,所以人数不断增加,发现MYSQL的cpu很高,通过更改my.ini下的:max_connections,query_cache_size等等值后,cpu使用降下来了.但是总觉得不是最佳解决方法.
今天无意间打开my-huge.ini,my-large.ini.. 仔细看了哈,大喜,还找什么优化方案吗,直接把my-huge.ini更名为my.ini就行了啥..
但是问题来了,经过对比,比如在原my.ini下的max_connections,query_cache_size等很多设置在my-huge.ini下没有....
所以说如果直接把my-huge.ini更名为my.ini会不会有问题?比如会不会又导致cpu升高,由于项目已经在运行了,所以不能随便改了测试.
所以请有经验的指导哈啊? 我用的是:MySQL Server 5.1
[b]问题补充:[/b]
我只是举例说max_connections,query_cache_size这两个在my-huge.ini没有,实际情况是:basedir,datadir,default-character-set....这些在my-huge.ini都没有,网上查了哈,估计是因为我用的是安装版本的原因.所以我没有直接把my-huge.ini复制改为my.ini,而是根据my-huge.ini里的建议把原my.ini里一些参数改大..
不知道各位有这方面经验的怎么看待?
连接数不是越多越好,QUERY_cache_size也不是越大越好。
每个连接都会有内存消耗,你要确保MYSQL的内存不会因为过多的连接数而爆掉,否则只会降低性能。总的内存需求公式是:global buffer + connections* buffer per connection.
global buffer包括:key_buffer_size & innodb_buffer_size
buffer per connection:一般按照4M计算(最差情况),包括:read_buffer, sort_buffer, thread stack,等等。
query_cache如果过大,会导致MYSQL在做INVALIDATION的时候变慢,而且如果你是一个WRITE HEAVY的应用,反而应该禁止掉QUERY_CACHE,因为每次数据的变更,都会是使得该表在QUERY CACHE中保存的所有对应结果集被INVALIDATION,这是MYSQL QUERY CACHE INVALIDATION的算法,从而增大了系统的毫无必要的负载。
总的来说,IO是数据库的瓶颈,我们能够越少的访问IO,性能就越好,因此分配给MYSQL的内存越多越好,一般现在都是用innodb,所以应该加大innodb的buffer_pool和log_buffer的容量。
好像缺省配置中key_buffer_size的设置都很大,如果不用MYISAM,应该将它降低到50M就够了,以节省内存。
应该没有问题。如果max_connections,query_cache_size需要设置,直接加在my-huge.ini,my-large.ini里面即可!
[quote]我只是举例说max_connections,query_cache_size这两个在my-huge.ini没有,实际情况是:basedir,datadir,default-character-set....这些在my-huge.ini都没有,网上查了哈,估计是因为我用的是安装版本的原因.所以我没有直接把my-huge.ini复制改为my.ini,而是根据my-huge.ini里的建议把原my.ini里一些参数改大..
不知道各位有这方面经验的怎么看待? [/quote]
这是稳妥的办法!MySQL启动是可以指定ini文件的,缺省是mysql.ini.