mariadb 5.5 innodb 不断打开最大 200k 的文件,直到系统完全挂起

mariadb 5.5 innodb 不断打开最大 200k 的文件,直到系统完全挂起

Mariadb 5.5 安装在 CentOS 上,为总容量约为 40GB(按磁盘上每个数据库文件计算)和 506 个表的数据库提供服务。该数据库由 php-fpm 查询,问题是,在某个时候,当流量增加时,mysqld进程打开的文件数量(按lsof状态计算)会增加到大约 200k,系统会挂起(具体来说,Web 请求非常慢,TTFB 需要 5 分钟)。

服务器本身应该具有足够的容量(Supermicro; X10DRH125GB RAM 和 SSD),以便能够在如此适度的负载下快速运行。

检查 lsof 输出表明,mysqld 进程保持打开的表在和其中: [root@mail proc]# lsof | wc -l 95592 其中大多数是打开的表:

[root@mail proc]# lsof | grep .ibd | wc -l 57331

在此之前,lsof 显示 /[aio] 的数量非常大,并且放置后innodb_use_native_aio=0情况有所改善

mysql_slow_log不显示运行时间超过 5 秒的查询,

| Innodb_mem_total | 33061601280

我的 MySQL 配置是:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0
innodb_file_per_table = 1
innodb_buffer_pool_size = 1G
innodb_io_capacity = 2000
innodb_read_io_threads = 64
innodb_thread_concurrency = 0
innodb_write_io_threads = 64
innodb_use_native_aio=0
skip-name-resolve=1
max_heap_table_size=256M
tmp_table_size=256M 
slow-query-log=1
long_query_time=1

某些表mysql.log在启动时显示一些错误:

191205 7:21:25 InnoDB: Error: trying to open a table, but could not InnoDB: open the tablespace file './staging/yotpo_rich_snippets.ibd'!但我不确定这是否是导致性能低下的原因。

此外,数据库数据文件位于/home/分区中,即:

/dev/md2 /home ext4 grpquota,usrquota,data=ordered,relatime,rw 0 2

如能提供任何关于在哪里挖掘的提示,我们将不胜感激。

答案1

有几种可能性:

  • 有些查询需要很长时间(并且同时挂在文件(即表)上)。-- 查找慢速查询;让我们努力加快它们的速度。您已打开 slowlog;使用它pt-query-digest来识别“最差”的查询。
  • 该APP使用了“EAV”模型,该模型连接了许多表。——如果是这样,让我们​​讨论一下。
  • Web 服务器允许大量连接。如果允许“太多”,那么就会互相干扰。“TTFB 需要 5 分钟”就是一个线索。-- 在 Web 服务器层限制连接。
  • RAM 使用效率不高。您有 125GB 的 RAM,但实际innodb_buffer_pool_size只有 1G。-- 将其更改为 80G。

同时,删除此问答并坚持使用更好的网站:dba.stackexchange.com。

相关内容