Oracle Online Redo Log能否放在Flash闪存卡上?

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

Flash 闪存卡的性能远超SAS 盘,所以在数据库中使用广泛。 但是online redo log 是否应该存放在闪存卡上一直是有争议的话题。今天由DBA+社群合肥发起人戴明明来谈一谈他通过理论和实际的实验去测试这个问题。

 

专家简介

 
 

 


戴明明

DBA+社群合肥发起人

 

Oracle ACE Associate,中国 ORACLE 用户组(ACOUG) 核心成员,中国浙江应用中间件与数据库用户组成员。 超过7年的DBA经验,在Oracle 高可用性方面有一定的经验积累,擅长Oracle数据库诊断、性能调优,热衷于Oracle 技术的研究与分享。从2014年开始一直在研究基于PCIe 闪存卡的数据库解决方案。

 

 

 

 

1
Oracle 官方的建议

 

Alternative and Specialised Options as to How to Avoid Waiting for Redo Log Synchronization (文档 ID 857576.1)

 

在这篇MOS的文章中,提到如下一句话:

Also putting the SLOG on an SSD (Solid State Disk) will reduce redo log latency further.  This will help improve the performance of synchronous writes.

 

 

Oracle 建议把redo log 放在SSD上,这样可以减少延时,提升同步写的性能。

 

Troubleshooting: 'Log file sync' Waits (文档 ID 1376916.1)

 

在这篇MOS文章中,Oracle 的建议如下。

 

If the proportion of the 'log file sync' time spent on 'log file parallel write' times is high, then most of the wait time is due to IO (waiting for the redo to be written). The performance of  LGWR in terms of IO should be examined. As a rule of thumb, an average time for 'log file parallel write' over 20 milliseconds suggests a problem with IO subsystem.

 

 

Recommendations

 

  • Work with the system administrator to examine the filesystems where the redologs are located with a view to improving the performance of IO.

 

  • Do not place redo logfiles on a RAID configuration which requires the calculation of parity, such as RAID-5 or RAID-6.

 

  • Do not put redo logs on Solid State Disk (SSD)

     

    Although generally, Solid State Disks write performance is good on average, they may endure write peaks which will highly increase waits on 'log file sync'.

     

    (Exception to this would be for Engineered Systems (Exadata, SuperCluster and Oracle Database Appliance) which have been optimized to use SSDs for REDO)

 

  • Look for other processes that may be writing to that same location and ensure that the disks have sufficient bandwidth to cope with the required capacity. If they don't then move the activity or the redo.

 

  • Ensure that the log_buffer is not too big. A very large log_buffer can have an adverse affect  as waits will be longer when flushes occur. When the buffer fills up, it has to write all the data into the redo log file and the LGWR will wait until the last I/O is completed.

 

这里Oracle 不建议把redo log 放在SSD上,但也补充到,Exadata 系统的redo 是存放在SSD上的。

 

MOS上也提到如下一句:

 

Although generally, Solid State Disks write performance is good on average, they may endure write peaks which will highly increase waits on 'log file sync'.

 

 

Oracle 的意思是说SSD 写性能很好,但是可能某个时刻出现写高峰,从而导致更高的log file sync。 注意这里是may,是可能。

 

Flasn 闪存卡使用的Flash 介质有三种型号:SLC,MLC,TLC。  

 

民用级的SSD 采用的是MLC和TLC,而采用TLC,容量大,因受民用价钱的约束,民用级的SSD, OP值都比较低,一般在10%以内,当满盘写之后,性能会下降,并且写放大系数也会比企业级的SSD高,在这种情况下,确实可能出现oracle 说的may的可能性。

 

但企业级的PCIE Flash采用的是MLC,OP值可以达到27%,OP值高,写放大系数可以控制的更低,大的OP可以给闪存卡提供更好的性能。所以在这种情况下,不会出现oracle 说的write peaks。

 

 

2
4K Online Redo Log

 

