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

实验--Insert 语句对nologging与logging表在不同场景下的优化

mhr18 2024-09-23 09:42 16 浏览 0 评论

概述

前段时间其中一个报表数据库上有条insert sql语句,因为插入的大量数据,执行非常慢,所以需要对其进行分析优化。

分析步骤是在:ARCHIVE与NOARCHIVE模式下进行。

测试场景: 分别对表的常规插入,表在append插入,表在append + parallel插入进行性能测试,得出结果。


01

环境准备

基于Oracle11.2.0.1测试

SQL> create user test identified by test default tablespace users;
SQL> grant resource, connect to test;
SQL> grant select any table to test;
SQL> grant select any dictionary to test;
SQL> conn test/test;

#创建T1,T2,T3表
SQL> create table t1 as select * from dba_objects;
SQL> create table t2 as select * from dba_objects where 1=2;
SQL> create table t3 as select * from dba_objects where 1=2;

#往T1表插入数据
SQL> insert into t1 select * from t1;
SQL> /
SQL> /
SQL> select count(*) from t1;

#设置T2表为nologging属性
SQL> alter table t2 nologging;

02

数据库处于ARCHIVE时

1、常规插入

1.1、nologging 表T2

SQL> set autotrace on;
SQL> insert into t2 select * from t1; 
SQL> commit;

耗费:82563832 redo size

1.2、logging 表T3

SQL> insert into t3 select * from t1; 
SQL> commit;

耗费: 82320896 redo size


2、append 插入

2.1、nologging 表T2

SQL> insert /*+ append */ into t2 select * from t1; 
SQL> commit;

耗费:62068 redo size

2.2、logging 表T3

SQL> insert /*+ append */ into t3 select * from t1; 
SQL> commit;

耗费:83036976 redo size


3、parallel + append 插入

3.1、nologging 表T2

SQL> alter session enable parallel dml;
SQL> insert /*+ append parallel(2) */ into t2 select * from t1; 
SQL> commit;

耗费:28512 redo size

3.2、logging 表T3

SQL> alter session enable parallel dml;
SQL> insert /*+ append parallel(2)*/ into t3 select * from t1; 
SQL> commit;

耗费:28352 redo size


03

数据库处于NOARCHIVE时

1、常规插入

1.1、nologging 表T2

SQL> set autotrace on;
SQL> insert into t2 select * from t1; 
SQL> commit;

耗费:82368872 redo size

1.2、logging 表T3

SQL> insert into t3 select * from t1; 
SQL> commit;

耗费: 82367200 redo size


2、append 插入

2.1、nologging 表T2

SQL> insert /*+ append */ into t2 select * from t1; 
SQL> commit;

耗费:62328 redo size

2.2、logging 表T3

SQL> insert /*+ append */ into t3 select * from t1; 
SQL> commit;

耗费:62268 redo size


3、parallel + append 插入

3.1、nologging 表T2

SQL> alter session enable parallel dml;
SQL> insert /*+ append parallel(2) */ into t2 select * from t1; 
SQL> commit;

耗费:28468 redo size

3.2、logging 表T3

SQL> alter session enable parallel dml;
SQL> insert /*+ append parallel(2)*/ into t3 select * from t1; 
SQL> commit;

耗费:28484 redo size


04

综合比较

1)数据库处于ARCHIVE模式时,对logging表执行append插入,是对性能没有优化的。加并行parallel才会有影响。

2)数据库处于NOARCHIVE模式时,对logging表执行append插入,可以有效的提升性能。当然加并行parallel效果会更好

这个实验还是花了挺长时间去测试的,大家有空也可以自己测试一下。后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

相关推荐

SpringBoot实现OA自动化办公管理系统源码+代码讲解+开发文档

今天发布的是由【猿来入此】的优秀学员独立做的一个基于springboot脚手架的自动化OA办公管理系统,主要实现了日常办公的考勤签到等一些办公基本操作流程的全部功能,系统分普通员工、部门经理、管理员等...

