linux高负载下彻底优化mysql数据库 |
友情 揭示:同时在线 拜访量 接续增大 关于1G内存的服务器显而易见觉得到吃力严峻时甚至天天都会死机 或者时不时的服务器卡一下 这个问题曾经困扰了我半个多月MySQL 使用是很具伸缩性的算法, 因此你通常能用很少的内存运行或给MySQL更多的被存以得到更好的性能 。
安装好mysql后,配制文件应该在/usr/local/mysql/share/mysql目录中,配制文件有几个,有my-huge.cnf my-medium.cnf my-large.cnf my-small.cnf,不同的流量的网站和不同配制的服务器环境,固然需求有不同的配制文件了 。 普通的状况下,my-medium.cnf这个配制文件就能满足我们的大多需求;普通我们会把配置文件拷贝到/etc/my.cnf 惟独求 批改这个配置文件就 可以了, 使用mysqladmin variables extended-status –u root –p 可以看到当前的参数,有3个配置参数是最主要的,即key_buffer_size,query_cache_size,table_cache 。
key_buffer_size只对MyISAM表起作用,key_buffer_size指定索引缓冲区的大小,它决定索引 解决的速度,尤其是索引读的速度 。普通我们设为16M,实际上略微大丝毫的站点 这个数字是远远不够的,通过 审查状态值Key_read_requests和Key_reads, 可以晓得key_buffer_size设置是不是 正当 。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值 可以 使用SHOW STATUS LIKE ‘key_read%’ 获得) 。 或者假如你装了phpmyadmin 可以通过服务器运行状态看到,小编推举用phpmyadmin治理mysql,以下的状态值都是本人通过phpmyadmin 获得的实例 综合:
这个服务器已经运行了20天
另外一个估量key_buffer_size的 步骤 把你网站数据库的每个表的索引所占空间大小加起来看看以此服务器为例: 比较大的几个表索引加起来大约125M 这个数字会随着表变大而变大 。
从4.0.1开始,MySQL提供了 查问缓冲机制 。 使用 查问缓冲,MySQL将SELECT语句和 查问 后果 存放在缓冲区中,今后关于同样的SELECT语句( 划分大小写),将直接从缓冲区中读取 后果 。依据MySQL消费者手册, 使用 查问缓冲最多 可以达到238%的效率 。
通过调节以下几个参数 可以晓得query_cache_size设置得是不是 正当
Qcache_lowmem_prunes的值十分大,则表明 时常浮现缓冲不够的状况,同时Qcache_hits的值十分大,则表明 查问缓冲 使用十分频繁,此时需求增加缓冲大小Qcache_hits的值不大,则表明你的 查问 反复率很低,这种状况下 使用 查问缓冲反而会影响效率,那么 可以考量不用 查问缓冲 。此外,在SELECT语句中加入SQL_NO_CACHE 可以明确 示意不 使用 查问缓冲 。
我设置:
得到如下状态值:
table_cache指定表高速缓存的大小 。每当MySQL 拜访一个表时,假如在表缓冲区中还有空间,该表就被 打开并放入其中,这样 可以更快地 拜访表内容 。通过 审查峰值 工夫的状态值Open_tables和Opened_tables, 可以决定是不是需求增加table_cache的值 。假如你发现open_tables等于table_cache,而且opened_tables在不停增进,那么你就需求增加table_cache的值了(上述状态值 可以 使用SHOW STATUS LIKE ‘Open%tables’ 获得) 。 留神,不能盲目地把table_cache设置成很大的值 。假如设置得太高,可能会造成文件 形容符缺乏,从而造成性能不 巩固或者衔接失败 。 关于有1G内存的机器,推举值是128-256 。 小编设置
得到以下状态:
假如你不需求记录2进制log 就把这个 性能关掉, 留神关掉以后就不能 复原出问题前的数据了,需求您手动备份,二进制日志包括所有更新数据的语句,其 目标是在 复原数据库时用它来把数据尽可能 复原到最终的状态 。另外,假如做同步复制( Replication )的话,也需求 使用二进制日志 传递 批改状况 。
log_bin指定日志文件,假如不提供文件名,MySQL将自己产生缺省文件名 。MySQL会在文件名后面自动增加数字引,每次启动服务时,都会再一次生成一个新的二进制文件 。此外, 使用log-bin-index 可以指定索引文件; 使用binlog-do-db 可以指定记录的数据库; 使用binlog-ignore-db 可以指定不记录的数据库 。 留神的是:binlog-do-db和binlog-ignore-db一次只指定一个数据库,指定多个数据库需求多个语句 。而且,MySQL会将所有的数据库名称改成小写,在指定数据库时必须所有 使用小写名字,不然不会起作用 。
关掉这个 性能 惟独求在他前面外加#号
开启慢 查问日志( slow query log )
慢 查问日志关于跟踪有问题的 查问十分有用 。它记录所有查过long_query_time的 查问,假如需求,还 可以记录不 使用索引的记录 。下面是一个慢 查问日志的例子:
开启慢 查问日志,需求设置参数log_slow_queries、long_query_times、log-queries-not-using-indexes 。 log_slow_queries指定日志文件,假如不提供文件名,MySQL将自己产生缺省文件名 。long_query_times指定慢 查问的阈值,缺省是10秒 。log-queries-not-using-indexes是4.1.0以后引入的参数,它 批示记录不 使用索引的 查问 。小编设置long_query_time=10
小编设置:
sort_buffer_size = 1M
参数 注明:
back_log
thread_cache
thread_concurrency
skip-innodb
|