1

我有一个 Xeon 2.0Ghz 服务器(12 核),内存为 16GB,运行 Apache 和 mySQL,用于在 InnoDB(Percona)中有大约 50,000 条记录的网站。我的查询过去大约在 0.17 到 0.25 秒内返回,然后我运行 Percona 工具 mySQL 优化器,上传新的 my.cnf 文件,突然相同的查询需要 1.20 到 1.30 秒,所以大约长了 5 倍。

我做错了什么?这是我的新旧 my.cnf 文件”

新的:

[mysqld]
default_storage_engine         = InnoDB

key_buffer_size                = 32M
myisam_recover                 = FORCE,BACKUP

max_allowed_packet             = 16M
max_connect_errors             = 1000000

log_bin                        = /var/lib/mysql/mysql-bin
expire_logs_days               = 14
sync_binlog                    = 1

tmp_table_size                 = 32M
max_heap_table_size            = 32M
query_cache_type               = 0
query_cache_size               = 0
max_connections                = 200
thread_cache_size              = 50
open_files_limit               = 65535
table_definition_cache         = 1024
table_open_cache               = 2048

innodb_flush_method            = O_DIRECT
innodb_log_files_in_group      = 2
innodb_log_file_size           = 256M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table          = 1
innodb_buffer_pool_size        = 12G

log_error                      = /var/lib/mysql/mysql-error.log
log_queries_not_using_indexes  = 1
slow_query_log                 = 1
slow_query_log_file            = /var/lib/mysql/mysql-slow.log

老的:

[mysqld]
innodb_buffer_pool_size = 12000M
innodb_log_file_size = 256M
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M
innodb_additional_mem_pool_size = 20M
innodb_thread_concurrency = 20

read_rnd_buffer_size=50M
query_cache_size=128M
query_cache_type=1
tmp_table_size=512M
wait_timeout=90
query_cache_limit=64M
key_buffer_size=128M
max_heap_table_size=512M
max_allowed_packet=32M
log_slow_queries
log-queries-not-using-indexes
long_query_time  = 1 
4

1 回答 1

0

跑步一段时间后你会换吗?

您可能会尝试拒绝,innodb_buffer_pool_size 因为您说服务器也在运行 Apache。目前,MySQL 似乎有可能为自己耗尽所有服务器内存,而没有为操作系统和 Apache 留下任何东西。

尝试设置innodb_buffer_pool_size8G,然后设置innodb_log_file_size2G

你也可以升级你innodb_thread_concurrency的,但由于它不是一个专用的 MySQL 服务器,默认为 8 可能没问题。这取决于你拥有的 CPU,但文档说:

此变量的正确值取决于环境和工作负载。您将需要尝试一系列不同的值来确定适合您的应用程序的值。推荐值是 CPU 数量加上磁盘数量的 2 倍。

因此,请尝试一下,看看什么效果最好。

此外,您的数据库是否大于您拥有的 RAM 量,或者您的整个数据库是否适合内存?

请记住,由于您在同一台服务器上运行 Apache,Apache 将希望创建一堆自己的线程并消耗所有服务器进程所需的内存,如果您正在运行像 PHP 这样的东西也会占用内存。

您将必须找到一个很好的平衡点,即 Apache 和 MySQL 都可以在同一系统上以最大容量运行,但两者都没有使用太多内存,以至于另一个必须交换。

您可以排除故障或分析性能的其他方法是检查您的慢查询日志并对慢查询运行解释。此外,您可以安装 Percona 工具包并运行pt-query-digest以分析您的性能。在此处阅读文档。

于 2012-08-03T21:40:16.053 回答