如何进一步提高Oracle lgwr的写性能?

今天在我们的一个项目中,客户非常关系Oracle的log file sync、db file parallel write性能。

由于我们的分布式存储zdatax已经是nvme了,因此db file parallel write的性能足够好了,平均等待时间也就0.13ms。

然后log file sync 确高达0.6ms,实际上大家都知道0.6ms也是非常非常的低了。无奈,客户要求很高,那么怎么办?

通过awr报告我发现很大一部分的等待消耗在了log file parallel write上,如何能降低这个等待,那么log file sync是不是也降低了呢?

这里想到一个测试优化的方法,以及我的测试过程和结论,供大家参考!

+++test 1alter system set "_redo_write_coalesce_all_threshold"=1048576   scope=spfile sid='*';
alter system set "_redo_write_coalesce_slave_threshold"=1048576 scope=spfile sid='*';
alter system set "_redo_write_sync_single_io"=true scope=spfile sid='*';--session 1
SQL> startup force
ORACLE instance started.Total System Global Area 4294965376 bytes
Fixed Size                  8947840 bytes
Variable Size            1811939328 bytes
Database Buffers         2147483648 bytes
Redo Buffers              326594560 bytes
Database mounted.
Database opened.
SQL> !host ps -ef|grep lgwr
/bin/bash: host: command not foundSQL> host ps -ef|grep lgwr
oracle   30829     1  0 20:32 ?        00:00:00 ora_lgwr_ora19c
oracle   31428 16274  0 20:32 pts/2    00:00:00 /bin/bash -c ps -ef|grep lgwr
oracle   31430 31428  0 20:32 pts/2    00:00:00 grep lgwrSQL> @test_lgwr.sqlTable dropped.
。。。。。。--session 2
oracle@oradb1:/home/oracle $sqlplus "/as sysdba" SQL*Plus: Release 19.0.0.0.0 - Production on Tue Nov 19 20:33:05 2024
Version 19.23.0.0.0Copyright (c) 1982, 2023, Oracle.  All rights reserved.Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.23.0.0.0SQL> oradebug setospid 30829
Oracle pid: 21, Unix process pid: 30829, image: oracle@oradb1 (LGWR)
SQL> oradebug event 10046 trace name context forever,level 12
Statement processed.
SQL> oradebug tracefile_name
/u01/app/oracle/diag/rdbms/ora19c/ora19c/trace/ora19c_lgwr_30829.trc
SQL> oradebug event 10046 trace name context off
Statement processed.
SQL> oracle@oradb1:/tmp $cat /u01/app/oracle/diag/rdbms/ora19c/ora19c/trace/ora19c_lgwr_30829.trc|grep "log file single write" | awk '{sum+=$8} END {print sum}'
25441
oracle@oradb1:/tmp $cat /u01/app/oracle/diag/rdbms/ora19c/ora19c/trace/ora19c_lgwr_30829.trc|grep "log file parallel write" | awk '{sum+=$8} END {print sum}'
2075230
oracle@oradb1:/tmp $+++test 2alter system set "_redo_write_coalesce_all_threshold"=1048576   scope=spfile sid='*';
alter system set "_redo_write_coalesce_slave_threshold"=1048576 scope=spfile sid='*';
alter system set "_redo_write_sync_single_io"=true scope=spfile sid='*';oracle@oradb1:/tmp $cat /u01/app/oracle/diag/rdbms/ora19c/ora19c/trace/ora19c_lgwr_32733.trc|grep "log file single write" | awk '{sum+=$8} END {print sum}'
2726
oracle@oradb1:/tmp $cat /u01/app/oracle/diag/rdbms/ora19c/ora19c/trace/ora19c_lgwr_32733.trc|grep "log file parallel write" | awk '{sum+=$8} END {print sum}'
1544500
oracle@oradb1:/tmp $+++test 3alter system set "_redo_write_coalesce_all_threshold"=10485760   scope=spfile sid='*';
alter system set "_redo_write_coalesce_slave_threshold"=10485760 scope=spfile sid='*';
alter system set "_redo_write_sync_single_io"=true scope=spfile sid='*';oracle@oradb1:/tmp $cat /u01/app/oracle/diag/rdbms/ora19c/ora19c/trace/ora19c_lgwr_2429.trc|grep "log file single write" | awk '{sum+=$8} END {print sum}'
7907
oracle@oradb1:/tmp $cat /u01/app/oracle/diag/rdbms/ora19c/ora19c/trace/ora19c_lgwr_2429.trc|grep "log file parallel write" | awk '{sum+=$8} END {print sum}'
1403895
oracle@oradb1:/tmp $+++test 4alter system set "_redo_write_coalesce_all_threshold"=10485760   scope=spfile sid='*';
alter system set "_redo_write_coalesce_slave_threshold"=10485760 scope=spfile sid='*';
alter system set "_redo_write_sync_single_io"=false scope=spfile sid='*';oracle@oradb1:/tmp $ cat /u01/app/oracle/diag/rdbms/ora19c/ora19c/trace/ora19c_lgwr_5665.trc|grep "log file single write" | awk '{sum+=$8} END {print sum}'
25678
oracle@oradb1:/tmp $cat /u01/app/oracle/diag/rdbms/ora19c/ora19c/trace/ora19c_lgwr_5665.trc|grep "log file parallel write" | awk '{sum+=$8} END {print sum}'
888966
oracle@oradb1:/tmp $++++test 5alter system reset "_redo_write_coalesce_all_threshold"   scope=spfile sid='*';
alter system reset "_redo_write_coalesce_slave_threshold" scope=spfile sid='*';
alter system set "_redo_write_sync_single_io"=true scope=spfile sid='*';oracle@oradb1:/tmp $cat /u01/app/oracle/diag/rdbms/ora19c/ora19c/trace/ora19c_lgwr_7680.trc|grep "log file single write" | awk '{sum+=$8} END {print sum}'
47659
oracle@oradb1:/tmp $cat /u01/app/oracle/diag/rdbms/ora19c/ora19c/trace/ora19c_lgwr_7680.trc|grep  "log file parallel write" | awk '{sum+=$8} END {print sum}'
2105721
oracle@oradb1:/tmp $其中sql脚本如下:
oracle@oradb1:/home/oracle $                                 cat test_lgwr.sql 
drop table test1119;
alter system switch logfile;
create table test1119 as select * from dba_objects;
insert into test1119 select * from test1119;
commit;
insert into test1119  select * from dba_objects where rownum <100;
commit;
insert into test1119  select * from dba_objects where rownum <100;
commit;
insert into test1119  select * from dba_objects where rownum <100;
commit;
insert into test1119  select * from dba_objects where rownum <100;
commit;
insert into test1119  select * from dba_objects where rownum <100;
commit;
insert into test1119  select * from dba_objects where rownum <100;
commit;
insert into test1119  select * from dba_objects where rownum <100;
commit;
insert into test1119  select * from dba_objects where rownum <100;
commit;
insert into test1119  select * from dba_objects where rownum <100;
commit;
insert into test1119  select * from dba_objects where rownum <100;
commit;
insert into test1119  select * from dba_objects where rownum <100;
commit;
insert into test1119 select * from test1119;
commit;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;

