insert /*+ APPEND */

总结得出以下3点结论:
a、非归档模式下,只需append就能大量减少redo的产生;归档模式下,只有append+nologging才能大量减少redo。
b、insert /*+ append */ 时会对表加锁(排它锁),会阻塞表上的除了select以外所有DML语句;传统的DML在TM enqueue上使用模式3(row exclusive),其允许其他DML在相同的模式上获得TM enqueue。但是直接路径加载在TM enqueue使用模式6(exclusive),这使其他DML在直接路径加载期间将被阻塞。
c、insert /*+ append */ 直接路径加载,速度比常规加载方式快。因为是从HWM的位置开始插入,也许会造成空间浪费。


数据库版本:
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

网上说测试时不要使用auto trace来查看redo size,这个值是有偏差的.建议建立一个视图:
SQL> create or replace view redo_size
  2  as
  3  select value
  4  from v$mystat, v$statname
  5  where v$mystat.statistic# = v$statname.statistic#
  6  and v$statname.name = 'redo size';
视图已创建。

一、非归档模式
SQL> archive log list
数据库日志模式             非存档模式
自动存档             禁用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列
     95
当前日志序列           97

1、nologging表
SQL> create table test1 nologging as select * from dba_objects where 1=0;
表已创建。

SQL> select * from redo_size;
     VALUE
----------
  25714940

SQL> insert into test1 select * from dba_objects;
已创建72753行。

SQL> select * from redo_size;
     VALUE
----------
  34216916

SQL> insert /*+ APPEND */  into test1 select * from dba_objects;
已创建72753行。

SQL> select * from redo_size;
     VALUE
----------
  34231736

SQL> select (34231736-34216916) redo_append , (34216916-25714940) redo_normal from dual;
REDO_APPEND REDO_NORMAL
----------- -----------
      14820     8501976

2、logging表:
SQL> create table test2 as select * from dba_objects where 1=0;

表已创建。

SQL> select * from redo_size;
     VALUE
----------
  34273348

SQL> insert into test2 select * from dba_objects;

已创建72754行。

SQL> select * from redo_size;
     VALUE
----------
  42775336

SQL> insert /*+ APPEND */  into test2 select * from dba_objects;
已创建72754行。

SQL> select * from redo_size;
     VALUE
----------
  42790156

SQL> select (42790156-42775336) redo_append , (42775336-34273348) redo_normal from dual;
REDO_APPEND REDO_NORMAL
----------- -----------
      14820     8501988

二、归档模式下:

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE例程已经关闭。
SQL> startup mount
ORACLE
例程已经启动。

Total System Global Area  477073408 bytes
Fixed Size                  1337324 bytes
Variable Size             293603348 bytes
Database Buffers          176160768 bytes
Redo Buffers                5971968 bytes
数据库装载完毕。
SQL> alter database archivelog;
数据库已更改。

SQL> alter database open;
数据库已更改。

SQL> archive log list
数据库日志模式            存档模式
自动存档             启用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列
     95
下一个存档日志序列
   97
当前日志序列           97

1、nologging表
SQL> select * from redo_size;
    
VALUE
----------
     17936

SQL> insert into test1 select * from dba_objects;
已创建72754行。

SQL> select * from redo_size;
     VALUE
----------
   8490972

SQL> insert /*+ APPEND */  into test1 select * from dba_objects;
已创建72754行。

SQL> select * from redo_size;
     VALUE
----------
   8506164

SQL> select (8506164-8490972) redo_append , (8490972-17936) redo_normal from dual;
REDO_APPEND REDO_NORMAL
----------- -----------
      15192     8473036

2、logging表
SQL> select * from redo_size;
     VALUE
----------
   8506780

SQL> insert into test2 select * from dba_objects;
已创建72754行。

SQL> select * from redo_size;
     VALUE
----------
  16979516

SQL> insert /*+ APPEND */  into test2 select * from dba_objects;
已创建72754行。

SQL> select * from redo_size;
     VALUE
----------
  25518172

SQL> select (25518172-16979516) redo_append , (16979516-8506780) redo_normal from dual;
REDO_APPEND REDO_NORMAL
----------- -----------
    8538656     8472736

在归档模式下,对于常规表的insert append产生和insert同样的redo
此时的insert append实际上并不会有性能提高
.
但是此时的append是生效了的。


三、insert /*+ append */会阻塞除select以外的DML语句,direct-path insert操作是单独一个事务。
SQL> select count(*) from test2;
  COUNT(*)
----------
    291016

SQL> insert into test2 select * from dba_objects;
已创建72754行。

