Mysql使用的是系统文件缓存,而不是直接使用RAM

Mysql使用的是系统文件缓存,而不是直接使用RAM,mysql,caching,memory,Mysql,Caching,Memory,我有一个Ubuntu 64位系统,运行Mysql版本5.5.32-0ubuntu0.12.04.1-log。这台机器有64 GB内存 我有一个相当大的数据库,它几乎有90 GB的数据和一个包含250.000.000行的表 我的问题是,mysqld进程不占用太多内存。仅在2-5 GB之间。但是系统的内存完全用于文件缓存 我重新启动了服务器,有63 GB的内存可用。一旦开始执行较大的查询,可用内存量就会减少,而缓存的文件量就会增加。 因此,mysql没有将数据加载到其RAM中,而是使用文件缓存。 查

我有一个Ubuntu 64位系统,运行Mysql版本5.5.32-0ubuntu0.12.04.1-log。这台机器有64 GB内存

我有一个相当大的数据库,它几乎有90 GB的数据和一个包含250.000.000行的表

我的问题是,mysqld进程不占用太多内存。仅在2-5 GB之间。但是系统的内存完全用于文件缓存

我重新启动了服务器,有63 GB的内存可用。一旦开始执行较大的查询,可用内存量就会减少,而缓存的文件量就会增加。 因此,mysql没有将数据加载到其RAM中,而是使用文件缓存。 查询速度非常慢。当我查询大表时,根据解释-使用一个索引,只有500行要考虑,它需要分钟。< /P> 你对这种现象有什么解释吗

这是我的。(这实际上是我的从属服务器的配置,但它显示了完全相同的行为)我的表都是InnoDB:

[client]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket          = /var/run/mysqld/mysqld.sock
nice            = 0

[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking

bind-address            = 127.0.0.1

key_buffer              = 16M
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 8

myisam-recover         = BACKUP

query_cache_limit       = 1M
query_cache_size        = 16M

log_error = /var/log/mysql/error.log

server-id               = 2
log_bin                 = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
max_binlog_size         = 100M


[innodb]

innodb_buffer_pool_size = 55G
innodb_log_file_size    = 256M
innodb_log_buffer_size  = 4M
innodb_flush_log_at_trx_commit=2
innodb_thread_concurrency=0
innodb_file_per_table = 1  # (this is not respected as I changed it after the first    database was created). So my ibdata1 file is over 80GB in size


max_connections        = 1000                # wenn gleichzeitig viele User zugreifen
table_cache            = 10000                # abgeleitet von max_connections, könnte sogar höher sein
tmp_table_size          = 5000M                # wichtig wg. JOINs, zu kleiner Wert macht die extrem langsam
max_heap_table_size     = 5000M

[mysqldump]
quick
quote-names
max_allowed_packet      = 16M

[mysql]

[isamchk]
key_buffer              = 16M

!includedir /etc/mysql/conf.d/

将key\u buffer size增加到
128M
,将max\u allowed\u packet增加到
128M
,因为这将加快查询的执行

我最终发现了问题所在。

innodb_缓冲区_池_大小=55G

不属于[innodb]部分,但属于[mysqld]部分


所有innodb配置都需要放在mysqld部分。

您是否尝试过我的解决方案?能否提供该查询的完整解释?我不相信你的问题是你描述的问题。mysql在重启后不会占用太多内存是正常的。另外,我建议你放弃你的大单表空间,这会使很多操作更加高效。我假设你正在使用INNODB,试着在mysqld下更改缓冲区大小,看看调整键缓冲区大小不会有帮助,你可以在OPs问题中清楚地看到他只使用INNODB。