2010-11-09 112 views
8

我正在使用MySQLTuner.pl来优化我的网站....虽然我不完全确定如何解决这些问题中的一些,并且想知道是否有人可以帮助我。查询缓存效率

我跑的RAM与16GB以下MySQL的设置:

key_buffer    = 1024M 
max_allowed_packet  = 16M 
thread_stack   = 192K 
thread_cache_size  = 8 

myisam-recover   = BACKUP 
max_connections  = 1500 
table_cache   = 256 
thread_concurrency  = 4 

query_cache_limit  = 2M 
query_cache_size  = 32M 
query_cache_type  = 1 

tmp_table_size   = 512M 
max_heap_table_size  = 128M 
join_buffer_size  = 128M 
myisam_sort_buffer_size = 512M 

这里是我的调谐器的输出

-------- General Statistics -------------------------------------------------- 
[--] Skipped version check for MySQLTuner script 
[OK] Currently running supported MySQL version 5.1.41-3ubuntu12.6-log 
[OK] Operating on 64-bit architecture 

-------- Storage Engine Statistics ------------------------------------------- 
[--] Status: -Archive -BDB -Federated +InnoDB -ISAM -NDBCluster 
[--] Data in MyISAM tables: 98M (Tables: 402) 
[--] Data in InnoDB tables: 16K (Tables: 1) 
[!!] Total fragmented tables: 17 

-------- Performance Metrics ------------------------------------------------- 
[--] Up for: 10s (1K q [132.400 qps], 443 conn, TX: 119K, RX: 82K) 
[--] Reads/Writes: 100%/0% 
[--] Total buffers: 1.2G global + 130.6M per thread (1500 max threads) 
[!!] Maximum possible memory usage: 192.4G (1225% of installed RAM) 
[OK] Slow queries: 0% (0/1K) 
[OK] Highest usage of available connections: 0% (2/1500) 
[OK] Key buffer size/total MyISAM indexes: 1.0G/72.5M 
[!!] Key buffer hit rate: 72.3% (47 cached/13 reads) 
[!!] Query cache efficiency: 0.0% (0 cached/875 selects) 
[OK] Query cache prunes per day: 0 
[OK] Sorts requiring temporary tables: 0% (0 temp sorts/2 sorts) 
[OK] Temporary tables created on disk: 23% (48 on disk/201 total) 
[OK] Thread cache hit rate: 99% (2 created/443 connections) 
[!!] Table cache hit rate: 4% (128 open/2K opened) 
[OK] Open file limit used: 3% (257/7K) 
[OK] Table locks acquired immediately: 100% (449 immediate/449 locks) 
[OK] InnoDB data size/buffer pool: 16.0K/8.0M 

-------- Recommendations ----------------------------------------------------- 
General recommendations: 
    Run OPTIMIZE TABLE to defragment tables for better performance 
    MySQL started within last 24 hours - recommendations may be inaccurate 
    Reduce your overall MySQL memory footprint for system stability 
    Increase table_cache gradually to avoid file descriptor limits 
Variables to adjust: 
    *** MySQL's maximum memory usage is dangerously high *** 
    *** Add RAM before increasing MySQL buffer variables *** 
    query_cache_limit (> 2M, or use smaller result sets) 
    table_cache (> 128) 

当我减少query_cache_limittable_cache它不会出现有任何效果。我在过去的24小时内重启了MySQL,这可能是问题的一部分。

更新

运行SHOW STATUS LIKE '%cache%'后输出

Variable_name Value 
Binlog_cache_disk_use 0 
Binlog_cache_use 0 
Com_assign_to_keycache 0 
Qcache_free_blocks 436 
Qcache_free_memory 23551488 
Qcache_hits 72553 
Qcache_inserts 26954 
Qcache_lowmem_prunes 0 
Qcache_not_cached 7164 
Qcache_queries_in_cache 5877 
Qcache_total_blocks 12347 
Ssl_callback_cache_hits 0 
Ssl_session_cache_hits 0 
Ssl_session_cache_misses 0 
Ssl_session_cache_mode NONE 
Ssl_session_cache_overflows 0 
Ssl_session_cache_size 0 
Ssl_session_cache_timeouts 0 
Ssl_used_session_cache_entries 0 
Threads_cached 3 
+1

“效应”表示MySQLTuner的性能更好或警告更少? – AndreKR 2010-11-10 00:01:18

+0

更好的表现。我预计12月初会有一个巨大的服务器负载,并且需要每一点性能 – Webnet 2010-11-10 00:06:02

+1

这个警告只意味着当您的服务器使用您允许它使用的所有RAM时,您的服务器没有足够的RAM(因此会交换) 。因此,减少查询缓存大小可能会使警告消失,但不会直接提高性能。无论如何,似乎你的查询缓存完全没有使用,所以你应该检查为什么会这样。 (但是,查询缓存比索引缓存重要得多。) – AndreKR 2010-11-10 00:35:17

回答

3

我发现这个网站有帮助在我自己的MySQL服务器优化:http://www.omh.cc/mycnf/

它可以让你调节变量,知道总ram容量将是多少。您需要优化60%的RAM使用率。因此,尽量将总内存占用量降低到总内存的60%到70%左右。如果你有其他的东西在同一台机器上运行,你可能需要减少这个数字。忘记Query cache,它不会增加太多的价值,但如果做得对,Table cache应该会提高你的表现。

尝试减少连接数并将总内存占用量降至总系统内存的60%以下。