oracle学习笔记 计算机缓存技术工作机制

来源:互联网 发布:北京赛车pk10数据采集 编辑:程序博客网 时间:2024/05/17 22:46
oracle学习笔记

计算机缓存技术工作机制


计算机缓存技术,对oracle来讲非常重要,我们单独拿出了一个小的章节来讲。

理解缓存技术对以后的oracle学习非常有帮助,对计算机的学习也很有帮助。

缓存技术它遍布于整个IT所有设备里面的方方面面,这节课讲里面的一些概念。

缓存是计算机运行时,为了提高运行速度而形成的一个技术,已被各种硬件普遍采用。

一)
从总体来看,计算机里面最大的一个缓存就是内存。

硬盘是慢速设备是机械设备,它的速度比较慢。
内存是电子设备,它的速度比较快。
cpu处理数据的速度很快,但是数据从硬盘中取出来的速度是比较慢的。
也就是说cpu要处理硬盘上的数据,它的瓶颈在数据从硬盘上取出来。
所以我们在它们之间加了一个内存。
cpu要处理数据时侯,首先数据从硬盘调到内存,然后从内存在调到cpu。
进cpu很快,出硬盘慢一些。

内存有什么意义呢?

计算机在IT,在我们的技术里面,有一个相对比较稳定的技术特点:
cpu在一段时间里面,多次处理同一块数据的几率是很大的,
达到95%以上甚至到99%。

有两个技术要点:
1、计算机在一段时间里面连续多次处理同一块数据的几率很大。
2、处理完前面一个数据,在接下来的时间里面处理紧跟着的后面的数据几率也很大。

鉴于这两个几率,我们的计算机就发明产生了缓存技术。

cpu要处理硬盘中的数据,
先把数据从硬盘调到内存,这时候发生了一次物理的i/o,
再从内存调到cpu,这是一次逻辑i/o。
接下来cpu又处理了同一块数据,
这时候就不需要再发生物理io了,只有逻辑io就可以了。

这样cpu处理了两次数据,一次有物理io也有逻辑io,第二次处理相同数据时只是逻辑io,
这样缓存的命中率就是50%,命中率是逻辑io除以总的io数。

在计算机里面缓存的命中率通常达到99%,一般也在95%以上。
就是cpu读100次数据,其中有99次发生在缓存里面,只有一次发生物理io。

由此我们发现缓存技术非常重要,可以大大的减少物理io的次数,
从而大幅的提高cpu处理数据的速度。

这就是缓存技术,内存是计算系统里面最大的一块缓存。主要缓存硬盘的数据。
说明内存非常重要。

以后讲oracle时,缓存的命中率会频繁的提到。

缓存的特点速度要比它要缓存的设备介质的速度要快,
内存的速度要远远的高于硬盘的速度,
若慢了命中率越高速度就会越慢,就失去缓存的意义了。

计算机最大的缓存是内存。

缓存的命中率很高,一定意味着计算机没有问题吗?

命中率=L/L+P,L为逻辑io次数,P为物理io次数。
正常的是大部分发生在L身上,P比较少。
还有种情况,
P比较大,但是L更大,非常大,这样一比P被忽略,命中率仍然接近100%。

我们认为命中率高好,低不好。
命中率低,肯定有问题,
命中率高,不一定没问题。

逻辑读是直接从内存读也消耗资源,消耗cpu资源,
这就是以后将oracle时要讲的一个概念,
oracle在版本8以前,我们对oracle进行优化时,一定非常重视命中率的问题。

二)
把计算机里面所有的缓存演示一下:

cpu中心是中央处理芯片,
外围有很多寄存器,
还有一级缓存,二级缓存
都封装在cpu内部。

服务器往往会接存储系统,存储包括多个硬盘,
每块硬盘有缓存,整个存储系统有块大的缓存。

硬盘缓存,存储的缓存,内存是缓存,cpu中有二级缓存,一级缓存和寄存器;
这么多缓存,它的特点是,从硬盘到cpu的缓存速度越来越高,最快的是寄存器的速度。

cpu中的一级缓存因为速度快价格昂贵,所以数量很小,一般几百K,
二级缓存有几M,几十M,
到内存就比较大了,现在有几百G
存储的缓存也比较快,也比较大。

三)
缓存有个比较大的特点,如内存中的数据,
一旦系统掉电,数据就没了。

缓存的特点数据容易丢失。
而数据在硬盘上是永久存储的。

硬盘的一块数据要读它,通过一级级缓存到内存,
因为是读,内存中的数据和硬盘上的数据是一致的。

如果系统突然掉电,没有关系,因为硬盘中有。

1、一种缓存叫缓存读,read。不用加别的技术。

2、有一种缓存,可以缓存写,write。

