我们有一台 Windows 2003 企业版服务器(64 位),仅运行 MySQL 5.1.45 64 位。它有 16G RAM 和 10T 硬盘空间(RAID 10)。mysqld 的性能非常糟糕(CPU 利用率为 85-100%)。我们运行的是一台性能更好的小型机器,因此我认为我们的 my.ini 文件不适合我们当前的机器。my.ini 文件如下:
[client]
port=3306
[mysql]
default-character-set=latin1
[mysqld]
port=3306
basedir="D:/MySQL/"
datadir="D:/MySQL/data"
default-character-set=latin1
default-storage-engine=MYISAM
sql-mode=""
skip-innodb
skip-locking
max_allowed_packet = 1M
max_connections=800
myisam_max_sort_file_size=5G
myisam_sort_buffer_size=500M
table_open_cache = 512
table_cache=8000
tmp_table_size=30M
query_cache_size=50M
thread_cache_size=128
key_buffer_size=3072M
read_buffer_size=2M
read_rnd_buffer_size=16M
sort_buffer_size=2M
#replication settings (this is the master)
log-bin=log
server-id = 1
有人发现这个设置有什么问题吗?对于具有这么多 RAM 的机器,mysqld 为何会占用这么多 CPU?我知道我们可以优化一些查询等,但它在较小的机器上运行良好,所以我很确定这是配置问题。
在此先感谢您的帮助。
答案1
您使用的是 innodb 还是 myisam 表?如果您使用的是 InnoDB,则应设置 InnoDB 缓冲池大小。这将有助于在 RAM 中缓存常见查询。正如 Exception 所建议的,考虑到您有 16GB 的 RAM,您应该尝试将 MySQL 设置为使用 10-14GB 的 RAM 来缓存常见结果集和查询。
MySQL 性能博客 — 更多信息:http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/
答案2
您应该增加 read_buffer_size 和 sort_buffer_size。对于具有 16GB RAM 的机器,没有理由将它们设置为可怜的 2MB 大小。