Mysqltuner对my.cnf的建议和修改

mar*_*dge 13 mysql wordpress performance

在Serverfault上有这个问题几天没有运气.

我在VPS上运行了mysqltuner.pl,对于要更改的变量的建议有很多问题.我确信这些都是复杂答案的一般性问题.

我不知道如何编写查询并对服务器进行测试,但我只是试图从服务器中获得更多性能,该服务器运行五个WordPress站点,每月页面查看次数超过200,000次.

我已经通过phpmyadmin优化了数据库(并定期这样做),但调谐器仍然说有碎片表.因为这是WordPress,我无法在核心代码中更改查询.

但是我应该增加多少变量,如query_cache_size和innodb_buffer_pool_size?其他innodb变量怎么样?

my.cnf中不存在一些建议的变量,如table_cache,并在调谐器报告等中标记.我可以将它们添加到my.cnf吗?

(为什么这个块在my.cnf中重复?我可以删除副本吗?)

set-variable = innodb_buffer_pool_size=2M
set-variable = innodb_additional_mem_pool_size=500K
set-variable = innodb_log_buffer_size=500K
set-variable = innodb_thread_concurrency=2
Run Code Online (Sandbox Code Playgroud)

下面是my.cnf和mysqltuner的输出:

my.cnf的内容:

query-cache-type = 1
query-cache-size = 8M

set-variable=local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql

old_passwords=1

skip-bdb

set-variable = innodb_buffer_pool_size=2M
set-variable = innodb_additional_mem_pool_size=500K
set-variable = innodb_log_buffer_size=500K
set-variable = innodb_thread_concurrency=2

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
skip-bdb

set-variable = innodb_buffer_pool_size=2M
set-variable = innodb_additional_mem_pool_size=500K
set-variable = innodb_log_buffer_size=500K
set-variable = innodb_thread_concurrency=2
Run Code Online (Sandbox Code Playgroud)

mysqltuner的输出:

------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.0.45
[!!] Switch to 64-bit OS - MySQL cannot currently use all of your RAM

-------- Storage Engine Statistics -------------------------------------------
[--] Status: -Archive -BDB -Federated +InnoDB -ISAM -NDBCluster 
[--] Data in MyISAM tables: 133M (Tables: 637)
[--] Data in InnoDB tables: 10M (Tables: 344)
[--] Data in MEMORY tables: 126K (Tables: 2)
[!!] Total fragmented tables: 69

-------- Security Recommendations  -------------------------------------------
[OK] All database users have passwords assigned

-------- Performance Metrics -------------------------------------------------
[--] Up for: 1d 6h 24m 13s (2M q [22.135 qps], 116K conn, TX: 4B, RX: 530M)
[--] Reads / Writes: 97% / 3%
[--] Total buffers: 35.0M global + 2.7M per thread (100 max threads)
[OK] Maximum possible memory usage: 303.7M (8% of installed RAM)
[OK] Slow queries: 0% (4/2M)
[OK] Highest usage of available connections: 53% (53/100)
[OK] Key buffer size / total MyISAM indexes: 8.0M/46.1M
[OK] Key buffer hit rate: 99.6% (749M cached / 2M reads)
[OK] Query cache efficiency: 32.2% (685K cached / 2M selects)
[!!] Query cache prunes per day: 948863
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 660K sorts)
[!!] Temporary tables created on disk: 46% (400K on disk / 869K total)
[!!] Thread cache is disabled
[!!] Table cache hit rate: 0% (64 open / 24K opened)
[OK] Open file limit used: 10% (109/1K)
[OK] Table locks acquired immediately: 99% (2M immediate / 2M locks)
[!!] InnoDB data size / buffer pool: 10.6M/2.0M

-------- Recommendations -----------------------------------------------------
General recommendations:
    Run OPTIMIZE TABLE to defragment tables for better performance
    Enable the slow query log to troubleshoot bad queries
    When making adjustments, make tmp_table_size/max_heap_table_size equal
    Reduce your SELECT DISTINCT queries without LIMIT clauses
    Set thread_cache_size to 4 as a starting value
    Increase table_cache gradually to avoid file descriptor limits
Variables to adjust:
    query_cache_size (> 8M)
    tmp_table_size (> 32M)
    max_heap_table_size (> 16M)
    thread_cache_size (start at 4)
    table_cache (> 64)
    innodb_buffer_pool_size (>= 10M)
Run Code Online (Sandbox Code Playgroud)

Tim*_*ain 21

我会尽力帮助你.MysqlTuner报告暗示您在此VPS中有4GB的RAM,因此我的建议基于此.

query_cache_size - 这是MySQL可用于缓存数据库查询结果的RAM量.存储在查询缓存中的结果比正常选择返回的速度快得多,因此该变量可以显着加快速度(比任何其他建议的更改更快).

究竟正确的值是什么,你需要做一些实验.您目前将此设置为8M.如果你在这个盒子里有4GB的RAM,我将从64M开始,增加到128M,然后根据需要增加到256M.每次更改后,将事物保留几天,然后再次运行MysqlTuner,并将"查询缓存效率"的百分比与之前的百分比进行比较.对于主要托管5个Wordpress博客的服务器,我怀疑你会看到超过256M的任何改进,我不建议超过总RAM的八分之一.

我个人认为Munin(一个免费的服务器监控工具)非常方便用于关注这类事情,因为它会绘制缓存命中与其他查询的关系图.

tmp_table_size - 对于一些复杂的查询(特别是那些使用GROUP BY或复杂排序的查询),MySQL需要首先创建一个包含数据的临时表,然后对其运行一些操作以创建结果集.它将尝试在内存中创建这些临时表,因为这比在磁盘上创建它们要快得多; 但对于大型结果集,这并不总是可行的.tmp_table_size控制此阈值.

我无法想象Wordpress正在进行任何非常复杂的查询,所以我不会过分使用这个查询.MysqlTuner建议值大于32MB,因此从64M开始,看看这会影响几天后"在磁盘上创建的临时表"值.正如它建议的那样设置max_heap_table_size.

thread_cache_size - 默认情况下,Wordpress不使用持久连接(这很好),因此每个请求都会与数据库建立新连接,然后在生成页面后关闭它.这种开销并不重要,但使用thread_cache_size允许MySQL重用这些连接线程,这将有所帮助.

我会使用建议的值4,除非你得到大量并发用户,否则我认为这样会很好.

table_cache - 我对这个有点朦胧,它似乎与MySQL的表结构缓存有关.为此,我会选择128.

innodb_buffer_pool_size - 这是MySQL可用于缓存InnoDB表的索引和数据的内存量.这个让我感到困惑,因为我认为Wordpress根本不使用InnoDB - 你在这台服务器上还有其他网站吗?

为了回答您的其他问题,配置[mysqld_safe]仅在安全模式下应用于MySQL守护程序,而不是整体应用于MySQL,这就是为什么某些变量重复的原因.如果您确实更改了innodb_buffer_pool_size,则需要更改第一个.您可以添加的文件中没有变量,是的,但是出于同样的原因将它们添加到[mysqld_safe]块上方.

最后,既然您有优化的心情,如果您还没有使用像APC这样的PHP字节码缓存,那么这值得探讨.APC可以对PHP应用程序进行一些显着的速度改进而不会产生任何负面影响