mysql - 太高的 MySQL innodb 缓冲池大小会导致内核交换守护进程 (kswapd0) 的高负载吗?

标签 mysql web-services linux-kernel kernel

分析和避免由内核交换守护程序引起的高负载出现的最佳实践是什么?它是否直接影响缓冲池大小等 MySQL 配置?

最佳答案

在一个稳定的 Linux 系统中,交换文件几乎不应该被使用,一旦它被使用,你的系统就会变慢。它存在三个原因,过度使用记帐(现在不再适用),将未使用的代码段换出到磁盘以为磁盘缓冲区腾出更多空间,并在 oom_killer 开始终止您的应用程序。

出于各种原因,MySQL 绕过了内核的内置磁盘缓冲。当它启动时,它会分配缓冲池并从那里缓存磁盘中的页面。当缓冲池已满时,它将删除一些干净的页面,并写出一些脏页以为更多页面腾出空间。

如果您将缓冲池设置为大于可用 RAM 的数量,那么当 RAM 填满时,内核将开始将页面交换到交换文件中。当缓冲池填满时,MySQL 将开始将页面换出到数据库文件。这将导致抖动和通常较差的性能,因为您的所有 I/O 操作都将乘以(至少)三。

这很可能是您所看到的,我建议您减小缓冲池的大小,使其适合您的空闲 RAM。

关于mysql - 太高的 MySQL innodb 缓冲池大小会导致内核交换守护进程 (kswapd0) 的高负载吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12550742/

相关文章:

linux - USB : gadget : device mode : configfs: uvc and mass storage on single configuration?

Azure 中的 MySql lower_case_table_names = 2 但 MySql Workbench 说它 = 1

由于警告,带分页的 PHP 搜索代码(使用 php)不会生成导航链接。我该如何纠正错误?

php - 得到????标记为来自 php 的响应,而不是获取泰米尔文本字符串。

c - 获取 DRAM 或 SRAM galaxy S7 的起始地址

linux - 使用内核模块的 SBC 6845 板上的 USB 主机和设备功能

MYSQL多对多3表查询

c# - 如何将存储过程添加到 EF .edmx?

c# - 从 OperationContext 获取 SOAP header 中的值

c# - 没有证书的 WCF 身份验证