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

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

sinye56 2024-10-03 00:40 11 浏览 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 将有所帮助。

相关推荐

linux 查看当前应用内存状况,以及内存参数含义

1、查看进程号ps-ef|greptomcat2、查看当前内存分配,200ms打印一次jstat-gc进程号2001jstat-gc344802001S0CS1C...

如何显示 Linux 系统上的可用内存?这几个命令很好用!

在Linux系统中,了解可用内存是优化系统性能、故障排查以及资源管理的重要一环。本文将详细介绍如何在Linux系统上显示可用内存,包括多种方法和工具的使用。在讨论可用内存之前,我们需要了解一些...

Linux 下查看内存使用情况方法总结

Q:我想监视Linux系统的内存使用情况,在Linux下有哪些视图或者命令行工具可用呢?在做Linux系统优化的时候,物理内存是其中最重要的一方面。自然的,Linux也提供了非常多的方法来监控宝贵的内...

2、linux命令-用户管理

linux命令-用户管理用户切换[root@eric~]#sueric#切换到用户eric[eric@ericroot]$[eric@ericroot]$su#切换到rootPas...

Centos 7 进入单用户模式详解

1、开机在启动菜单按e进入编辑模式找到linux16行,在最后添加init=/bin/sh编辑完后,按ctrl+x退出2、进单用户模式后,使用passwd修改密码,提示以下错误:passwd:Aut...

每日一个Linux命令解析——newusers

newusers:在Linux系统中,newusers是一个用于批量创建用户的命令。它从一个文件中读取多行用户信息,每行描述一个用户的详细信息,并根据这些信息创建多个用户或对现有用户进行批量修改。一...

openEuler操作系统管理员指南:管理用户与用户组

在Linux中,每个普通用户都有一个账户,包括用户名、密码和主目录等信息。除此之外,还有一些系统本身创建的特殊用户,它们具有特殊的意义,其中最重要的是管理员账户,默认用户名是root。同时Linux也...

Linux用户管理

1、用户信息文件/etc/passwdroot:x:0:0:root:/root:/bin/bash第一列:用户名第二列:密码位第三列:用户ID0超级用户UID。如果用户UID...

centos7基础-用户、组、权限管理

用户和组(1)用户、组、家目录的概念linux系统支持多用户,除了管理员,其他用户一般不应该使用root,而是应该向管理员申请一个账号。组类似于角色,系统可以通过组对有共性的用户进行统一管理。每个用户...

LINUX基础 ----------组及用户的概念

在Linux中,用户和组都是非常重要的概念,可以控制文件访问权限和资源的管理。用户是标识一个进程、应用程序或系统管理员的账号,Linux中每个用户用一个用户ID(UID)来标识。对于一个...

从零入门Linux(四)用户与权限管理

在Linux系统中,用户和权限管理是系统安全的重要组成部分。通过合理配置用户和权限,可以确保系统的安全性和资源的合理分配。以下是一些与用户和权限管理相关的常用命令和概念。1.用户管理1.1添加...

如何在 Linux 中管理用户?

在Linux系统中,用户是系统资源的主要使用者,每个用户都有一个唯一的标识符(用户ID)。为了更好地组织和管理用户,Linux还引入了用户组的概念。用户组是用户的集合,有助于更有效地分配权限和资...

在 Linux 中将用户添加到特定组的四种方法

在Linux多用户操作系统中,用户组管理是系统安全架构的基石。通过合理的组权限分配,管理员可以实现:精确控制文件访问权限(chmod775project/)简化批量用户权限管理(setfacl-...

我不是网管 - 如何在Ubuntu Linux下创建sudo用户

Sudo用户是Linux系统的普通用户,具有一定的管理权限,可以对系统执行管理任务。在Linux中,root是超级用户,拥有完全的管理权限,但不建议将root凭证授予其他用户或作为r...

Linux创建普通用户,为密钥方式登录做准备

Hi,我是聪慧苹果8,就是江湖上人见人爱、花见花开,土到掉榨的Linux爱好者,一起学习吧!上一篇关于SSH安全加固的文字,有网友点评通过密钥登录更加安全,先创建一个普通用户,拒绝直接使用密码登录,这...

取消回复欢迎 发表评论: