-1

我正在使用 MySQLTuner.pl 来优化我的站点/服务器....虽然我不完全确定如何解决其中一些问题,并且想知道是否有人可以帮助我。

我有 4GB 内存的 VPS,这是 my.cnf 设置:

[mysqld]    
expire_logs_days=14
sync_binlog=1

query_cache_limit=32M
query_cache_size=128M

slow_query_log=1
log_queries_not_using_indexes=0

thread_cache_size=50

max_allowed_packet=16M
max_connect_errors=1000000
max_connections=250
key_buffer_size=8M

open_files_limit=65535
tmp_table_size=256M
max_heap_table_size=256M
table_definition_cache=2048
table_open_cache=2048
default_storage_engine=InnoDB

innodb_flush_method=O_DIRECT
innodb_file_per_table=1
innodb_log_files_in_group=2
innodb_additional_mem_pool_size=40M
innodb_max_dirty_pages_pct=90
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=64M
innodb_log_file_size=256M
innodb_buffer_pool_size=1152M

这是mysqltuner的输出:

-------- Performance Metrics -------------------------------------------------
[--] Up for: 2d 8h 36m 40s (7M q [34.897 qps], 504K conn, TX: 41B, RX: 735M)
[--] Reads / Writes: 68% / 32%
[--] Total buffers: 2.0G global + 2.8M per thread (200 max threads)
[OK] Maximum possible memory usage: 2.5G (63% of installed RAM)
[OK] Slow queries: 0% (30K/7M)
[OK] Highest usage of available connections: 20% (40/200)
[OK] Key buffer size / total MyISAM indexes: 8.0M/7.8M
[OK] Key buffer hit rate: 99.9% (1M cached / 1K reads)
[OK] Query cache efficiency: 29.3% (1M cached / 4M selects)
[!!] Query cache prunes per day: 11573
[OK] Sorts requiring temporary tables: 0% (3K temp sorts / 999K sorts)
[!!] Temporary tables created on disk: 48% (54K on disk / 112K total)
[OK] Thread cache hit rate: 99% (40 created / 504K connections)
[OK] Table cache hit rate: 33% (499 open / 1K opened)
[OK] Open file limit used: 0% (380/65K)
[OK] Table locks acquired immediately: 99% (4M immediate / 4M locks)
[OK] InnoDB buffer pool / data size: 1.1G/1001.0M
[OK] InnoDB log waits: 0
-------- Recommendations -----------------------------------------------------
General recommendations:
    Run OPTIMIZE TABLE to defragment tables for better performance
    Increasing the query_cache size over 128M may reduce performance
    Temporary table size is already large - reduce result set size
    Reduce your SELECT DISTINCT queries without LIMIT clauses
Variables to adjust:
    query_cache_size (> 512M) [see warning above]
  1. 有什么我还可以改进以获得更好的性能吗?

  2. 如何解决这个问题:

在磁盘上创建的临时表:48%

每天查询缓存修剪:11573

查询缓存效率:29.3%

更新:

如果您能对 my.cnf 中的设置发表意见,我会很高兴(因为我不是专家,并且该设置是我在互联网上其他系统中看到的,可能有些不正确)

谢谢

4

1 回答 1

4

在优化方面,我相信“如果没有损坏就不要修复”。这说这是一篇关于磁盘上临时表的优秀帖子

https://dba.stackexchange.com/questions/17677/why-is-mysql-is-creating-so-many-temporary-tables-on-disk

如果您不确定如何处理这些设置,那么这是一个巨大的标志,上面写着“请勿触摸”。也许你应该稍微改变你的问题,告诉大家你为什么要优化数据库。是因为某些东西运行得非常慢吗?是不是因为数据库占用了服务器太多的资源?没有特定目标的优化是非常危险的,优化意味着以最适合您使用方式的方式调整系统,这意味着很多时候您在不需要的其他领域交易性能,这在您的情况下,我们不知道您不需要什么。

于 2014-06-11T07:43:23.173 回答