SQL> select count(*) from test2;
  COUNT(*)
----------
    363770

SQL> insert /*+ APPEND */ into test2 select * from dba_objects;
已创建72754行

同一个session下:

SQL> select count(*) from test2;
select count(*) from test2
*
第 1 行出现错误:
ORA-12838: 无法在并行模式下修改之后读/修改对象

SQL> commit;
提交完成。

SQL> select count(*) from test2;
  COUNT(*)
----------
    436524

SQL> insert /*+ APPEND */ into test2 select * from dba_objects;
已创建72754行。

SQL> shutdown immediate
ORA-01097: 无法在事务处理过程中关闭 - 请首先提交或回退

SQL> select  * from v$mystat where rownum<2;

       SID STATISTIC#      VALUE

---------- ---------- ----------

       224          0          1

SQL> select KADDR,TYPE,LMODE from v$lock where sid=224;

KADDR            TY      LMODE

---------------- -- ----------

0000000071BAE180 TM          6

0000000070CB11B8 TX          6

另外开启一个会话,就会发现只能select,其他DML全部阻塞。

转载 http://www.cnblogs.com/wbzhao/archive/2012/04/01/2429067.html

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

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

相关文章

Csharp实例:武汉智能安检闸机数据接收和解析

项目介绍&#xff1a;本实例主要是接收安检闸机的数据解析并显示到界面上&#xff0c;只做功能实现&#xff0c;不做界面美化硬件&#xff1a;闸机一个、网线一根、电脑主机开发环境&#xff1a;vs2017 系统&#xff1a;win10涵盖知识点&#xff1a;tcp通讯、文件写入、多线程&…

墨迹天气android,墨迹天气Android产品分析

墨迹天气官网宣传图一、产品概况1、产品简介墨迹天气是一款免费天气预报工具&#xff0c;提供日出日落信息&#xff0c;六小时天气预报2、主要竞品天气通、最美天气、91黄历天气、知趣天气、懒人天气、琥珀天气二、体验环境手机&#xff1a;华为A199操作系统&#xff1a;Androi…

可编程的智能小车,100种玩法,让孩子玩出理科编程思维

▲数据汪特别推荐点击上图进入玩酷屋毫无疑问&#xff0c;数学、科学和计算机科学是解决21世纪现代问题的三大支柱。当现在各式各样的兴趣班和教育辅导班快要呈现饱和状态时&#xff0c;一种新兴的教育活动正如火如荼地进行着那就是少儿编程。少儿编程奇迹般的红火&#xff0c;…

我的Android进阶之旅------Android MediaPlayer播放mp3的实例--简易mp3播放器

大家好我们今天研究的是Android中很重要也最为复杂的媒体播放器---MediaPlayer. Android的MediaPlayer包含了Audio和video的播放功能&#xff0c;在Android的界面上&#xff0c;Music和Video两个应用程序都是调用MediaPlayer实现的。 首先来看看MediaPlayer的生命周期&#xff…

AgileConfig轻量级配置中心1.3.0发布,支持多用户权限控制

AgileConfig 当初是设计给我自己用的一个工具&#xff0c;所以只设置了一道管理员密码&#xff0c;没有用户的概念。但是很多同学在使用过后都提出了需要多用户支持的建议。整个团队或者整个公司都使用同一个密码来管理非常的不方便。今天 AgileConfig 1.3.0 版本终于支持了多用…

每日一笑 | 马冬梅当上了百度投资董事???

全世界只有3.14 % 的人关注了数据与算法之美马东什么&#xff1f;&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

批处理解决局域网共享打印机问题

随着公司规模的扩大&#xff0c;人员流动性也越来越大。特别是业务这块&#xff0c;隔三差五的就来几个业务人员&#xff0c;一入职各种后勤工作都要给他们安排好。网络这块除了基本的网线&#xff0c;电话要通以外。最最后面的当然就是打印机的共享了。 先说说公司的网络环境。…

.NET MAUI 预览版 6 发布

原文&#xff1a;bit.ly/2SKad9g作者&#xff1a;.NET Blog - David译者&#xff1a;精致码农 - 王亮当我们还在从微软 Build 大会和 .NET 6 预览版 4 中缓过来的时候&#xff0c;我们在这里就开始分享我们在 .NET 6 预览版 5 中对 .NET 多平台应用程序开发框架(.NET MAUI)的持…

德国布线牛到不行?今天带你看看咱们中国的!

全世界只有3.14 % 的人关注了数据与算法之美相信不少人都有看过德国的布线&#xff0c;那整齐的感觉让人舒服。这是由BuzzFeed网站刊登的照片&#xff0c;从图片可以看出&#xff0c;德国工程师严谨的态度却是表现的淋漓尽致&#xff0c;让人大饱眼福&#xff0c;简直就是洁癖症…

【Unity热更新1】学会AssetsBundle打包、加载

AssetBundles 简介 什么是AssetBundles? AssetBundles是Unity中一种用于打包和存储资源(如模型、纹理、声音等)的文件格式。它允许你将游戏或应用程序中的资源以可独立加载的方式打包,使其在运行时动态加载而不是静态内置在应用中。这种动态加载的方式让你能够优化资源使…

Java进阶02 异常处理

作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 欢迎转载&#xff0c;也请保留这段声明。谢谢&#xff01; 程序很难做到完美&#xff0c;不免有各种各样的异常。比如程序本身有bug&#xff0c;比如程序打印时打印机没有纸了&#xff0c;比如内存不足。…

.NET 6 Preview 5 中的 ASP.NET Core 更新

.NET 6 Preview 5 中的 ASP.NET Core 更新.NET 6 Preview 5 现已推出&#xff0c;其中包括对 ASP.NET Core 的许多重大改进。以下是此预览版中的新功能&#xff1a;.NET 热重载更新 dotnet watchASP.NET Core SPA 模板更新到 Angular 11 和 React 17在 SVG foreignObject元素中…

每日一笑 | 对不起,我还没下班...

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

差异分析定位Ring 3保护模块

差异分析定位Ring 3保护模块 由于保护模块通常会Hook操作系统的原生DLL接口来进行保护&#xff0c;所以可以采用差异比较原生DLL文件和加载到内存中的原生DLL直接的差别来定位Ring 3模块。 在分析的过程中&#xff0c;为了防止被Ring 3保护模块发现&#xff0c;暂时可以先把除了…

html 输入框自动缩短 一行内显示,JQuery UI组合框自动补全功能改进版(即时全部显示+input内容保存)...

JQuery UI Autocomplete(自动补全)功能在input前端设计中非常有用&#xff0c;最近一个项目正好用到&#xff0c;仔细研究了下组合框(combobox)的自动补全部分&#xff0c;官方地址是&#xff1a;https://jqueryui.com/autocomplete/#combobox。官方的功能需要一个额外下拉按钮…

Magicodes.IE 2.5.4.2发布

Magicode.IE&#xff0c;导入导出通用库&#xff0c;支持Dto导入导出、模板导出、花式导出以及动态导出&#xff0c;支持Excel、Csv、Word、Pdf和Html。Github&#xff1a;https://github.com/dotnetcore/Magicodes.IE码云&#xff08;手动同步&#xff0c;不维护&#xff09;&…

耗时6年的DK博物科普巨著,全面提升孩子的认知高度

▲数据汪特别推荐点击上图进入玩酷屋小木用真金白银来给大家送礼物啦&#xff0c;特别感谢这些年一直以来大家对我们的支持&#xff0c;才让我们越做越好。&#xff08;点我参与送礼活动&#xff09;小木每次带侄子去郊游时&#xff0c;侄子总是会不断地提问&#xff0c;“这是…

磁盘 I/O性能指标

磁盘 I/O性能指标 在介绍磁盘 I/O 监控命令前&#xff0c;我们需要了解磁盘 I/O 性能监控的指标&#xff0c;以及每个指标的所揭示的磁盘某方面的性能。磁盘I/O 性能监控的指标主要包括&#xff1a; 1)每秒 I/O 数&#xff08;IOPS 或 tps&#xff09; 对于磁盘来说&#xff0…

android fragmentstatepageradapter框架,安卓爬坑指南之FragmentStatePagerAdapter

一次开发中&#xff0c;用到了viewpager嵌套viewpager&#xff0c;结果就踩到了这么一个坑。先上图&#xff1a;image.png图片中显示的界面布局和遇到的问题是这样的&#xff1a;首页发现版块是一个fragment&#xff0c;这个fragment中放了一个viewpager&#xff0c;这个viewpa…

DotNetCommon-搜集.neter开发常用的功能

介绍搜集.neter开发常用的功能&#xff0c;运行环境&#xff1a;.net4.7&#xff1b;.netstandard2.0&#xff1b;net5.0&#xff1b;得益于在BC公司负责维护底层框架代码&#xff0c;自己的精力逐渐从 “全栈” 转移到专注于后端。于是&#xff0c;以BC公司的公共类库为基础&a…