在MOS 中,Troubleshooting: 'Log file sync' Waits (文档 ID 1376916.1)。 Oracle 提到XD 上redo log 是放在SSD盘的。然后有另外一篇MOS文章:

 

Using 4k Redo Logs on Flash and SSD-based Storage (文档 ID 1681266.1)

 

 

2.1扇区大小

 

 

现在的存储都支持4k的扇区,而上一代存储多采用512 bytes的扇区。 扇区即每次最小IO的大小。

 

4k 扇区有两种工作模式:native mode 和 emulation mode。

 

1)Native mode,即4k模式,物理和逻辑的block大小一样,都是4096 bytes。 但native mode 的缺点是需要操作系统和软件(如DB)的支持。  Oracle 从11gR2 之后,就支持4k IO操作,操作系统方面, Linux 内核在2.6.32 之后都支持4k IO操作。

 

2)emulation mode:也称512e。 在该模式下,物理块还是4k,但逻辑块是512 bytes。 这种模式主要是为了向后兼容。 但在该模式下,底层物理还是4k进行操作,所以就会导致Partial I/O 和4k 对齐的问题。

 

在emulation mode下,每次IO操作大小是512 bytes,底层存储平台的IO操作必须是4k大小,如果要读512 bytes的数据,实际需要读4k,是原来的8倍,这个就是partial IO。 另外在512 bytes 写的情况下,实际也是先读4k 的物理block,然后更新其中的512 bytes的数据,在把4k 写回去。 所以在emulation mode下,增加的工作会增加延时,降低性能。

 

在Oracle 数据库的文件中,默认情况下,datafile的block 是8KB,控制文件是16KB,所以都没有partial IO的问题,唯有online redo log,默认是512 bytes,存在partial IO的问题。

 

 

2.2Online Redo Logs

 

 

默认情况下,Oracle online redo log file 是512 bytes 的block size。 从Oracle 11gR2 开始,可以修改redo log 的Blocksize 为512,1024,4096。

 

如:alter database add logfile group 5 size 100m blocksize 4096;

 

当然,前提条件是底层的存储支持4k 扇区。 对于native mode 的存储,修改redo log block size 没有问题。 如果是emulation mode存储,物理上4k扇区,但逻辑上是512 bytes 扇区,那么修改就可能会触发如下错误:

 

ORA-01378: The logical block size (4096) of file +DATA is not compatible with the disk sector size (media sector size is 512 and host sector size is 512)

 

 

只要确认底层存储物理是4k的扇区,那么可以设置_disk_sector_size_override参数为true,来覆盖扇区的设置。该参数支持动态修改:

 

ALTER SYSTEM SET “_DISK_SECTOR_SIZE_OVERRIDE”=”TRUE”;

 

 

3
实际测试
 

 

 

3.1测试环境

 

 

 

测试工具: HAMMER DB

测试数据量: 5000个warehouse

--数据库: 12.1.0.2

 

 

测试用的PDB是ANIQNG。

 

 

3.2Online redo log 存放在PCIE 闪存卡

 

 

3.2.1 查看online redo log

 

 

3.2.2 先创建一个快照

 

SQL> execute dbms_workload_repository.create_snapshot();

 

3.2.3 TPCC 测试

 

 

 

 

在创建一个AWR 快照:

 

SQL> execute dbms_workload_repository.create_snapshot();

PL/SQL procedure successfully completed.

 

生成AWR 报告:

SQL>@?/rdbms/admin/awrrpt.sql

 

3.2.4 AWR 数据

 

我们这里只看2个部分:Load Profile 和 Top 10 Foreground Events by Total Wait Time

 

 

 

 

3.3Online redo log 存放在SAS硬盘

 

 

3.3.1 移动online redo log 到SAS盘

 

 

3.3.2 先创建一个快照:

 

SQL> execute dbms_workload_repository.create_snapshot();

 

3.3.3 TPCC 测试

 

在之前同等的20个virtual 用户下,根本无法压到最大值:

 

 

