buffer cache 里有三种数据结构来管理内存空间

1 hash chain 2 LRU LIST 3 DIRTY LIST

hash chain 是为快速定位buffer cache中块的结构,主要通过hash链表实现。每个hash桶对应一个hash链。链上每个header指向一个数据块,
 一个hash latch管理多个hash桶。
 有对应隐含参数管理latch个数,和hash桶的个数。大概一个latch管理32个hash桶。latch就是桶上的锁,如果两个进程都已只读方式读取链上
 的两个块,那么latch可以对只读共享。如果一个进程读一个块,另一个进程要修改桶对应链上的另一个块,就是独占方式访问,于是要等前一个
 进程释放latch才能用独占方式访问这个块。后一个进程在等待前一个进程释放latch时,发生等待事件latch:cache buffers chains。
 对这个等待事件解决方法,可能遇到大量逻辑读很多的sql,要逻辑读,就要访问一个块,就可能获取latch,引发大量latch:cache buffers chains
争用,于是根据逻辑读排序找出逻辑读最多的sql,调整其执行计划。
等待事件具体诊断可参考  latch:cache buffers chains的优化思路 http://blog.itpub.net/24742969/viewspace-1692853/

LRU list在缓存初始加载时,所有buffer cache 块都放到LRU list管理,从磁盘读取数据到内存前,先查看LRU list找到一个空块,以便存放磁盘
 读到内存的数据。读LIST的时候如果有块时脏块,就把这样的块放到dirty LIST。扫描LRU list超过40%还没找到空块,停止扫描写dirty LIST脏数据
 到磁盘,并给出free buffer wait等待事件,如果经常发生这个事件就要考虑加大Buffer Cache了。还有如果dirty LIST超过25%也会写脏数据
 到磁盘。

通俗的说就是先通过hash chain找到内存块读数据,如果读取的数据没在内存块,就要从磁盘读数据到内存,读入内存时哪个块是空块,或要换出内存被
 写入磁盘数据由LRU决定。如果块上的数据是脏数据就用dirtyLIST 管理,脏数据写出后,该块仍由LRU管理
LRU LIST 和 DIRTY LIST 统一称为working set 他们也需要latch保护,因为他们是共享的用于管理内存的块,需要latch防止数据的破坏

buffer cache 内存管理物理结构纯干货相关推荐

  1. Linux buffer/cache 内存占用过高的原因以及解决办法

    表现现象 在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个 CoreOS 的系统上,free命令的显示内容大概是这样一个状态: core@localhost ~ $ free ...

  2. linux清除内存buffer,Linux清理Buffer/Cache内存空间让系统变流畅

    Linux 中 Buffer/Cache内存占用过高解决方法 在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个RHEL6的系统上,free命令的显示内容大概是这样一个状态: ...

  3. buffer cache 深度解析

    本文首先详细介绍了oracle中buffer cache的概念以及所包含的内存结构.然后结合各个后台进程(包括DBWRn.CKPT.LGWR等)深入介绍了oracle对于buffer cache的管理 ...

  4. 云和恩墨技术通讯:Oracle AMM自动内存管理引起数据库阻塞

    各位亲爱的用户/读者朋友们: 为了及时共享行业案例,通告共性问题,达成知识共享和提前预防,我们整理和编辑了<云和恩墨技术通讯>(4月刊),通过对过去一段时间的知识回顾和故障归纳,以期提供有 ...

  5. linux系统调用和内存管理以及栈帧

    linux编程和C++笔记 目录 linux编程和C++笔记 0. terminal操作快捷键等 1. vfork的子进程return程序会挂掉,但exit不会 2. C++内存管理详解 3. 关于堆 ...

  6. 22-23 - 页式内存管理

    ---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接:(更新中)深入浅出操作系统 - 目录 文章目录 1. 段式内存管理回顾 1.1 段式内存管理介绍 1.2 软硬件技术的发展 1.2.1 可行的 ...

  7. 纯干货,linux内存管理——内存管理架构(建议收藏)

    一.内存管理架构 内存管理子系统架构可以分为:用户空间.内核空间及硬件部分3个层面,具体结构如下所示: 1.用户空间:应用程序使用malloc()申请内存资源/free()释放内存资源. 2.内核空间 ...

  8. 【纯干货】Linux内存管理(最透彻的一篇)

    摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法.力求从外到内.水到渠成地引导网友分析Linux的内存管理与使用.在 ...

  9. 内存分段分页机制理解_深度干货 | 真棒! 20 张图揭开内存管理的迷雾,瞬间豁然开朗...

    openEA开源周刊 openEA开源社区的官方运营载体 这里每天给大家呈现有价值的开源资讯,欢迎您的来稿与推荐,点击上方蓝色字,加入我们吧! 摘要:本篇跟大家说说内存管理,内存管理还是比较重要的一个 ...

最新文章

  1. css php html介绍,对CSS知识的简单介绍
  2. 写了一阵子多线程之后需要注意的几点
  3. IdnentiyServer-使用客户端凭据访问API
  4. 电脑广告弹窗多?安利一下:程序员常用 7 款Chrome去广告插件
  5. 64bit centos 如何通过yum安装32bit的程序
  6. 大数据之-Hadoop3.x_MapReduce_切片源码分析---大数据之hadoop3.x工作笔记0104
  7. Python集合框架
  8. 2015职称计算机考试基础知识,2015年中级职称计算机考试基本知识点.doc
  9. dft频谱泄漏matlab,对于DFT频谱泄漏问题的研究
  10. C# Socket通讯连接测试
  11. 大二面试bat ,阿里巴巴面试经历,普通本科(二本)
  12. 21世纪七大数学难题
  13. 如何在Vue3中使用router
  14. 【c语言】两个队列实现一个栈
  15. Android 10 默认输入法
  16. 注册163VIP邮箱如何登陆?我邮件注册的163VIP邮箱不知道怎么登陆
  17. Python破解百度翻译反爬机制---自制翻译器
  18. 今天ifttt很火呀
  19. 【和77】火车到底能不能当出租车开呢?(温微观察13-7)
  20. 自定义View仿魅族手机加速(手机管家)效果

热门文章

  1. mysql update语句卡死_oracle执行update语句时卡住问题分析及解决办法
  2. 每天定时打开某个网页_纯技术分享,不借助任何工具下载网页中的视频、音乐等~...
  3. 我的世界pc正版好玩的服务器,都来看看好玩的服务器
  4. 计算机网络基础代码,计算机网络基础知识(示例代码)
  5. 树莓派 烧录arm64架构centos7
  6. Spring @PropertySource
  7. pytorch LSTM_regression
  8. javascript window.history
  9. web-midi-api
  10. TensorFlow tf.keras.losses.SparseCategoricalCrossentropy