我在 ESXi 平台上运行的 Ubuntu 10.10 服务器上有一个 innodb。我有 8 个专用 CPU、32 GB 的 RAM 和存储在 SAS 10k rpm 磁盘的 Raid 5 HP SAN 中的文件。我期待快速查询!但是:select count('x') 需要 45 秒才能处理 7500 万行!因此,我深入研究了如何调整这个庞然大物:
1) 我的某些设置导致 mysql 崩溃,出现“未知变量”错误。这些是:
innodb_file_format = barracuda
innodb_read_io_threads = 6
innodb_write_io_threads = 6
innodb_io_capacity = 1000
2)我的其余设置不会导致 mysql 崩溃,但可能未进行优化。
skip_name_resolve
default_storage_engine = InnoDB
innodb_file_per_table = 1
innodb_buffer_pool_size = 24G
innodb_log_files_size = 1G
innodb_log_buffer_size = 8M
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_comit = 1
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 32
query_cache_limit = 1M
query_cache_size = 0
您是否建议对这些设置进行其他调整?我遗漏了其他设置吗?
感谢您的支持!
答案1
innodb_file_format = barracuda
innodb_read_io_threads = 6
innodb_write_io_threads = 6
innodb_io_capacity = 1000
这些设置是 MySQL 5.5 特有的。如果您使用 MySQL 5.5 处理在 MySQL 5.0/5.1 中写入的数据,则需要运行旧版本的 MySQL,mysqldump 所有内容,然后重新将数据加载到 mysql 中。barracuda 格式是另一种 InnoDB 文件格式。您必须从以前版本的 MySQL 和 InnoDB 中迁移出来。我之前写过一些关于这个的东西。
要仔细检查文件格式,请执行“SHOW VARIABLES LIKE 'innodb_file_format';”。您应该会看到 Antelope。
一旦你解决了这个问题,就可以把其他变量调到这个
innodb_read_io_threads = 64
innodb_write_io_threads = 64
innodb_io_capacity = 20000
毕竟你有 8 个 CPU。