修改成120个virtual user:

 

 

 

在创建一个AWR 快照:

 

SQL> execute dbms_workload_repository.create_snapshot();

PL/SQL procedure successfully completed.

SQL> @?/rdbms/admin/awrrpt.sql

 

3.3.4 AWR 数据

 

 

 

 

3.4使用4k 的Redo log 并存放在PCIE 闪存卡

 

 

3.4.1 创建4k的online redo log

 

把redo log 迁移到PCIE SSD上,然后使用4k的blocksize。

 

 

我们这里确实是4k的sector size。

 

 

3.4.2 先创建一个快照:

 

SQL> execute dbms_workload_repository.create_snapshot();

 

3.4.3TPCC 测试

 

使用20个virtual 进行压测:

 

 

 

SQL> execute dbms_workload_repository.create_snapshot();

PL/SQL procedure successfully completed.

SQL> @?/rdbms/admin/awrrpt.sql

 

3.4.4 AWR 数据

 

 

 

4
三种测试方案的数据对比

 

测试压力的方法,就是把系统的CPU 压倒100%,看最大的TPM,最终对比数据如下表:

 

从这个数据对比,可以看出,在使用SSD的情况下,log file sync占DB time的比率下降非常明显,从63.6% 到18.5%,性能也有明显的提升。 并且从测试结果看,在使用SAS 盘的情况下,TPM 波动更加明显,这个可以直接从Hammer DB的测试截图看出。

 

总结:根据实测数据,在Oracle 数据库下,使用4k 的online redo log 加企业级的PCIE Flash闪存卡可以明显提升系统的性能,而不用担心使用PCIE Flash对性能的不利影响。


本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2015-12-09

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
【赵渝强老师】Oracle的控制文件与归档日志文件
|
1月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
2月前
|
SQL 存储 关系型数据库
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
老架构师尼恩在其读者交流群中分享了关于 MySQL 中 redo log、undo log 和 binlog 的面试题及其答案。这些问题涵盖了事务的 ACID 特性、日志的一致性问题、SQL 语句的执行流程等。尼恩详细解释了这些日志的作用、所在架构层级、日志形式、缓存机制以及写文件方式等内容。他还提供了多个面试题的详细解答,帮助读者系统化地掌握这些知识点,提升面试表现。此外,尼恩还推荐了《尼恩Java面试宝典PDF》和其他技术圣经系列PDF,帮助读者进一步巩固知识,实现“offer自由”。
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
|
2月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1684 14
|
1月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
|
2月前
|
存储 关系型数据库 MySQL
MySQL中的Redo Log、Undo Log和Binlog:深入解析
【10月更文挑战第21天】在数据库管理系统中,日志是保障数据一致性和完整性的关键机制。MySQL作为一种广泛使用的关系型数据库管理系统,提供了多种日志类型来满足不同的需求。本文将详细介绍MySQL中的Redo Log、Undo Log和Binlog,从背景、业务场景、功能、底层实现原理、使用措施等方面进行详细分析,并通过Java代码示例展示如何与这些日志进行交互。
189 0
|
3月前
|
存储 缓存 关系型数据库
redo log 原理解析
redo log 原理解析
50 0
redo log 原理解析
|
4月前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
197 0
|
4月前
|
存储 关系型数据库 MySQL
深入MySQL:事务日志redo log详解与实践
【8月更文挑战第24天】在MySQL的InnoDB存储引擎中,为确保事务的持久性和数据一致性,采用了redo log(重做日志)机制。redo log记录了所有数据修改,在系统崩溃后可通过它恢复未完成的事务。它由内存中的redo log buffer和磁盘上的redo log file组成。事务修改先写入buffer,再异步刷新至磁盘,最后提交事务。若系统崩溃,InnoDB通过redo log重放已提交事务并利用undo log回滚未提交事务,确保数据完整。理解redo log工作流程有助于优化数据库性能和确保数据安全。
650 0
|
1月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
267 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板

推荐镜像

更多