MYSQL 与 InnoDB

MYSQL 与 InnoDB

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_limitulimit -n

相关内容