百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

谈谈Oracle架构、IO特性和配置实践

mhr18 2024-10-01 12:25 18 浏览 0 评论

作者 晗狄Hardy 架构师技术联盟

又到周末了,刚好有点时间静静坐下来,梳理下Oracle相关的知识,就当是自己充电了。Oracle系统结构由内存结构、物理和逻辑结构等几个部分组成。其中,与阵列密切相关的物理结构包括数据文件、控制文件、联机重做日志文件和归档日志文件。如果是RAC集群,还包括Voting File和OCR。

OCR负责维护整个RAC和Clusterware资源的配置信息,包括的信息有节点成员、数据库、实例、服务和应用程序等。IO特征:RAC 启动和停止时访问,IO 大小为512B 和4KB,随机读写。

Voting Disk用于管理集群的节点成员身份,在出现“脑裂”时,仲裁哪个Partition获得集群的控制权,其他Partition必须从集群中剔除。IO特征:每一秒做一次IO 操作,数据块大小为512B 和256KB,访问位置固定。

数据文件是oracle存储的物理结构,由多个操作系统文件组成,存储了数据库的所有数据(包含表、索引等)。IO 特征:随机读写,绝大多数数据块的大小为8K,并可通过参数设置。

控制文件用于存放数据库物理结构信息(包含数据库名、联机重做日志的名字和位置等),是一个很小的二进制文件。打开或恢复数据库时都需要用到控制文件中的信息。IO 特征:负载很小,数据块大部分为16KB,少量4KB,极小范围内随机读写,读比例80%,注重可靠性。

联机重做日志文件,当用户提交事务后,由后台进程LGWR将用户提交的事务写入重做日志条目而形成的文件,它记录了所有数据的改变,当数据库数据丢失时可以用它来恢复数据库。IO 特征:OLTP 应用中联机重做日志的访问非常频繁,数据模型为多路小IO 顺序写,日志归档时,增加一路高负载的大IO 顺序读。

归档日志文件,在归档模式下,当重做日志填满后,由oracle后台进程ARCn将填满的重做日志复制到一个或多个路径下形成的文件,主要用于数据库的恢复。IO 特征:进行联机重做日志归档时,为顺序写;进行归档日志备份时,为顺序读。综上所述,Oracle数据库各文件的I/O特点总结如下。

OLTP应用的I/O特征

OLTP通常是指事务性非常高的在线系统,以小的事务以及小的查询为主,评估其系统的时候,一般看其每秒执行的Transaction以及Execute SQL的数量。在这样的系统中,单个数据库每秒处理的Transaction往往超过几百个,或者是几千个,Select语句的执行量每秒几千甚至几万个。典型的OLTP系统有电子商务系统、银行、证券等。OLTP应用的IO特征如下。

  • 每个I/O非常小,通常为2KB~8KB

  • 访问磁盘数据的位置非常随机

  • 至少30%的数据是随机写操作

  • 联机重做日志是写入非常频繁的顺序写

OLTP系统最容易出现瓶颈的地方除了服务器的CPU,就是存储系统IOPS处理能力。因为在OLTP环境中,硬盘物理读一般都是db file sequential read,即单个数据块物理读,但是这个读的次数非常频繁。如果频繁到硬盘子系统都不能承载其IOPS的时候,就会出现大的性能问题。

OLAP应用的I/O特征

OLAP系统,也称为DSS决策支持系统,就是我们说的数据仓库。在这样的系统中,绝大多数时候数据库上运行着的是报表作业,执行基本上是聚合类的SQL 操作,比如Group by,同时扫描非常多的行,一个查询将花费数小时,甚至数天,一次读取的数据量大;一般无数据修改,或者只有非常少的数据修改,OLAP应用的IO特征:

  • 单个I/O很大,典型的值为64KB~1MB

  • 读取操作为顺序读取

  • 当读取操作进行时,发生的写操作通常在临时表空间内

  • 平常对在线日志写入很少,除非在批量加载数据时

OLTP系统最容易出现瓶颈的地方是存储系统的带宽。阵列的带宽则往往取决于主机到阵列的前端网络和后端硬盘的个数,这个时候,阵列CACHE基本是没有效果的,数据库的读写类型基本上是db file scattered read与direct path read/write。

Oracle ASM配置建议

ASM是Oracle 10g引入的新特性,在Oracle 11g中进一步强化。作为专门为Oralce数据库文件创建的集成文件系统和卷管理器,ASM提供了媲美裸设备的性能,同时又具备类似文件系统的易管理性,实现高效灵活的数据库存储及文件管理。

Oracle 数据库ASM结构

