Linux 文件系统缓存 -针对不同数据库有不同作用
文件系统缓存
filesystem cache
许多人没有意识到。文件系统缓存对于性能的影响。Linux系统默认的设置倾向于把内存尽可能的用于文件cache,所以在一台大内存机器上,往往我们可能发现没有多少剩余内存。(free命令显示的第二行输出,如下)。文件系统cache可以加速磁盘操作,使系统有更好的IO性能,代价只是把一些空闲的内存利用起来了。
我们需要预留多少内存做文件系统cache呢? 首先我们要理解“free”命令
total used free shared buffers cached
Mem: 2058824 1772172 286652 0 214708 879744
-/+ buffers/cache: 677720 1381104
Swap: 1048568 84 1048484
对于如上的命令输出,我们看下Mem 节,total列显示我们一共有2G内存。used列显示我们使用了约1.8G内存(1772172),快接近总内存了。其实used列包含了用于文件系统cache的部分,真实用到的内存可能远远没有这么多。
我们查看“-/+ buffers/cache.” 节,这里的“used”列(677,720)表明实际使用了多少内存。 “free”列=Mem节的buffers+cached+free ,即 free = 214708+879744+286652 = 1381104 ,表明如果bffers和cache都是空的,我们拥有多少空闲内存。所以这台机器实际只是用来661M内存(677720/1024/1024) .
那么,对于这个应用,这是合适的cache分配吗?需要更多内存用于cache吗?是否有浪费资源呢?答案是“依情况而定”。
cache的规则很简单:你希望cache能够尽可能满足正在执行的工作。从应用程序栈的角度考虑,越往下层,cache越不那么高效,越不知道应该缓存哪些内容,那么你就可能需要更大的内存,想想看磁盘阵列的巨大的cache就知道了。所以,如果你的应用程序有能力去cache,你最好把内存更多留给你的应用程序,而不是文件系统缓存。当然,也不是把所有空闲内存都分配给应用程序,因为文件系统缓存在一些场合仍然有用,比如写日志,我们也可能需要额外的buffers。但是如果让你做一个选择,是给你的数据库10GB内存还是给文件系统cache 10G内存,显然你应该把内存给数据库。所以高效的磁盘数据库往往自己实现了存储子系统,而不是依赖于文件系统缓存,从理论上来说,MySQL Innodb这样实现了自己的存储引擎,可以更智能的缓存数据的数据库天然就比Mongodb这样依赖文件系统来刷新数据的数据库高效得多。
所以,对于我们的操作系统,free命令显示出的空闲内存,应该更多关注-/+ buffers/cache: 这节内容。这表明了你的系统可能还剩余的空闲内存。我们需要确保我们有足够的剩余用于以后的负荷增长。对于数据库类应用,很多时候,我们希望越过文件系统,但对于一些日志操作,仍然需要利用文件系统cache的,由于文件系统cache不够可能导致对磁盘的压力突然增加,对于非数据库的其他应用,比如web服务器,虚拟机,往往利用好文件cache更高效,特别是对于改善IO有好处。
转载自:http://www.db110.com/文件系统缓存/
Linux 文件系统缓存 -针对不同数据库有不同作用的更多相关文章
- Linux 文件系统缓存dirty_ratio与dirty_background_ratio两个参数区别
文件系统缓存dirty_ratio与dirty_background_ratio两个参数区别 (2014-03-16 17:54:32) 转载▼ 标签: linux 文件系统缓存 cache dirt ...
- linux文件系统 - 初始化(二)
加载initrd(上) 一.目的 本文主要讲述linux3.10文件系统初始化过程的第二阶段:加载initrd. initrd是一个临时文件系统,由bootload负责加载到内存中,里面包含了基本的可 ...
- linux文件系统初始化过程(5)---加载initrd(下)
一.目的 linux把文件分为常规文件.目录文件.软链接文件.硬链接文件.特殊文件(设备文件.管道文件.socket文件等)几种类型,分别对应不同的新建函数sys_open().sys_mkdir() ...
- Linux文件系统的目录结构详解
Linux文件系统的目录结构详解 一.前 言 文章对Linux下所有目录一一说明,对比较重要的目录加以重点解说,以帮助初学者熟练掌握Linux的目录结构. 二.目 录 1.什么是文件系统 2.文件 ...
- Linux 文件系统剖析
[转自]https://www.ibm.com/developerworks/cn/linux/l-linux-filesystem/ 按照分层结构讨论 Linux 文件系统 在文件系统方面,Linu ...
- linux文件系统相关资料
linux下文件系统通常是通过虚拟文件系统(VFS)蔽下层具体文件系统操作的差异,为上层的操作提供一个统一的接口.文件系统底层都是用系统IO缓存层提供的块读写接口,实现逻辑块到物理块 ...
- 区块链阶段1-Linux基础- 2 Linux文件系统
2.1 什么是文件系统 文件系统是操作系统在磁盘或分区上组织文件的方法和数据结构.负责对磁盘空间进行组织和分配,存储文件数据,并对其提供保护和检索服务.学习Linux,首先需要了解整个 Linux 文 ...
- linux文件系统体系结构 和 虚拟文件系统(VFS)
图 1. Linux 文件系统组件的体系结构 用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开.读取.写和关闭)提供用户接口.系统调用接口的 ...
- 磁盘、分区及Linux文件系统 [Disk, Partition, Linux File System]
1.磁盘基础知识 1.1 物理结构 硬盘的物理结构一般由磁头与碟片.电动机.主控芯片与排线等部件组成:当主电动机带动碟片旋转时,副电动机带动一组(磁头)到相对应的碟片上并确定读取正面还是反面的碟面,磁 ...
随机推荐
- Django RuntimeError: Model class app_anme.models.Ad doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.报错
报错内容 RuntimeError: Model class app_anme.models.Ad doesn't declare an explicit app_label and isn't in ...
- promethus监控mysql
一.mysqld_exporter安装 下载页面 https://github.com/prometheus/mysqld_exporter/releases 下载最新版本 https://githu ...
- golang ---获取磁盘信息
package main import ( "fmt" "github.com/StackExchange/wmi" ) type Storage struct ...
- JS权威指南读书笔记(七)
第十七章 事件处理 1 客户端JS程序采用了异步事件驱动编程模型. 2 关于事件的重要定义 a 事件类型(event type) b 事件目标(event target) target ...
- python取字母以及数字随机数
一.这里用到了:String模块ascii_letters和digits ''.join(random.sample(string.ascii_letters + string.digits, 9)) ...
- java常用集合框架关系
一.综合总图 1.所有集合类都位于java.util包下. 2.Java的集合类主要由两个接口派生而出:Collection和Map, 3.Collection和Map是Java集合框架的根接口,这两 ...
- MySQL数据库的事物隔离级别
一. 查看数据库的事物隔离级别 mysql> show variables like '%isolation'; +-----------------------+--------------- ...
- oracle命令行导出、导入dmp文件
1.导出语句: exp test/test@127.0.0.1:1521/orcl file=d:\gpmgt.dmp full=n: 导出test用户数据库对象,full=n表示默认只导出test用 ...
- vmware虚拟机克隆后网卡修改
在使用vmware虚拟机时,有时候需要通过一个虚拟机克隆出批量的虚拟机,在克隆后,会发现网卡信息发生了变化,以这里为例,源主机网卡名称为eth0.eth1,在克隆后变成了eth2.eth3,这时候,如 ...
- 修改ActiveMQ的内存大小
有时我们需要修改ActiveMQ的内存大小,防止内存溢出! 修改配置文件下-Xmx参数然后重启mq即可: /fs01/apache-activemq-5.15.0/bin/env ACTIVEMQ_O ...