mysqltuner 输出。
-------- Storage Engine Statistics -----------------------------------------------------------------
[--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MEMORY +MRG_MYISAM +MyISAM +PERFORMANCE_SCHEMA
[--] Data in InnoDB tables: 11G (Tables: 44100)
[--] Data in MyISAM tables: 458G (Tables: 52114)
[!!] Total fragmented tables: 13
这是my.cnf
[mysqld]
symbolic-links=0
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
log-error = /var/log/mysql/error.log
log-warnings = 2
symbolic-links=0
lc-messages-dir = /usr/share/mysql
skip-external-locking
key_buffer = 2G
thread_stack = 192K
thread_cache_size = 350
myisam-recover = BACKUP
max_connections = 1500
query_cache_limit = 100M
query_cache_size = 512M
general_log = 0
long_query_time = 10
bind-address = 0.0.0.0
old_passwords=1
skip-secure-auth
innodb_buffer_pool_size = 30G
innodb_stats_on_metadata=0
table_open_cache = 4096
skip-external-locking
skip-name-resolve
ft_min_word_len = 2
innodb_buffer_pool_instances = 30
innodb_file_per_table=0
innodb_checksum_algorithm=INNODB
binlog_checksum=NONE
我也想为 MyISAM 数据集缓存尽可能多的数据。目前有专门innodb_buffer_pool_size = 30G
用于 innodb 的缓存,但它只有 11 GB,这对我来说完全是在浪费 RAM。
缓存 MyISM 数据的最佳方法是什么?
我的系统 IO 使用率高达 100%,而系统上有足够的可用 RAM
我无法在具有 5 TB RAID 存储的 24 核硬件盒中使用 62GB 中的超过 15GB 的 RAM。
答案1
96K 个表!!这可能会导致各种各样的问题。
query_cache_size = 512M
-- 这么大的 QC 会影响性能。不要超过 50M。
如果您有 62GB 的 RAM 并且同时使用 MyISAM 和 InnoDB,我建议:
innodb_buffer_pool_size = 16G -- (also noticing that you have only 11G of data)
key_buffer_size = 8G -- This only for MyISAM indexes
RAM 中未使用的空间用于操作系统缓冲区。MyISAM 让操作系统进行缓存。因此,将剩下大约 35G 用于 MyISAM 数据缓存。
IO 使用率达到 100%
这通常是由低效的查询引起的,例如执行表扫描
或者也许它正在打开很多表,所以看看它是否允许您将此设置设置为这么高:
table_open_cache = 20000
另外,检查open_files_limit
和ulimit -n
。