关于加快INSERT语句执行速度和 HINT /*+ append*/及nologging的使用
(非归档模式下)创建表T01:
SQL> create table t01 as select * from dba_objects where 1=2;
Table created.
(非归档模式下)查看当前redo大小:
SQL> select value
2 from v mystat,v mystat,vstatname
3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’
5 /
VALUE
49784
(非归档模式下)普通INSERT语句插入:
SQL> insert into t01 select * from dba_objects;
11698 rows created.
(非归档模式下)查看普通INSERT语句执行后,当前redo大小:
SQL> select value
from v mystat,v mystat,vstatname
2 3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’;
VALUE
1305724
(非归档模式)采用HINT /+ append/执行INSERT语句:
SQL> insert /+ append / into t01 select * from dba_objects;
11698 rows created.
(非归档模式)查询带/+ append/的INSERT执行后,当前redo大小:
SQL> select value
2 from v mystat,v mystat,vstatname
3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’;
VALUE
1308140
(非归档模式)计算使用HINT(/+ append/)和普通INSERT语句分别产生的redo大小:
SQL> select (1308140-1305724) redo_append,(1305724-49784) redo from dual;
REDO_APPEND REDO
2416 1255940
可见,在非归档模式下,INSERT语句采用HINT /+ APPEND/的方式确实比普通INSERT语句产生的redo要少很多。
下面测试归档模式下
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/arch
Oldest online log sequence 109
Next log sequence to archive 111
Current log sequence 111
(归档模式)查看当前redo大小:
SQL> select value
2 from v mystat,v mystat,vstatname
3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’
5 /
VALUE
19540
(归档模式)执行普通INSERT语句:
SQL> insert into t01 select * from dba_objects;
11698 rows created.
(归档模式)普通INSERT方式产生的redo大小:
SQL> select value
2 from v mystat,v mystat,vstatname
3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’
5 /
VALUE
1218884
(归档模式)采用HINT /+ append/执行INSERT语句:
SQL> insert /+ append / into t01 select * from dba_objects;
11698 rows created.
(归档模式)查询带/+ append/的INSERT执行后,当前redo大小:
SQL> select value
2 from v mystat,v mystat,vstatname
3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’;
VALUE
2451664
(归档模式)计算使用HINT(/+ append/)和普通INSERT语句分别产生的redo大小:
SQL> select (2451664-1218884) redo_append,(1218884-19540) from dual;
REDO_APPEND (1218884-19540)
1232780 1199344
可见,在归档模式下,采用HINT与普通INSERT方式产生的redo量是相当的,且略大于普通INSERT语句产生的redo量。
再看一种情况,归档模式,T01也是LOGGING模式
SQL> select value
2 from v mystat,v mystat,vstatname
3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’
5 /
VALUE
2541780
SQL> insert /+ append nologging / into t01 select * from dba_objects;
或者执行:
SQL> insert /+ append / into t01 nologging select * from dba_objects;
也将产生redo的量为:1233040。
最后一种情况:
(归档模式)修改T01的属性为NOLOGGING:
SQL> alter table t01 nologging;
Table altered.
SQL> select table_name,logging from dba_tables where table_name=’T01’;
TABLE_NAME LOG
T01 NO
(归档模式)查看当前redo值:
SQL> select value
2 from v mystat,v mystat,vstatname
3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’
5 /
VALUE
5010600
(归档模式)执行普通INSERT语句:
SQL> insert into t01 select * from dba_objects;
11698 rows created.
SQL> select value
2 from v mystat,v mystat,vstatname
3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’
5 /
VALUE
6209848
(归档模式)采用HINT /+ append/执行INSERT语句:
SQL> insert /+ append / into t01 select * from dba_objects;
11698 rows created.
SQL> select value
2 from v mystat,v mystat,vstatname
3 where vmystat.statistic#=vmystat.statistic#=vstatname.statistic#
4 and v$statname.name=’redo size’
5 /
VALUE
6210536
(归档模式)计算两者产生的redo差值:
SQL> select (6210536-6209848) redo_append,(6209848-5010600) redo from dual;
REDO_APPEND REDO
688 1199248
可见,在归档模式下,将表调整为NOLOGGING,产生的redo量是最少的!
对比一下:
非归档,T01(LOGGING),普通INSERT语句产生的redo值:1255940
非归档,T01(LOGGING),HINT /+append/,产生的redo值:2416
归档,T01(LOGGING),普通INSERT语句产生的redo值:1199344
归档,T01(LOGGING), HINT /+ append/,产生的redo值:1232780
归档,T01(LOGGING),/+append/ + nologging,产生的redo值:1233040
归档,T01(NOLOGGING),普通INSERT语句产生的redo值:688
归档,T01(NOLOGGING),HINT /+append/,产生的redo值:1199248
综合以上的数据,可以明白,如果想INSERT语句执行的更快,产生更少的redo,分两种情况:
非归档模式:在INSERT语句中使用HINT /+ append /
归档模式:将目标表修改为NOLOGGING(alter table xxx nologging),然后在INSERT语句中使用HINT /+ append /.
[@more@]
关于加快INSERT语句执行速度和 HINT /*+ append*/及nologging的使用相关推荐
- lol服务器显示40ms,一个简单insert 语句执行 40ms 原因剖析
背景:一个简单的带有主键的insert 语句,居然要 40ms ,开发受不了,要求降低 因此我们要关注的的 数据从插入落地的IO 中间都干了什么 一.MySQL的文件 首先简单介绍一下MySQL的数据 ...
- 2022-06-01 postgres的insert语句执行的关键流程
摘要: postgres的语句执行可以分为客户端连接层, 查询分析层, 执行计划层,存储层. 本文记录insert语句在源码中如何执行的. 流程概述: 执行流程: 这里我们将介绍为了获取结果,一个查询 ...
- 使用PyPy加快Python程序执行速度
Python可以说是近年来比较火的编程语言之一了,Python的优点就不多说了,写过Python的同学应该都有所体验,Python独有的一些特性,写起来真实太舒服了,但是老实讲,Python也没有像各 ...
- MySQL · 源码分析 · 一条insert语句的执行过程
本文只分析了insert语句执行的主路径,和路径上部分关键函数,很多细节没有深入,留给读者继续分析 create table t1(id int); insert into t1 values(1) ...
- mysql insert执行过程_MySQL · 源码分析 · 一条insert语句的执行过程
本文只分析了insert语句执行的主路径,和路径上部分关键函数,很多细节没有深入,留给读者继续分析 create table t1(id int); insert into t1 values(1) ...
- SQL查询语句执行顺序详解
查询操作是关系数据库中使用最为频繁的操作,也是构成其他SQL语句(如DELETE.UPDATE)的基础.当要删除或更新某些记录时,首先要查询出这些记录,然后再对其进行相应的SQL操作.因此基于SELE ...
- MyBatis—insert语句返回主键和selectKey标签
本文已同步至个人博客liaosi's blog - MyBatis-insert语句返回主键和selectKey标签 往数据库中插入一条记录后,有时候我们需要这条记录的主键,用于后续的操作.如果在插入 ...
- 将insert语句转化为select语句,进行校验,验证是否插入成功
前言 公司的测试和运维不太懂sql,每次将sql文件交给他们到测试或者生产数据库中执行sql的时候,他们都是全部执行,不看是否执行成功.因此,就会导致有些insert语句没有执行成功,等到功能验证 ...
- Oracle insert语句慢的背后
为什么80%的码农都做不了架构师?>>> 问题:用户反映一个insert语句执行很慢. 1.检查表索引并不多,相比表,索引确实有点大,但应该不是问题所在. SQL> se ...
最新文章
- CentOS 7下安装UCSF Chimera
- Cookie和Session-学习笔记04【Session之验证码案例】
- kaggle奖牌发放体系(转)
- pythoni手机版下载_Python进度栏和下载
- mybatis association 问题
- 关于有默认值的字段在用EF做插入操作时的思考(续)
- 微信小程序最基本代码入门
- SAP UI5 SmartForm 智能表单控件的使用方法介绍试读版
- Html5固定链接生成二维码的技巧
- Java基础编程实现2-面向对象-类
- [功不唐捐-2013]_强哥的无敌异或
- 网络Sniffing原理
- 夜光 :AGV 导航策略总体方案设计
- linux+zip+加密+无交互,Linux下zip加密压缩
- ae制h5文字动画_对于8个华丽的HTML5文字动画特效图文赏析
- 从身份证号提取出生日期
- jedispool 为redis保驾护航
- 字符串删除开头部分数字
- 2022-05-14:语法补全功能,比如“as soon as possible“, 当我们识别到“as soon as“时, 基本即可判定用户需要键入“possible“。 设计一个统计词频的模型,
- Ma键盘与Windows快捷键对应
热门文章
- 斯坦福的“计算广告学”
- 腾讯地图html代码,腾讯地图API使用参考.html
- RAID卡原理与设置
- transformers的beam_search
- Spring之AOP系列--将方法上的注解做为切点(用@Around)
- python分段函数输入x的值求y的值_C语言编程题 有一分段函数如下,要求用scanf函数输入整数x的值,求y值并在屏幕上输出。有分段函数如下,编程实现输入整...
- DATA GUARD代码(部分)
- ffmpeg 提取音频,音频转换,添加字幕
- Linux学习之——/etc/sysconfig目录
- matlab中facedetector,Matlab人脸检测方法(Face Parts Detection)详解