ASM在linux平台的架构如图所示,阵列的一个LUN映射给操作系统,会形成一个系统盘,一个系统盘分区对应一个ASM Disk。Oracle建议一个系统盘只创建一个硬盘分区。

数据库配置建议

在创建ASM Diskgroup时,需要设置必要的冗余级别。冗余级别共有三种:EXTERNAL, Oracle不做镜像处理,依赖外部存储冗余;NORMAL实现数据2路镜像;HIGH实现数据3路镜像。对于Voting Disk,NORMAL是3路镜像,HIGH是5路镜像,同时Oracle建议Voting Disk为奇数个。

为了方便文件管理和提高数据库性能,建议按文件类型存放在不同的ASM磁盘组中。AU是ASM磁盘组的最小存储单位,默认值1M,对于顺序大IO业务,Oracle建议AU大小为4M,此时应将操作系统I/O设置为最大。Oracle临时表空间主要用来做查询和存放一些缓冲区数据,对查询的中间结果进行排序。如果是存在大量group by查询的系统,建议为临时表空间创建单独的ASM Diskgroup,保证足够的硬盘空间。

存储配置建议

Oracle ASM Diskgroup建议使用多个LUN,能提高硬盘利用率和加大带宽。但是,如果ASM Diskgroup中Disk都是来自同一个阵列的同一个RAID组,且该RAID组为FC、SAS、或SSD盘,则建议每个ASM磁盘组规划两个ASM Disk,双控负载均衡;如果是SATA盘,则建议规划一个ASM Disk。如果ASM Diskgroup中Disk是来自多个RAID组,建议ASM Disk个数与RAID组个数对应,一个RAID组只创建一个LUN,并对应一个ASM Disk,多控制器间负载均衡。

AU是ASM最基本的存储空间分配单位,在设置LUN的分条单元时,应该保证分条大小与ASM的AU大小一致。

OCR 、数据文件、控制文件都是随机小IO,Oracle建议用RAID10,可以有效的避免热点数据的产生,同时能在硬盘故障期间提供更佳的性能,这几种文件读写都比较频繁,容量小且对性能要求高,建议不采用SATA盘。归档文件数据量大,且为顺序大IO,从成本考虑,建议用SATA盘RAID6。

联机重做日志文件归档和归档文件备份时,都是1M的顺序IO,建议预取策略设置为固定预取1M。

SSD盘优化读工作负载

列阵列提供了多种读预取功能,对于读请求来说,请求的数据如果保留在CACHE中,会立即得到服务,而不会产生额外的磁盘I/O。直接从CACHE中获得服务,而未造成硬盘访问的读取操作,称为读命中。如果读操作未命中,请求的数据不在CACHE中,那么CACHE必须从硬盘上检索出这些数据。由于传统硬盘固有的机械延迟,读操作未命中将造成 I/O 响应时间增加。

对于顺序读工作负载,CACHE读命中率较高,它们获得服务的速度已经达到内存访问速度,因此将这类工作负载部署在SSD盘,性能不会明显提高。因此,SSD盘适合用来部署CACHE命中率较低的随机小I/O读负载。数据库中随机读取的工作负载有以下两种:

  • OLTP应用的数据文件。如果SSD盘容量允许,建议将数据文件都放在SSD盘,提升数据库性能。但是,通常数据库的数据文件都比较大,而SSD盘的容量有限,无法放下所有的数据文件,建议将选取热点表空间放在SSD盘。如果SSD盘容量还是无法满足热点表空间需求,建议只将热点索引放在SSD盘。

  • OLAP应用当用户或查询并发很高时,对于存储系统来说,这样的数据文件也是随机负载。同时如果SSD容量允许,建议将数据库的临时表空间放在 SSD 上。这样可以帮助缩短复杂的 “group by” 或 “order by” 查询所需的排序时间。

SSD盘优化写工作负载

阵列的Cache针对写业务,提供回写和透写功能。回写会进行IO合并,即把多个主机写请求归一为一个内部写请求,从而减少访问硬盘的次数,并且这个内部写请求足够大,往往是条带的整数倍。所以,在回写情况下,写请求总是写入缓存,不会造成物理磁盘存取而引起的延迟。

Oracle数据库联机重做日志文件,要求必须每3秒或在事务提交时写入到磁盘,写入频繁,且对响应时间的要求很高。所以,联机重做日志文件的LUN必须选择回写功能,确保日志写操作直接从阵列缓存获得服务来确保响应时间。因此,联机重做日志文件未必需要放在SSD盘上。但是,如果数据库受累于大量的提交时间和较长的日志 I/O 延时,那么将联机重做日志放在SSD 将有所帮助。

