实战:如何掌握Oracle和业务IO知识
实战:如何掌握Oracle和业务IO知识
今天,笔者打算梳理下Oracle架构相关的知识,让读者快速全面掌握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应用的IO特征
OLTP通常是指事务性非常高的在线系统,以小的事务以及小的查询为主,评估其系统的时候,一般看其每秒执行的Transaction以及Execute SQL的数量。在这样的系统中,单个数据库每秒处理的Transaction往往超过几百个,或者是几千个,Select语句的执行量每秒几千甚至几万个。典型的OLTP系统有电子商务系统、银行、证券等。OLTP应用的IO特征如下。
每个I/O非常小,通常为2KB~8KB
访问磁盘数据的位置非常随机
至少30%的数据是随机写操作
联机重做日志是写入非常频繁的顺序写
OLTP系统最容易出现瓶颈的地方除了服务器的CPU,就是存储系统IOPS处理能力。因为在OLTP环境中,硬盘物理读一般都是db file sequential read,即单个数据块物理读,但是这个读的次数非常频繁。如果频繁到硬盘子系统都不能承载其IOPS的时候,就会出现大的性能问题。
OLAP应用的IO特征
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 将有所帮助。