如内存中有块缓存,cpu可能修改它的数据,它和硬盘中的数据就不一致了。
cpu直接修改的是内存,修改后害怕掉电,要抓紧时间写回硬盘。
这时会发现一个问题,缓存在读的时候起作用了,在写的时候没有起作用,
因为在写的时候马上发生了物理io,一次逻辑写马上伴随了一次物理写,
这种情况下我们认为缓存,并没有对我们在写上对性能有提高,只在读上有提高。

缓存写是指,cpu修改内存数据,修改后并不马上发生物理写,而是事后再去写。
这样的话我们的缓存不仅仅能够缓存读,还能缓存写。

缓存在正常情况下是没有缓存写功能的,大多数的缓存只能缓存读。
如cpu中的缓存只能缓存读,不能缓存写。

在整个的计算机里面,有两个地方可以缓存写。

1、oracle数据库的内存,即oracle的内存结构。

oracle数据库软件一旦启动起来,它会在内存里面划出一块空间来,让oracle使用,
这块内存我们叫oracle内存。在这块内存oracle可以缓存写。

cpu要处理oracle数据,要修改直接在内存里面修改就可以了,不需要马上写到磁盘。

oracle数据库就存在一个问题,若oracle服务器突然掉电,
cpu修改的oracle内存中的数据就有可能丢失,
oacle有一套机制来避免这种情况,以使得oracle内存的缓存可以缓存读和缓存写。

2、存储系统的内存(cache)可以缓存写。

它在存储内加了一块电池,长时间给缓存供电,即使掉电以后,这个电池还继续给它供电,
数据在缓存中丢不了。

存储中缓存很重要,缓存速度非常快,不仅能缓存读还能缓存写,
这也是存储速度快的一个重要原因。
下一节课会重点讲存储和raid技术。

电池是给缓存供电的,如果整个的机房全停电了,在存储的缓存中的数据,不会丢失,
电池的作用是持续的给存储的缓存供电。

有人说系统掉电以后,电池会将缓存数据从缓存写到硬盘上!
这不可能,因为电池的电压很低,电量有限;
第二我们的数据有大量的数据,如果往硬盘写,还没写完电池就没电了。

存储的电池就一个作用,持续的给缓存供电,
机房突然掉电,存储中的数据在缓存中有,假设过了七八天十来天二十来天,
存储一直没有加电,电池可能耗电耗干净了,耗干净后缓存的数据也丢了。
所以存储一旦掉电,我们还是需要在几天之内抓紧时间给它供电。

如果不能长时间供电,现在的存储还有另外一种技术来解决这个问题。

在存储中,加一块芯片叫闪存Flash,和U盘的结构比较相似。U盘的数据可以永久保存。
Flash和存储的缓存大小一样。
系统掉电以后,这时电池,可以驱动着将数据从缓存写入flash,数据永久保存到flash里面了。
不管多长时间掉电,缓存中的数据一直没有丢失,最新的存储都采用这种技术。

不管哪种存储技术,缓存只可能缓存写都是因为电池。
所以说存储有个问题,如果电池坏了,存储会自己监测到电池坏了,
进而会把缓存的缓存写功能给关了。
这时会发现存储的写功能会大幅下降,存储的I/O中的O会急剧下降。
整个存储的功能会大幅下降,进而影响整个计算机系统。

存储的电池非常重要。

四)
老师以前曾经做过一个项目,
服务器性能突然变慢了,排错时发现是io的问题。

最后用一个orion软件检测,此软件用oracle的特性测磁盘阵列存储的io,
发现存储的io中的写功能很差,
登陆存储以后,报警电池的寿命已经耗尽,进而存储自动把缓存写功能给关了。
接着影响了系统的运行。

把电池换了后oralce整体性能恢复正常。

接下来老师非常认真的讲了我们学技术时,为什么学原理。

这次排错过程中,我们真正动手做的,只做了一件事情,更换电池。

但是我们重点的工作不是更换电池,
而是根据系统的表象一步一步分析,找到原因。

整个的分析过程,需要你很系统的理论和动手知识,然后才能找到问题。

最后解决问题可能很简单。

用户当时花了几万块钱,最后说很可惜啊,早知道这个问题不找你了。
但是我们不要这么去认为,我们要知道我们排错的过程是最重要的。

这节课讲了计算机整体的缓存技术,也讲了缓存读缓存写。

最后还讲了理论和实践的关系,

不懂理论,只学一些具体案例的解决方法,
以后需要解决问题时只有碰到一模一样的情况才能解决问题。
这样做的结果实际上和什么也不会没什么区别。
不认真学习基础知识,马上就要解决实际问题,世界是上没有这种捷径的。

我们要尊重知识,更要尊重老师。
0 0
原创粉丝点击