7层架构解密:从UI到基础设施,打造真正可扩展的系统

"我们系统用户量暴增后完全崩溃了!"这是多少工程师的噩梦?选择正确的数据库只是冰山一角,真正的系统扩展性是一场全栈战役。客户端层:用户体验的第一道防线当用户点击你的应用时,0.1秒...

Win11系统下使用Django+Celery异步任务队列以及定时(周期)任务

首先明确一点,celery4.1+的官方文档已经详细说明,该版本之后不需要引入依赖django-celery这个库了,直接用celery本身就可以了,就在去年年初的一篇文章python3.7....

HL7消息编辑器的使用手册

REDISANT提供互联网与物联网开发测试套件#互联网与中间件:RedisAssistantZooKeeperAssistantKafkaAssistantRocketMQAssistant...

后台改了商品,前端却不更新?一次被运营怒怼后的数据同步机制复盘

在电商运营中,后台数据更新与前端展示的同步问题一直是困扰团队的常见痛点。本文通过一次“运营怒怼开发”的真实案例,深入剖析了商城前后台数据同步机制的缺陷,并从产品视角复盘了问题的根源。运营:“我都改了价...

Redis 8为向量相似性推出新的数据结构

作者|RenatoLosio审校|明知山策划|TinaRedis最近推出向量集合(VectorSet)功能,这是一种专为向量相似性设计的数据类型,也是Redis针对人工智能...

redis主从同步是怎样的过程

Redis的主从同步机制用于在多个Redis实例之间复制数据,以实现数据冗余、读写分离和高可用性。下面为你详细介绍Redis主从同步的过程,它主要分为全量同步和增量同步。全量同步全量同步一般...

一次Nignx的502页面的错误记录

转载自:https://www.cnblogs.com/tinywan/p/6777592.html(1)错误页面显示错误日志://::[error]#:*recv()failed(:...

推荐一个 Spring Boot 3 + Vue 3 的学习型开源项目,配备保姆级项目教程

项目简介原文链接:https://www.52pojie.cn/forum.php?mod=viewthread&tid=1640957&extra=page%3D1%26filter%3Dtypei...

记一次springboot2.5.6升级到3.4

以下基于本人项目,如有问题欢迎指出。如有新的内容添加,评论区见........一、JDK的变化SpringBoot3.X以上需要Java17作为最低版本。下载地址JavaArchiveDownlo...

Redis 通过 AGPL 许可 “回归 ”开源

  Redis公司是同名热门键值数据库的背后开发者,该公司已将其主要系统重新采用开源许可证,但是此举未能让一些批评者感到满意。  从Redis8开始,Redis增加了GNUAffero通用公共许...

如何解决服务器缓存过高

如果服务器缓存过高,可以尝试以下方法来解决:一、分析缓存来源确定是哪种缓存导致的问题,例如Web服务器缓存、数据库缓存、操作系统缓存等。如需购买服务器可以在网址栏搜索218.0.48.3:880...

安装Dify源码并修改前端发布

Dify是一个开源的大语言模型(LLM)应用开发平台,目前是开源的,可以拿到完整的前后端源码,Dify虽然开源协议,但要求前端代码保留版权协议和Logo;今天讲下如何源码安装,并来修改打包前端代码...

Linux网络编程——端口复用(多个套接字绑定同一个端口)

实际上,默认的情况下,如果一个网络应用程序的一个套接字绑定了一个端口(占用了8000),这时候,别的套接字就无法使用这个端口(8000),验证例子如下:#include<stdi...

Rust Web编程:第九章 测试我们的应用程序端点和组件

我们的待办事项Rust应用程序现在可以正常运行了。我们对第一个版本感到满意,因为它管理身份验证、不同的用户及其待办事项列表,并记录我们的流程以供检查。然而,网络开发人员的工作永远没有完成。虽然...

取消回复欢迎 发表评论: