Anatomy of a Database System学习笔记 - 存储管理
使用裸设备,还是使用文件系统?
描述 | pros | cons | |
裸设备 |
顺序读磁盘快比随机要快10-100倍,DB比OS更懂磁盘负载,因此很多DB是直接管理数据块如何存放的。 |
DB对裸设备的管理,比文件系统成熟得早,加上性能高,以及可忽略文件系统之间的差异,写裸设备也是推荐的。 |
要求DBA给DB划分整个磁盘; 同时裸设备接口随OS不同而不同,因此阻碍了商业化DB使用此方式; 最后裸设备不支持raid、san、nas。随着时间迁移,裸设备的优势已经不明显了。 |
文件系统 |
创建一个大文件,通过文件偏移量管理数据。 |
空磁盘上创建大文件,则文件内偏移量与物理偏移量大致一致; 因此性能上类似于裸设备了。 |
论文第六章举例讲了RAID的麻烦之处 |
不能使用文件系统缓存
如果DB使用文件系统的缓存机制,那么会带来重排序写问题、静默写延迟和性能问题。
- 事务落盘的时序无法保证;
- 无法保证Write Ahead Log原则
- 文件系统自带read-ahead预读和write-behind后写特性,这与DB的访问模式完全不符合:文件系统以来文件内物理偏移来做读写决策,而DB IO机制需要支持按照逻辑行为。
- 例1: DB能预测查询流的逻辑顺序,但是这些查询数据在物理上并不是连续的,OS的读写AP对预读I没有助益,DB需要结合“扫描B+树叶子”、“查询计划里的数据访问算法”、“查询计划里的future access pattern”信息,查询线程才能实现逻辑预读。
- 例2:DB刷日志缓存的时候,需要综合考虑锁状态和IO吞吐,这些信息智能靠DB自己获得,OS文件系统无法获得。
4. 性能上还有一个经典问题:双缓冲与内存拷贝造成的CPU占用率过高。
上面讨论过,为了保证正确,DB必须自己实现缓存,如果再使用OS的缓存,那么即带来内存的浪费,又带来拷贝内存的时间浪费。DB的瓶颈一般出现在内存上,之所以很多人不认为内存是瓶颈,而认为I/O是瓶颈,是因为很多商业DB产品厂商算好了内存与磁盘的比例这样正好能适应buffer pool;也算好了磁臂间磁盘交换IO的速率正好能适应所有操作系统的处理器,所以这种产品的I/O是瓶颈。
综上所述,数据库应该自己管理缓存。当代OS给数据库等程序提供钩子(如mmap/msync/madvise调用)以便规避double-buffering、保证直接刷盘、以及提供可定制策略。
为了快速访问数据库页面,所有DB都实现了一个巨大的共享缓冲池
帧:缓冲池是一个帧数组,每个帧对应一块DB block 大小的内存区域,这样一方面读写磁盘不需要翻译,另一方面也避免了内存碎片和压缩。
页面表:这个表每个元素对应一个帧,包含磁盘地址、脏标、引线数pin count和换页算法锁需要的信息。
缓冲池换页算法:这个算法的研究绕了一些弯路。早期关系型数据库领域有很多研究换页策略,主要是因对嵌套循环连接nested-loop join。嵌套循环连接的循环访问模式是一遍遍扫描比缓冲池还大的堆文件,按照OS换页策略如LRU/CLOCK对索引重用间隔的悲观策略,应对nested-loop join效果是很差的。当时人们想了很多种算法,有的策略是针对不同页面类型使用不同换页算法,例如按照Reiter域分离计划,B+树根节点和堆文件中页面的替换方式就不一样;有的甚至涉及到通过查询计划来动态修改换页策略。但是今天,大多数系统使用改进的LRU算法。
Anatomy of a Database System学习笔记 - 存储管理的更多相关文章
- Anatomy of a Database System学习笔记 - 概论、并发控制
<Anatomy of a Database System>这篇发表于87年.一共48页的论文据说是DBA入门必看,但是找了全网没有找到中文翻译.这篇文章对关系型数据库确实有提纲挈领的作用 ...
- Anatomy of a Database System学习笔记 - 公共模块、结语
公共模块 1. 使用基于上下文的内存分配器进行内存分配 除了教材里常提到的buffer pool,数据库还会为其他任务分配大量内存,例如,Selinger-style查询优化需要动态的规划查询:has ...
- Anatomy of a Database System学习笔记 - 查询
查询解析 解析会生成一个查询的内部展示.格式检查包含在解析过程中. 每次解析一个SELECT,步骤如下:1. 从FROM里找到表名,转换成schema.tablename.这一步需要调用目录管理器ca ...
- Anatomy of a Database System学习笔记 - 事务:并发控制与恢复
这一章看起来是讲存储引擎的.作者抱怨数据库被黑为“monolithic”.不可拆分为可复用的组件:但是实际上除了事务存储引擎管理模块,其他模块入解析器.重写引擎.优化器.执行器.访问方式都是代码相对独 ...
- 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用
目录 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用 16.1 LVM的工作原理 16.1.1 LVM常用术语 16.1.2 LVM优点 16.2 创建LVM的基本步骤 16.2 ...
- A.Kaw矩阵代数初步学习笔记 5. System of Equations
“矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...
- system generator学习笔记【02】
作者:桂. 时间:2018-05-20 23:28:04 链接:https://www.cnblogs.com/xingshansi/p/9059668.html 前言 继续学习sysgen.接触s ...
- System类学习笔记
最近在学习源码的过程中发现:很多深层次的代码都用到了一个类System类,所以决定对System类一探究竟 本文先对System类进行了剖析,然后对System类做了总结 一.首先对该类的中的所有字段 ...
- jz2440存储管理实验【学习笔记】
平台:jz2440 作者:庄泽彬(欢迎转载,请注明作者) 说明:韦东山一期视频学习笔记 简介:先来简单的说明一下这次的实验,看看下图,我们的程序通过烧录器下载到nandflash当中去,之后在启动的时 ...
随机推荐
- Linux与Windows的几点区别
echo $PATH 回显Linux环境变量PATH的值,Linux下的环境变量必须大写echo %path% 回显Windows环境变量path的值 export PATH=/usr/local/t ...
- C#编写CLR函数
本案例在VS2017环境中开发: 1.新建项目,“数据库项目”,添加 UserDefinedFunctions.cs类文件,代码如下: using System; using System.Data; ...
- Azure monitor Portal 、Azure monitor API监控指标、性能监视器常用指标
- [Java Web学习]JSP中uri="http://java.sun.com/jsp/jstl/core"报红错误
在官网下载jstl.jar和standard.jar,问题解决.
- ubuntu18安装网易云音乐
1.打开ubuntu软件搜索网易云安装 2.解决ubuntu18.04下网易云音乐打不开的问题 修改/etc/sudoers文件 sudo vi /etc/sudoers 在最后增加一行: usern ...
- 旁路、去耦、Bulk以及耦合电容的作用与区别
在硬件设计中有很多种电容,各种电容的功能.种类和电容容值各不相同.按照功能划分的话,最重要的几种电容分别称为:去耦电容(De-coupling Capacitor),旁路电容(Bypass Capac ...
- Intel汇编指令格式解析
环境: win7_x64旗舰版.VS2015企业版 一.Intel保护模式.实地址模式和虚拟8086模式指令格式(x86) 图在Intel手册2.1章节 1.1)Instruction Prefixe ...
- 用 EPWA 写一个 图片播放器 PicturePlayer
用 EPWA 写一个 图片播放器 PicturePlayer . 有关 EPWA,见 <我发起并创立了一个 EPWA 的 开源项目> https://www.cnblogs.com ...
- Spring Boot - AOP(面向切面)
AOP 全称 Aspect Oriented Programming(面向切面),AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分 ...
- 如何快速开发html5跨平台K12/幼儿交互课件、动画课件、交互游戏
flash交互课件能生动表达教学内容,也深受广大教育工作者的喜爱,但是目前flash课件只能在pc电脑平台上进行展示,随着移动网络的发展,越来越多的课件产品需要移殖到各种移动平台(手机,pad,智能电 ...