针对上述4个场景的测试数据进行一下汇总:

场景1: 单块写 25441 多块写 2075230 合计时间 2100671

场景2: 单块写 2726 多块写 1544500 合计时间 1547226

场景3: 单块写 7907 多块写 1403895 合计时间 1411802

场景4: 单块写 25678 多块写 888966 合计时间 914644

场景5: 单块写 47659 多块写 2105721 合计时间 2153380

从测试来看,_redo_write_sync_single_io参数的影响微乎其微,可忽略不计。

而_redo_write_coalesce_all_threshold和_redo_write_coalesce_slave_threshold的参数如果设置为10m和保持默认值的情况进行对比。 我们可以发现lgwr写消耗时间差了几乎1倍。由此可见,这是一个提升log file parlalel write的重要手段。

通过降低log file parallel write的等待,进而降低log file sync的等待。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

加入DataBase Fans付费群,您能有哪些收获? 

1、大家可与顶级数据库专家互动,问题范围不限于Oracle,MySQL,openGauss等。
      -群内有全国Oracle顶级恢复专家,sql优化专家,MySQL源码专家,都是实战派
2、 入群可以获得顶级专家的收藏脚本。
3、 可提供原厂资料文档代查【包括xxxx账号,你们懂的】
4、 不定期组织直播案例分析【包括但不限于Oracle、MySQL、国产xxx数据库】
5、 付费群:365人/年 【2025/1/1 - 2025/12/31】