相关推荐

一文带您了解数据库的行列之争:行式与列式存储的异同

数据库存储格式是数据库管理系统中一个至关重要的方面,它直接影响到数据的组织和检索效率。在数据库中,有两种主要的存储格式,即行式存储和列式存储。这两者采用截然不同的方法来组织和存储数据,各自具有一系列优...

NL2SQL(三)开源项目怎么选:talk is cheap, show me the code!

老规矩,先看效果下面的demo来自试用的SuperSonic,将会在下面详细介绍:大模型时代Text-to-SQL特点随着基于LLM技术的发展,RAG/AIAgent/Fine...

JDK25长期支持版九月降临:18项王炸功能全解析

Java要放大招啦!9月份推出的JDK25长期支持版已经锁定18个超能力,从稳定值到结构化并发,还有Linux系统下的"预知未来"性能分析!下面我用打游戏的术语给你们掰扯明白:1、飞...

OceanBase 推出单机版 高度兼容MySQL和Oracle

【环球网科技综合报道】3月27日,独立数据库厂商OceanBase正式发布单机版产品。据悉,这一产品基于自主研发的单机分布式一体化架构设计,具备极简数据库架构和高度兼容性,为中小规模业务提供兼具性能与...

黄远邦:应对7月1日闰秒对Oracle数据库影响

由于今年7月1日全世界会多出一秒,这可能对时间敏感的IT系统造成较大影响。中亦科技数据库团队对此问题做了深入的研究,并对用户系统提出了相应的解决方法及建议。中亦科技数据库产品总监黄远邦认为,闰秒调整会...

MySQL数据库密码忘记了,怎么办?(mysql 数据库密码)

#头条创作挑战赛#MySQL数据库密码忘记了且没有其他可以修改账号密码的账户时怎么办呢?登录MySQL,密码输入错误/*密码错误,报如下错误*/[root@TESTDB~]#mysql-u...

Chinese AI Talent in Spotlight as Nvidia and Meta Escalate Talent War

OntherightisBanghuaZhu,ChiefResearchScientistatNVIDIATMTPOST--SiliconValley’stoptech...

用Cursor开启JAVA+AI生涯(javascirpt怎么开启)

Cursor是基于VSCode开发的一款编辑器,支持多种语言的开发编辑。与传统的开发工具相比,它有多种优势:与AI无缝集成,响应速度快,占用内存小。但很多同学在"起步"过程中遇到了...

毕业十年了,自从做了开发用了很多软件,但距离写开发工具还很远

办公系统类:办公软件Word、Excel、PowerPoint三大必备技能+腾讯/金山在线文档解压缩操作:7-zip/winrar文件文本处理:Notepad++(文本编辑器正则表达式超级好...

盘点Java中最没用的知识⑤:这3个老古董你还在代码里“考古”?

一、Stack类:“继承Vector”的历史bug,为何成了性能拖油瓶?你是不是在学Java集合时,老师说过“栈结构用Stack类”?是不是在老代码里见过"newStack<>(...

Gemini 2.5 Pro 0506发布,编程最强大模型, 碾压 Claude3.7 sonnent

一、Gemini2.5Pro(I/Oedition)发布1、为何叫I/Oedition?谷歌史上最强编程模型Gemini2.5Pro(I/Oedition)发布,具体型号是Gemin...

如何让无聊变得有趣(附本人大量美图)

文/图:金冬成在这条长300公里的公路上,我已经来回往返了无数次。3小时车程,一个人,想想都是多么无聊的一件事。其实,人生道路上,类似这种无聊的事情有很多很多。无聊的事情、枯燥的工作,往往让我们容易失...

Oracle 推出 Java 24,增强 AI 支持和后量子加密

导读:Oracle宣布正式发布Java24,该语言增加了几个新功能,例如StreamGatherersAPI和Class-FileAPI的可用性,以及专门为AI推理和量子安全设计...

公司ERP突然变慢?“索引重建”这颗“药”可不能随便吃!

各位老板、IT小哥、财务小姐姐,有没有遇到过公司ERP系统突然卡顿得像“老爷车”,点个按钮半天没反应,急得直跺脚?这时候,可能有人会跳出来说:“我知道,重建一下数据库索引就好了!”听起来像个“神操作”...

基于Java实现,支持在线发布API接口读取数据库,有哪些工具?

基于java实现,不需要编辑就能发布api接口的,有哪些工具、平台?还能一键发布、快速授权和开放提供给第三方请求调用接口的解决方案。架构方案设计:以下是一些基于Java实现的无需编辑或只需少量编辑...

取消回复欢迎 发表评论: