WEB开发网
开发学院数据库MySQL LAMP系统性能调优之MySQL服务器调优 阅读

LAMP系统性能调优之MySQL服务器调优

 2010-08-23 15:58:28 来源:WEB开发网   
核心提示:对查询进行缓存很多 LAMP应用程序都严重依赖于数据库,但却会反复执行相同的查询,LAMP系统性能调优之MySQL服务器调优(2),每次执行查询时,数据库都必须要执行相同的工作 ——对查询进行分析,作为一条规则,如果 FLUSH QUERY CACHE 占用了很长时间,确定如何执行查询,从磁盘中

对查询进行缓存

很多 LAMP应用程序都严重依赖于数据库,但却会反复执行相同的查询。每次执行查询时,数据库都必须要执行相同的工作 ——对查询进行分析,确定如何执行查询,从磁盘中加载信息,然后将结果返回给客户机。MySQL 有一个特性称为查询缓存,它将(后面会用到的)查询结果保存在内存中。在很多情况下,这会极大地提高性能。不过,问题是查询缓存在默认情况下是禁用的。

将query_cache_size = 32M 添加到 /etc/my.conf 中可以启用32MB的查询缓存。

监视查询缓存

在启用查询缓存之后,重要的是要理解它是否得到了有效的使用。MySQL 有几个可以查看的变量,可以用来了解缓存中的情况。清单 2 给出了缓存的状态。

清单 2. 显示查询缓存的统计信息mysql> SHOW STATUS LIKE 'qcache%';
+-------------------------+------------+
| Variable_name      | Value   |
+-------------------------+------------+
| Qcache_free_blocks   | 5216    |
| Qcache_free_memory   | 14640664  |
| Qcache_hits       | 2581646882 |
| Qcache_inserts     | 360210964 |
| Qcache_lowmem_prunes  | 281680433 |
| Qcache_not_cached    | 79740667  |
| Qcache_queries_in_cache | 16927   |
| Qcache_total_blocks   | 47042   |
+-------------------------+------------+
8 rows in set (0.00 sec)

这些项的解释如表 1 所示。

表 1. MySQL 查询缓存变量

变量名 说明
Qcache_free_blocks 缓存中相邻内存块的个数。数目大说明可能有碎片。FLUSH QUERY CACHE 会对缓存中的碎片进行整理,从而得到一个空闲块。
Qcache_free_memory 缓存中的空闲内存。
Qcache_hits 每次查询在缓存中命中时就增大。
Qcache_inserts 每次插入一个查询时就增大。命中次数除以插入次数就是不中比率;用1 减去这个值就是命中率。在上面这个例子中,大约有87%的查询都在缓存中命中。
Qcache_lowmem_prunes 缓存出现内存不足并且必须要进行清理以便为更多查询提供空间的次数。这个数字最好长时间来看;如果这个数字在不断增长,就表示可能碎片非常严重,或者内存很少。(上面的free_blocks 和 free_memory可以告诉您属于哪种情况)。
Qcache_not_cached 不适合进行缓存的查询的数量,通常是由于这些查询不是SELECT 语句。
Qcache_queries_in_cache 当前缓存的查询(和响应)的数量。
Qcache_total_blocks 缓存中块的数量。

通常,间隔几秒显示这些变量就可以看出区别,这可以帮助确定缓存是否正在有效地使用。运行FLUSH STATUS可以重置一些计数器,如果服务器已经运行了一段时间,这会非常有帮助。

使用非常大的查询缓存,期望可以缓存所有东西,这种想法非常诱人。由于 mysqld 必须要对缓存进行维护,例如当内存变得很低时执行剪除,因此服务器可能会在试图管理缓存时而陷入困境。作为一条规则,如果 FLUSH QUERY CACHE 占用了很长时间,那就说明缓存太大了。

上一页  1 2 3 4 5  下一页

Tags:LAMP 性能

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接