想加入的朋友, 加v咨询 Roger_database

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/502360.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot中实现拦截器和过滤器

【SpringBoot中实现过滤器和拦截器】 1.过滤器和拦截器简述 过滤器Filter和拦截器Interceptor&#xff0c;在功能方面很类似&#xff0c;但在具体实现方面差距还是比较大的。 2.过滤器的配置 2.1 自定义过滤器&#xff0c;实现Filter接口(SpringBoot 3.0 开始&#xff0c;jak…

基于LightGBM的集成学习算法

目录 一、LightGBM基本原理1.1 基于直方图的决策树算法1.1.1 连续变量分箱 1.2 互斥特征捆绑1.2.1 互斥特征捆绑计算流程1.2.2 互斥特征捆绑算法基本原理1.2.2.1 冲突比例&#xff08;conflict_rate&#xff09;1.2.2.2 图着色1.2.2.3 特征捆绑 1.3 基于梯度的单边采样&#xf…

trendFinder - 利用 AI 掌握社交媒体上的热门话题

1600 Stars 177 Forks 7 Issues 2 贡献者 MIT License Javascript 语言 代码: https://github.com/ericciarla/trendFinder 更多AI开源软件&#xff1a;AI开源 - 小众AI Trend Finder 收集并分析来自关键影响者的帖子&#xff0c;然后在检测到新趋势或产品发布时发送 Slack 通知…

Level DB --- BloomFilterPolicy

BloomFilterPolicy是Level DB中重要的数据过滤模块&#xff0c;它主要用来先过滤在Block中不存在的key&#xff0c;减少Block的搜索计算量。 Bloom Filter 从原理上来讲Bloom FIlter相对来说原理还是比较简单的&#xff0c;将一个key经过一次&#xff08;组合&#xff09;ha…

ELK 使用教程采集系统日志 Elasticsearch、Logstash、Kibana

前言 你知道对于一个系统的上线考察&#xff0c;必备的几样东西是什么吗&#xff1f;其实这也是面试中考察求职者&#xff0c;是否真的做过系统开发和上线的必备问题。包括&#xff1a;服务治理(熔断/限流) (opens new window)、监控 (opens new window)和日志&#xff0c;如果…

【MySQL】九、表的内外连接

文章目录 前言Ⅰ. 内连接案例&#xff1a;显示SMITH的名字和部门名称 Ⅱ. 外连接1、左外连接案例&#xff1a;查询所有学生的成绩&#xff0c;如果这个学生没有成绩&#xff0c;也要将学生的个人信息显示出来 2、右外连接案例&#xff1a;对stu表和exam表联合查询&#xff0c;把…

机器学习周报-ModernTCN文献阅读

文章目录 摘要Abstract 0 提升有效感受野&#xff08;ERF&#xff09;1 相关知识1.1 标准卷积1.2 深度分离卷积&#xff08;Depthwise Convolution&#xff0c;DWConv&#xff09;1.3 逐点卷积&#xff08;Pointwise Convolution&#xff0c;PWConv&#xff09;1.4 组卷积(Grou…

计算机的错误计算(二百零二)

摘要 利用三个大模型化简计算 前面分式的分子为零&#xff0c;因此正确值是后面的数值300.09...321 . 让三个大模型计算&#xff0c;它们均没有看出分式的分子中被减数与减数是相等的。因此&#xff0c;均得出了错误结果。 例1. 化简计算摘要中算式的值。 下面是一个大模型的…

2025-01-04 Unity插件 YodaSheet1 —— 插件介绍

文章目录 1 介绍2 工作原理2.1 ScriptableObject -> YadeSheetData2.2 YadeDatabase 存储多个 YadeSheetData 3 用途4 缺点5 推荐 1 介绍 ​ Yade 提供类似于 Excel 或者 Google Sheets 的表格编辑器&#xff0c;可以轻松地在 Unity 编辑器中 编辑&#xff0c;搜索&#xf…

connect to host github.com port 22: Connection timed out 的解决方法

