app教程网 学习教程 mysql优化总结(mysql数据库优化经验详谈怎么写)

mysql优化总结(mysql数据库优化经验详谈怎么写)

与此同时,在线流量持续增加。对于1G内存的服务器来说,很明显甚至每天硬的时候都会死机,或者服务器时不时卡死。这个问题困扰了我半个多月。MySQL是一个非常可扩展的算法。

因此,通常可以用很少的内存运行,或者保存更多的MySQL以获得更好的性能。

安装mysql后,配置文件应该在/usr/local/mysql/share/mysql目录下,有几个配置文件。

还有my-huge . cnfmy-medium . cnfmy-large . cnfmy-small . CNF,不同流量的网站,不同配置的服务器环境,当然需要不同的配置文件。

使用MySQL管理变量extended-statusu rootp查看当前参数,有三个最重要的配置参数,即:

The key buffer size only works on the Measham table.

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天。

比例接近1:8000,身体很好。

另一种估算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可以清楚地表明没有使用查询缓冲。

Qcache_free_blocks,如果这个值很大,说明缓冲区有很多碎片。query_cache_type指定是否使用查询缓冲区。

我设定:

获得以下状态值:

如果内存允许32M,应该会增加。

Table_cache指定表缓存的大小。每当MySQL访问表时,如果表缓冲区中还有空间,就打开表并放入其中,以便更快地访问表的内容。

通过检查Open_tables和Opened_tables在高峰时间的状态值,可以决定是否增加table_cache的值。如果发现open_tables等于table_cache,

并且Open _ tables在增加,那么就需要增加table_cache的值(上面的状态值可以通过使用SHOW STATUS LIKE 'Open%tables ' ')来获得)。注意,

不能盲目的将table_cache设置为较大的值。如果设置得太高,可能会没有足够的文件描述符,从而导致性能不稳定或连接失败。

对于1G内存的机器,推荐值为128-256。

我设置table_cache=256。

获得以下状态:

虽然open_tables等于table_cache,但是已经运行了20天,open _ tables的值很低。所以增加table_cache的值应该用处不大。

如果运行6小时后出现以上数值,就应该考虑增加table_cache。

如果您不需要记录二进制日志,请关闭此功能。注意,关闭后,不能恢复问题前的数据。您需要手动备份。二进制日志包含所有更新数据的语句,其目的是在还原数据库时,用它将数据尽可能还原到最终状态。

此外,如果进行同步复制,还需要使用二进制日志来传输更改。

Log_bin指定日志文件。如果没有提供文件名,MySQL将自己生成默认文件名。MySQL会自动在文件名后面加一个数字引号,每次启动服务都会重新生成一个新的二进制文件。

另外,log-bin-index可以用来指定索引文件;Binlog-do-db可用于指定记录的数据库;使用binlog-ignore-db指定一个不会被记录的数据库。

注意,binlog-do-db和binlog-ignore-db一次只指定一个数据库,指定多个数据库需要多个语句。而且MySQL会把所有的数据库名都改成小写,指定数据库时必须使用所有的小写名。

不然不行。

要关闭这个功能,只要在他前面加一个#号就可以了。

#log-bin

打开慢速查询日志。慢速查询日志对于跟踪有问题的查询非常有用。它记录所有搜索了long_query_time的查询,必要时还可以记录不使用索引的记录。

以下是慢速查询日志的示例:

开启慢查询日志,需要设置参数log_slow_queries、long_query_times、log-queries-not-using-indexes。

Log _ slow _ queries指定日志文件。如果没有提供文件名,MySQL将自己生成默认文件名。

Long_query_times指定。

本文来自网络,不代表本站立场,转载请注明出处:https: