Oracle Hint /*+APPEND*/插入性能总结
oracle append用法
Oracle中的APPEND用法主要用于提高数据插入的效率。
-
基本用法:在使用了APPEND选项后,插入数据会直接加到表的最后面,而不会在表的空闲块中插入数据。这种做法不需要寻找freelist中的free block,从而避免了在高水位线(HWM)下面寻找可插入的数据块,因此可以显著提高数据插入的速度。APPEND属于direct insert,这意味着在归档模式下使用APPEND+TABLE NOLOGGING会大量减少日志的生成,而在非归档模式下,APPEND也会大量减少日志的生成。此外,APPEND方式插入只会产生很少的undo,从而进一步提高了效率。
-
适用场景:当需要向表中快速插入大量数据时,使用APPEND可以显著提高性能。例如,在
INSERT INTO /*+ append*/ TABLEA SELECT * FROM TABLEB语句中,如果SELECT出来的数据量很大,使用APPEND可以提高效率。 -
注意事项:
- 使用APPEND时,会在目标表上加一个lmode=6的排它锁(TM enqueue),这会导致在APPEND操作进行时,其他用户无法对表进行DML操作。
- 在不同版本的Oracle中,APPEND的用法有所不同。例如,在10g版本中,APPEND只能用于
INSERT INTO..VALUES SELECT语句;而在11gR2版本中,INSERT VALUES也可以支持APPEND_VALUES。 - 使用APPEND/APPEND_VALUES时,必须先提交事务,否则查询会报错ORA-12838。
- 避免在单行insert中使用APPEND_VALUES,因为这可能导致极大的空间浪费。结合使用绑定变量和批量提交可以更有效地利用空间。
一、使用APPEND背景
业务过程中有类似把B表千万级数据复制到A表,但是这个语句的效率特别差,需要1小时往上才能插入成功。
insert into A select * from B
二、使用APPEND效果
效果提升到了10来钟
insert into /*+APPEND*/ A select * from B
三、查看高水位表使用情况
set linesize 258 pagesize 999
col WASTED_PERCENT format a20
col owner for a30
col table_name for a30
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
SELECT owner,
table_name,
ROUND(BLOCKS * 8192 / 1024 / 1024, 2) "total_size(M)",
ROUND(num_rows * AVG_ROW_LEN / 1024 / 1024, 2) "used_size(M)",
ROUND(((BLOCKS * 8192 / 1024 / 1024) -
(num_rows * AVG_ROW_LEN / 1024 / 1024)),
2) "wasted_size(M)",
ROUND(ROUND(((BLOCKS * 8192 / 1024 / 1024) -
(num_rows * AVG_ROW_LEN / 1024 / 1024)),
2) / ROUND(BLOCKS * 8192 / 1024 / 1024, 2),
2) * 100 || '%' wasted_percent,
LAST_ANALYZED,
NUM_ROWS
FROM dba_tables
WHERE owner='&owner' AND table_name in ('table_name')
ORDER BY 6 desc;
执行结果,发现浪费了40%的存储空间

四、APPEND导致极大的空间浪费如何处理
如果空间浪费过多会导致当前表的处理性能下降,一直APPEND的意义不大。哪有什么方式来解决呢?
1、清空表
truncate table A
2、使用表分析
DBMS_STATS.GATHER_TABLE_STATS简介,简单的说,就是收集表和索引的信息,CBO根据这些信息决定SQL最佳的执行路径。通过对表的分析,可以产生一些统计信息,通过这些信息oracle的优化程序可以进行优化。
exec dbms_stats.gather_table_stats(ownname=>'root',tabname=>'table_name',ESTIMATE_PERCENT => DBMS_STATS.AUTO_SAMPLE_SIZE,NO_INVALIDATE=> false,cascade=> true, method_opt =>'FOR ALL COLUMNS SIZE AUTO',degree=> 8);
相关文章:
Oracle Hint /*+APPEND*/插入性能总结
oracle append用法 Oracle中的APPEND用法主要用于提高数据插入的效率。 基本用法:在使用了APPEND选项后,插入数据会直接加到表的最后面,而不会在表的空闲块中插入数据。这种做法不需要寻找freelist中的free block,从而避免了在…...
正邦科技(day3)
出厂测试 设备校准 这个需要注意的是校准电流、电压、电感的时候有时候负感器会装反,mcu会坏,需要flash一下清空内存...
mac电脑多协议远程管理软件:Termius 8.4.0激活版下载
Termius 是一款功能强大的跨平台远程访问工具,可用于管理和连接各种远程系统和服务器。它支持SSH、Telnet、SFTP和Serial协议,并提供了键盘快捷键、自动完成和多标签功能,使用户可以方便地控制和操作远程主机。 Termius 提供了端到端的加密保…...
网络攻击的常见形式
开篇 本篇文章来自于《网络安全 ——技术与实践》的学习整理笔记。 正篇 口令窃取 相比于利用系统缺陷破坏网络系统,最容易的方法还是通过窃取用户的口令进入系统。因为人们倾向于选择很糟糕的口令作为登录密码,所以口令猜测很容易成功。通常࿰…...
ReactDOM 18版本 使用createRoot 替换render详解
概述 React 18 提供了两个 root API,被称之为 Legacy Root API 和 New Root API: Legacy Root API:是指之前版本的 root API ReactDOM.render,它将创建一个以 “legacy” 模式运行的 root,其工作方式与 React 17 完全…...
【赠书活动】好书推荐—《详解51种企业应用架构模式》
导读: 企业应用包括哪些?它们又分别有哪些架构模式?世界著名软件开发大师Martin Fowler给你答案。 01 什么是企业应用 我的职业生涯专注于企业应用,因此,这里所谈及的模式也都是关于企业应用的。(企业应用…...
SpringBoot启动时使用外置yml文件
第一步:打包时排除yml文件 <build><resources><resource><!-- 排除的文件的路径 --><directory>src/main/resources</directory><excludes><!-- 排除的文件的名称 --><exclude>application-dev.yml</e…...
【开源三方库】Fuse.js:强大、轻巧、零依赖的模糊搜索库
1.简介 Fuse.js是一款功能强大且轻量级的JavaScript模糊搜索库,支持OpenAtom OpenHarmony(以下简称“OpenHarmony”)操作系统,它具备模糊搜索和排序等功能。该库高性能、易于使用、高度可配置,支持多种数据类型和多语…...
vue从入门到精通(六):数据代理
一,什么是数据代理 通过一个对象代理对另一个对象中属性的操作 二,object.defineproperty方法 object.defineproperty方法可以对对象追加属性 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>object…...
【C++修行之道】类和对象(二)类的6个默认成员函数、构造函数、析构函数
目录 一、类的6个默认成员函数 二、构造函数 2.1 概念 2.2 特性 2.2.5 自动生成默认构造函数 不进行显示定义的隐患: 2.2.6 自动生成的构造函数意义何在? 两个栈实现一个队列 2.2.7 无参的构造函数和全缺省的构造函数都称为默认构造函数&#x…...
【LeetCode热题100总结】239. 滑动窗口最大值
题目描述 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入:nums [1,3,-1,-3,5,3,6,7]…...
【YOLOv9改进[Conv]】使用YOLOv10的空间通道解耦下采样SCDown模块替换部分CONv的实践 + 含全部代码和详细修改内容
本文将使用YOLOv10的空间通道解耦下采样SCDown模块替换部分CONv的实践 ,文中含全部代码和详细修改内容。 目录 一 YOLOv10 1 空间通道解耦下采样 2 可视化...
简单小游戏制作
控制台基础设置 //隐藏光标 Console.CursorVisible false; //通过两个变量来存储舞台的大小 int w 50; int h 30; //设置舞台(控制台)的大小 Console.SetWindowSize(w, h); Console.SetBufferSize(w, h);多个场景 int nowSceneID 1; while (true) …...
Delphi
Delphi,是美国 Borland(宝兰)公司於 1995 年开发在 Windows 平台下的快速应用程式开发工具 (Rapid Application Development,简称 RAD),它的前身是在 DOS 下的产品 Borland Turbo Pascal。(非开源软件&…...
Linux的shell脚本中的比大小
如果要将 -le 换成相反的(即“大于”),你应该使用 -gt(greater than)。 所以,-le 的相反比较是 -gt。 但如果你想要一个包含“大于”和“不等于”的比较(即“大于”),那…...
每日复盘-20240603
20240603 六日涨幅最大: ------1--------300637--------- 扬帆新材 五日涨幅最大: ------1--------300637--------- 扬帆新材 四日涨幅最大: ------1--------301306--------- 西测测试 三日涨幅最大: ------1--------301306--------- 西测测试 二日涨幅最大: ------1--------30…...
adb server version (22000) doesn‘t match this client (41); killing...
参考链接: adb server version (31) doesn’t match this client (41); killing… 解决此问题 电脑安装了360手机助手占用了adb的端口引起的。因为套接字的唯一性(一个套接字只能由 协议/网络地址/端口号 唯一确定 ),一个电脑只能有一个程序…...
如何使用 Connector API 将数据提取到 Elasticsearch Serverless 中
作者:来自 Elastic Jedr Blaszyk Elasticsearch 支持一系列摄取方法。 其中之一是 Elastic Connectors,它将 SQL 数据库或 SharePoint Online 等外部数据源与 Elasticsearch 索引同步。 连接器对于在现有数据之上构建强大的搜索体验特别有用。 例如&…...
体育赛事直播系统开发源码搭建
随着体育产业的蓬勃发展,体育赛事直播已成为广大观众获取赛事信息的重要途径。为了满足观众日益增长的需求,开发一套专业的体育赛事直播系统成为当务之急。本文将围绕体育赛事直播系统开发源码搭建进行深入探讨,从技术选型、系统架构、安全防…...
使用Jmeter进行性能测试
学习视频 B站UP主:白月黑羽编程 目录 Jmeter的下载 Jmeter界面 Jmeter操作 线程组与HTTP请求 测试一个请求 解决响应数据中 中文乱码的问题 HTTP请求默认值 录制网站流量 添加录制控制器 添加HTTP代理服务器 在浏览器配置代理 进行录制 模拟间隔时间 …...
前端测试吐槽:别再写那些没用的测试了!
前端测试吐槽:别再写那些没用的测试了! 毒舌时刻 前端测试就像体检——每个人都知道要做,但真正认真做的没几个。Jest、React Testing Library、Cypress... 一堆测试工具让你挑花了眼,结果你的测试还是写得像一坨屎。 我就想不明白…...
Makefile核心概念与高效构建实践指南
1. Makefile基础概念与核心结构Makefile本质上是一种声明式构建脚本,它通过定义目标、依赖和命令三者之间的关系,让构建工具(make)能够智能地决定哪些文件需要重新编译。这种机制在C/C项目中尤为重要,因为源文件之间的…...
嵌入式滚动平均滤波库:SimpleSmooth轻量级实现
1. 项目概述 SimpleSmooth 是一个专为嵌入式系统设计的轻量级滚动平均值计算库,其核心目标是为模拟信号采集(如 ADC 读数)提供低开销、无动态内存分配、零依赖的数字滤波能力。该库并非从零构建,而是对 Arduino 官方示例中经典平…...
Pandas 数据分析:统计每个人吃的蔬菜数量
在数据分析中,Pandas 是一个非常强大且灵活的工具,特别是当我们处理数据表格时。今天,我们将通过一个实际例子来展示如何使用 Pandas 统计每个人的蔬菜消费量。这个例子不仅展示了 Pandas 的基本操作,还深入到数据筛选和聚合的细节。 场景描述 假设我们有这样一个 CSV 文…...
国产SeekWave 双频WIFI6+BT5.4 VS6621SR80基于RK3588平台成功替换RTL8822模组 硬件兼容 速率可达600Mbps
RK3588是瑞芯微(Rockchip)推出的旗舰级SoC芯片,采用8nm工艺,集成四核Cortex-A76和四核Cortex-A55 CPU、ARM Mali-G610 MP4 GPU、6 TOPS NPU,支持8K视频编解码。12CPU:八核ARM架构ÿ…...
Git误操作急救手册(7)Git核心概念回顾:工作区、暂存区、版本库
Git误操作急救手册(7)Git核心概念回顾:工作区、暂存区、版本库 昨天隔壁组的小王跑过来,满头大汗地问我:“哥,我改了一下午的驱动代码,git status一看全红了,手一抖直接git checkout .,现在全没了,能救吗?”我叹了口气,打开终端敲了几行命令,用git fsck找回了他的…...
突破下载瓶颈:3个鲜为人知的ComfyUI加速方案,速度提升300%的秘密
突破下载瓶颈:3个鲜为人知的ComfyUI加速方案,速度提升300%的秘密 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and…...
【AI工具】openclaw+离线模型
一、安装 1. 先换系统 apt 国内源(阿里云) # 1. 备份原来的源列表(重要!) sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak# 2. 执行替换,换成清华源 sudo sed -i s/archive.ubuntu.com/mirror…...
WaveTools:解决鸣潮玩家性能优化与数据管理痛点的开源工具
WaveTools:解决鸣潮玩家性能优化与数据管理痛点的开源工具 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools WaveTools是一款专为《鸣潮》PC玩家设计的开源辅助工具,集成性能优化、账…...
类型擦除与部分异步编程: 消除差别,统一使用
1. std::function:可调用对象的“统一调用接口”std::function 是针对可调用对象的类型擦除工具,其底层实现核心是「抽象基类 模板子类」的多态模式,也是运行时类型擦除的典型应用:抽象基类:定义了与“函数签名”完全…...