原因是 Github 被 GFW 屏蔽了。 Windows 系统&#xff0c;打开 C:\Windows\System32\drivers\etc&#xff0c;复制其中的 hosts 文件至桌面&#xff0c;用文本编辑器或者其他工具打开。 复制以下内容进去&#xff1a; 140.82.114.4 github.com 151.101.1.6 github.global.ss…

memcached的基本使用

memcached是一种基于键值对的内存数据库&#xff0c;一般应用于缓存数据&#xff0c;提高数据访问速度&#xff0c;减轻后端数据库压力。 安装 这里以Ubuntu为例&#xff0c;其他系统安装方法请看官方文档。 sudo apt-get update sudo apt-get install memcached启动 memca…

【操作系统不挂科】操作系统期末考试题库<2>(单选题&简答题&计算与分析题&程序分析题&应用题)

前言 大家好吖&#xff0c;欢迎来到 YY 滴 操作系统不挂科 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 目录 一、单项选择题&#xff08;每空2分&#xff0c;共40分&#xff09;1&#xff0e;以下选项中&#xff0c;&#xff08; &#xff09;不是操…

ip属地的信息准确吗?ip归属地不准确怎么办

在数字化时代&#xff0c;IP属地信息成为了我们日常生活中不可或缺的一部分。在各大社交媒体平台上&#xff0c;IP属地信息都扮演着重要的角色。然而&#xff0c;随着技术的不断进步和网络的复杂性增加&#xff0c;IP属地信息的准确性问题也日益凸显。那么&#xff0c;IP属地信…

【GUI-pyqt5】QWidget类

1. 描述 所有可视空间的基类是一个最简单的空白控件控件是用户界面的最小元素 接收各种事件&#xff08;鼠标、键盘&#xff09;绘制在桌面上&#xff0c;显示给用户看 每个控件都是矩形的&#xff0c;它们按z轴顺序排序控件由其父控件和前面的控件剪切没有父控件的控件&#…

Linux(Centos 7.6)命令详解:ls

1.命令作用 列出目录内容(list directory contents) 2.命令语法 Usage: ls [OPTION]... [FILE]... 3.参数详解 OPTION: -l&#xff0c;long list 使用长列表格式-a&#xff0c;all 不忽略.开头的条目&#xff08;打印所有条目&#xff0c;包括.开头的隐藏条目&#xff09…

unity学习6:unity的3D项目的基本界面和菜单

目录 1 unity界面的基本认识 1.1 file 文件 1.2 edit 编辑/操作 1.3 Assets 1.4 gameobject 游戏对象 1.5 组件 1.6 windows 2 这些部分之间的关系 2.1 关联1&#xff1a; Assets & Project 2.2 关联2&#xff1a;gameobject & component 2.3 关联3&#xf…

生成模型的现状2025年的新兴趋势

2024年对人工智能而言是极为出色的一年。在文本生成和图像生成这两方面&#xff0c;我们目睹了模型能力全方位出现了类似阶跃函数般的巨大提升。这一年起始时OpenAI占据主导地位&#xff0c;而到了年末&#xff0c;Anthropic的Claude成了我常用的大型语言模型&#xff0c;并且还…

PWN 的知识之如何利用栈溢出利用后门函数

PWN 的知识之如何利用栈溢出利用后门函数 利用栈溢出漏洞调用原本存在的后门函数&#xff08;例如 get_flag 或system("/bin/sh")&#xff09;是二进制漏洞利用中的一种常见技术,相信各位网安的师傅或多或少都听说过&#xff0c;那么如何利用栈溢出来利用后门函数呢…

基于YOLO11的道路缺陷检测系统

基于YOLO11的道路缺陷检测系统 (价格90) 包含 [cracks, potholes] [裂缝, 凹坑] 2个类 通过PYQT构建UI界面&#xff0c;包含图片检测&#xff0c;视频检测&#xff0c;摄像头实时检测。 &#xff08;该系统可以根据数据训练出的yolo11的权重文件&#xff0c;运用在其他…

JAVA:Spring Boot 集成 Quartz 实现分布式任务的技术指南

1、简述 Quartz 是一个强大的任务调度框架&#xff0c;允许开发者在应用程序中定义和执行定时任务。在 Spring Boot 中集成 Quartz&#xff0c;可以轻松实现任务的调度、管理、暂停和恢复等功能。在分布式系统中&#xff0c;Quartz 也支持集群化的任务调度&#xff0c;确保任务…