Oracle中Cache和Buffer有什么区别?

分类:编程技术 时间:2024-02-20 15:45 浏览:0 评论:0
0
这篇文章主要讲解《Oracle中Cache和Buffer有什么区别?》,感兴趣的朋友不妨看一下。文章介绍的方法简单、快捷、实用。让小编带领大家学习《Oracle中Cache和Buffer有什么区别?》!

Cache和Buffer是两个不同的概念。简单来说,Cache加速“读”。该缓冲区是“写”缓冲区。前者解决了读取的问题,保存了从磁盘读取的数据。后者解决了写入问题,将即将写入磁盘的数据保存起来。在很多情况下,这两个术语并没有严格区分,读写混合类型通常被称为缓冲区高速缓存。

Oracle中的日志缓冲区解决的是重做写入的问题,而数据缓冲区缓存解决的是读写数据块的问题。对于Oracle来说,如果IO没有命中SGA,就会发生物理IO。 Oracle不关心u的类型底层存储。它可能是一个存储系统,它可能是一个本地磁盘,它可能是RAID 10,也可能是RAID 5。它可能是一个文件系统,一个裸设备,或者ASM。简而言之,Oracle将底层存储系统称为存储子系统。

在存储系统中,缓存几乎无处不在(在下面的讨论中,我们统称为缓存)。有文件系统中的缓存、存储中的缓存、RAID 控制器上的缓存以及磁盘上的缓存。 。为了提高性能,Oracle的一个写操作很可能会先写入到存储缓存中,然后再返回。如果此时存储系统出现问题,Oracle将如何保证数据的一致性。

Oracle数据库最重要的特性是:预写日志记录。在写入数据块之前,必须先写入重做日志。当事务提交时,必须同时写入重做日志。为了保证数据的一致性,Oracle对重做日志使用直接IO。直接的IO跳过OS上文件系统的缓存层。然而,操作系统无法控制存储层。虽然跳过了文件系统缓存,但仍然可能会写入存储缓存。

一般存储都有缓存。为了提高性能,写操作在缓存上完成并返回给OS。我们称这种写操作为回写。以保证断电时缓存的内容不被存储。不会丢失,存储有电池保护。这些电池可以让存储在断电后继续工作一定的时间,保证缓存中的数据刷新到磁盘上不会丢失。与UPS不同的是,电池可以支持的时间很短,通常在30分钟之内,只要缓存中的数据写入即可。存储可以关闭写缓存。此时,所有的写操作都必须写入磁盘后才能返回。我们将此写操作称为 write through。当存储e 发现某些组件异常,存储会自动关闭写缓存。此时,写缓存将被关闭。性能会下降。

RAID卡还有一个缓存,通常是256M,也有电池保护。与存储不同的是,这种电池并不保证数据可以写入磁盘,而是为缓存提供电力。为了防止数据丢失,它通常可以持续几天。某些 RAID 卡上也有闪存缓存。断电后,可将缓存内容写入闪存缓存,保证数据不丢失。如果您的数据库不是存储而是放在普通PC的本地硬盘上,一定要确认主机中的RAID卡是否有电池。许多硬件提供商默认不配置电池。当然,RAID卡上的缓存也可以关闭。

磁盘上的缓存一般为16M-64M。很多存储厂商都明确表示缓存存储中的磁盘上已禁用。这是可以理解的。为了保证数据的可靠性,存储本身提供了非常大的缓存,相比之下,磁盘上的缓存就不再那么重要了。 SCSI命令中有一个FUA(强制单元访问)参数。设置该参数后,必须在磁盘上完成写操作才能返回,相当于禁用了磁盘的写缓存。虽然我没有验证信息,但我个人认为一旦磁盘连接到RAID控制器,写缓存就会被禁用。这也是为了数据的可靠性。我认为存储厂商应该考虑这个问题。

此时我们可以看到Oracle的一次物理IO经过一系列的缓存最终写入磁盘。虽然缓存可以提高性能,但也必须考虑掉电保护。数据一致性由Oracle数据库、操作系统保证em 和存储子系统。

至此,相信大家对《Oracle中Cache和Buffer有什么区别》有了更深入的了解,不妨来实践一下吧!这是网站。更多相关内容,您可以进入相关渠道进行查询。关注我们并继续学习!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > Oracle中Cache和Buffer有什么区别?

用户评论