我有一个繁忙的数据库,只有 InnoDB 表,大小约为 5GB。数据库在使用 SSD 磁盘的 Debian 服务器上运行,我设置了最大连接数 = 800,这有时会饱和并使服务器停止运行。平均每秒查询约 2.5K。所以我需要优化内存使用,为最大可能的连接腾出空间。
我已经看到建议 innodb_buffer_pool_size 应该高达总内存的 %80。另一方面,我从调整引物脚本中收到此警告:
Max Memory Ever Allocated : 91.97 G
Configured Max Per-thread Buffers : 72.02 G
Configured Max Global Buffers : 19.86 G
Configured Max Memory Limit : 91.88 G
Physical Memory : 94.58 G
Run Code Online (Sandbox Code Playgroud)
这是我当前的 innodb 变量:
| innodb_adaptive_flushing | ON |
| innodb_adaptive_hash_index | ON |
| innodb_additional_mem_pool_size | 20971520 |
| innodb_autoextend_increment | 8 |
| innodb_autoinc_lock_mode | 1 |
| innodb_buffer_pool_instances | 1 …Run Code Online (Sandbox Code Playgroud) 我在运行MySQLTuner.pl时看到这些:
-------- Security Recommendations -------------------------------------------
[!!] User '@debian' has no password set.
[!!] User '@localhost' has no password set.
------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
谢谢
我使用 MySQL 5.5.23-1~dotdeb.0 (Debian),这里是 my.cnf 的相关部分
default-storage-engine = innodb
innodb_buffer_pool_size = 3G
innodb_log_file_size = 256M
innodb_thread_concurrency = 8
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 4M
innodb_additional_mem_pool_size = 20M
Run Code Online (Sandbox Code Playgroud)
问题是,无论我为 innodb_buffer_pool_size 选择什么值(我也尝试过 4G 和 8G 以及 8000M)。我得到以下内容mysql> SHOW global VARIABLES;
| innodb_buffer_pool_size | 134217728
Run Code Online (Sandbox Code Playgroud)
调优入门脚本的结果:
INNODB STATUS
Current InnoDB index space = 621 M
Current InnoDB data space = 3.82 G
Current InnoDB buffer pool free = 0 %
Current innodb_buffer_pool_size = 128 M
Depending …Run Code Online (Sandbox Code Playgroud)