我在mongodb上收到此警告,
WARNING: Readahead for /data is set to 1024KB
We suggest setting it to 256KB (512 sectors) or less
http://dochub.mongodb.org/core/readahead
在查询时,每个链接建议将 readahead 值设置为较少的数字以及如何设置它?
我知道将它设置为较小的值会让我摆脱警告,但我对readahead的意义更感兴趣?如果我把它设置得更高,会有什么影响?
答案 0 :(得分:4)
预读是一种内核功能,它在块设备级别工作,并且是全局的(不依赖于进程)。 这是一种用于尝试提高文件读取性能的技术。如果内核有理由相信正在按顺序读取特定文件,它将尝试在应用程序请求之前将文件中的块读入内存。当readahead工作时,它会加快系统的吞吐量,因为读取应用程序不必等待其请求。当readahead失败时,它会生成无用的I / O并占用其他目的所需的内存页面。 (https://lwn.net/Articles/155510/)
这是一个更深入的解释 - > http://man7.org/linux/man-pages/man2/readahead.2.html
为了解决此问题,请确保存储数据库文件的块设备的预读设置是合适的。对于随机访问使用模式,请设置较低的预读值。预读32(16 kB)通常效果很好。
在Linux中:
以root身份登录 - > su -
运行sudo blockdev --report
以获取预读设置
运行sudo blockdev --setra <value> <device>
以更改预读设置