首页
学习
活动
专区
圈层
工具
发布

【DB笔试面试594】在Oracle中,关键字NOLOGGING、APPEND和PARALLEL提高DML性能方面有什么差别?

♣ 题目部分 在Oracle中,关键字NOLOGGING、APPEND和PARALLEL提高DML性能方面有什么差别?...并行执行的使用范围 Oracle的并行技术在下面的场景中可以使用: (1)PARALLEL QUERY(并行查询,简称PQ)。...③ SQL语句中引用的对象被设置了并行属性。在表和索引的定义中增加并行度属性,该属性可以在创建表和索引时设置,也可对已创建的表和索引的并行度属性进行修改。...当需求增加时,Oracle数据库从实例启动时的进程数增加到该参数值。在默认值计算公式中,实例上赋予正在使用的concurrent_parallel_users的值和内存管理设置相关。...当PARALLEL_DEGREE_POLICY被设置为AUTO时,Oracle数据库将会基于执行计划中操作的成本和硬件特性来判断是否使用并行。

1.9K20

【DB笔试面试573】在Oracle中,常用Hint有哪些?

但对于书写操作大数据量的SQL而言,其SQL的书写则需要先了解一下执行计划是否最优或满足生产需要。通常当从开发环境迁移到生产环境下时,往往会出现此类情况。 例如:假设有一张客户表,在客户类别上有索引。...Oracle可以通过将该隐含参数设置为TRUE,使得Oracle优化器忽略语句中所有的Hint。...INSERT /*+ APPEND,PARALLEL(T1) */ INTO T1 SELECT * FROM T2; 2....INSERT /*+ PARALLEL(T1), APPEND */ INTO T1 SELECT * FROM T2; 3....在第4条SQL中,THIS并不是一个关键字,所以,APPEND提示有效。为了避免这样的情况发生,当在SQL中书写Hint时,在/*+ */这种结构内只写Hint,而不要写逗号,或者是其它的注释。

1.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Oracle优化08-并行执行

    ---- 并行执行的适用范围 Oracle的并行技术在下面的场景中可以使用: Parallel Query(并行查询) Parallel DDL(并行DDL操作,如建表,建索引等) Parallel DML...(并行DML操作,如insert,update,delete等) 并行查询 并行查询可以在查询语句,子查询语句中使用,但是不可以使用在一个远程引用的对象上(如DBLINK)....---- 创建索引的并行执行 创建索引时使用并行方式在系统资源充足的时候会使性能得到很大的提高,特别是在OLAP系统上对一些很大的表创建索引时更是如此。...---- 并行执行的设定 并行相关的初始化参数 parallel_min_servers=n 在初始化参数中设置了这个值,Oracle 在启动的时候就会预先启动N个并行服务进程,当SQL执行并行操作时,...在insert 的SQL中使用APPEND,如: insert /*+append */ into t select * from t1; 还可以在SQL*LOADER里面使用直接加载: Sqlldr

    52420

    常见Oracle HINT的用法

    例如,如果我们认为对于一个特定的语句,执行全表扫描要比执行索引扫描更有效,则我们就可以指示优化器使用全表扫描。在Oracle 中,是通过为语句添加 Hints(提示)来实现干预优化器优化的目的。...不建议在代码中使用hint,在代码使用hint使得CBO无法根据实际的数据状态选择正确的执行计划。...,且我们并没有在建立索引时指定不能为空,索引如果CBO选择在索引上进行count时,但索引字段上的值为空时,结果将不准确,故CBO没有选择索引。 ...  在多表关联查询中,指定使用nest loops方式进行多表关联。...select /*+ use_hash(t,t1) */ t.* from t,t1 where t.id=t1.id; 在多表关联查询中,指定使用hash join方式进行多表关联,并指定表t为驱动表

    30700

    从逻辑入手优化数据库性能

    模块A向接口表内不断插入待处理的数据,模块B定时将其中状态为“未处理”的数据(对应stat_id为“I”)取出进行后续工作,处理完成后再从接口表内delete掉刚刚处理的部分数据,如此往复。...红框内的代码,实际上是程序开发人员为防止在模块B出现问题时出现接口表积压的问题而采取的措施,一旦积压数据超过8000行,就降低插入的速度。...此类接口表及对应的逻辑具有较高的“数据变更/数据查询比”,该比例是建立索引时需要考虑的因素之一,如果某个表对数据的变更操作(增删改)与对该表内数据进行查询的比例超过1:1就要结合insert、delete...因此接口表上一般都不会建立索引。 优化方案 以上代码使用变量iv_count进行计数,每循环1000次进行积压量判断,因此在7001至8000范围内必然会有一次积压量查询被发起。...该方案还可以结合oracle多线程部分替代parallel,具体方法是将待处理的分割sql包装到单独的存储过程中,在主存储过程中通过job调用,这样就达到了人工控制多线程的效果。

    1.6K70

    Oracle优化06-Hint

    提供了使用Hint的方式在SQL中设定优化器的类型为CBO或者RBO。...例如,如果我们认为对于一个特定的语句,执行全表扫描要比执行索引扫描更有效,则我们就可以指示优化器使用全表扫描。 在Oracle中,是通过为语句添加 Hint(提示)来实现干预优化器优化的目的。...---- 查询转换Hint ? ---- 其他Hint ? ---- Hint详解 在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1....当CBO 模式设置为ALL_ROWS时,Oracle 会用最快的速度将SQL执行完毕,将结果集全部返回,它和FIRST_ROWS(n)的区别在于,ALL_ROWS强调以最快的速度将SQL执行完毕,并将所有的结果集反馈回来...在多表关联查询中,指定使用hash join方式进行多表关联。

    1.4K20

    Oracle Hints详细解释

    比如,假设我们觉得对于一个特定的语句,运行全表扫描要比运行索引扫描更有效,则我们就能够指示优化器使用全表扫描。 在Oracle中,是通过为语句加入 Hints(提示)来实现干预优化器优化的目的。...我们能够使用凝视(comment)来为一个语句加入Hints,一个语句块仅仅能有一个凝视。.../*+INDEX_COMBINE*/   为指定表选择位图訪问路经,假设INDEX_COMBINE中没有提供作为參数的索引,将选择出位图索引的布尔组合方式.   .../*+CACHE(TABLE)*/   当进行全表扫描时,CACHE提示可以将表的检索块放置在缓冲区缓存中近期最少列表LRU的近期使用端   比如:   SELECT /*+FULL(BSEMPMS.../*+NOCACHE(TABLE)*/   当进行全表扫描时,CACHE提示可以将表的检索块放置在缓冲区缓存中近期最少列表LRU的近期使用端   比如:   SELECT /*+FULL(BSEMPMS

    48410

    Oracle Hints具体解释

    比如,假设我们觉得对于一个特定的语句,运行全表扫描要比运行索引扫描更有效,则我们就能够指示优化器使用全表扫描。在Oracle中,是通过为语句加入� Hints(提示)来实现干预优化器优化的目的。...我们能够使用凝视(comment)来为一个语句加入�Hints,一个语句块仅仅能有一个凝视,并且凝视仅仅能放在SELECT, UPDATE, or DELETEkeyword的后面 使用Oracle.../*+INDEX_COMBINE*/   为指定表选择位图訪问路经,假设INDEX_COMBINE中没有提供作为參数的索引,将选择出位图索引的布尔组合方式.   .../*+CACHE(TABLE)*/   当进行全表扫描时,CACHE提示可以将表的检索块放置在缓冲区缓存中近期最少列表LRU的近期使用端   比如:   SELECT /*+FULL(.../*+NOCACHE(TABLE)*/   当进行全表扫描时,CACHE提示可以将表的检索块放置在缓冲区缓存中近期最少列表LRU的近期使用端   比如:   SELECT /*+FULL

    54820

    SQL优化:一篇文章说清楚Oracle Hint的正确使用姿势

    如果在定义表时指定了PARALLEL,那么在能够使用并行操作的情况下,即使没有使用该提示,优化器也会按照指定的并行级别选择并行操作。...但是如果想在DELETE、INSERT、UPDATE、MERGE等DML操作中使用并行操作,则必须要在会话中设置ALTER SESSION ENABLE PARALLEL DML。...在某个会话中所设置的并行级别也可以被引用在内部的GROUP BY或者排序操作中。在并行操作中如果出现了某个限制要素,则该提示将被忽略。...7、其他相关的 APPEND 让数据库以直接加载的方式(direct load)将数据加载入库。这个提示不会检查当前是否有插入所需要的块空间,相反它会直接将数据添加到新块中。...APPEND_VALUES 在11.2中,Oracle新增了APPEND_VALUES提示,使得INSERT INTO VALUES语句也可以使用直接路径插入。

    10.1K340

    【DB笔试面试352】什么是不可用索引(Unusable Indexes),哪些操作会导致索引变为不可用即失效状态?

    Q 题目 在Oracle数据库中,什么是不可用索引(Unusable Indexes),哪些操作会导致索引变为不可用(unusable)即失效状态?...l 在本地索引中,可以设置某个分区的索引为UNUSABLE。 l 一般情况下,CBO不考虑使用UNUSABLE状态的索引,包含分区表。...参数值true | false 当参数设置为true时(默认),当数据库遇到不可用索引时,只会忽略而不会提示任何错误信息;同时即使该表上带有不可用的索引或索引分区,也可以针对该表执行DML操作,针对不可用索引对应的...在进行DML(INSERT和UPDATE)操作时,如果是唯一索引,那么无论该参数的值设置为何值,Oracle都会去校验索引的可用性。如果索引不可用,那么就会报错ORA-01502。...在SQL*Loader加载过程中会维护索引,由于数据量比较大,在SQL*Loader加载过程中出现异常情况,也会导致Oracle来不及维护索引,导致索引处于失效状态,影响查询和加载。

    1.6K20

    表段、索引段上的LOGGING与NOLOGGING

    本文介绍了在表段,索引段使用 LOGGING与NOLOGGING时产生redo的大小以及DIRECT INSERT APPEND 的使用方法。...一、表段,索引段上使用一般DDL,DML时,LOGGING与NOLOGGING情况 1.查看数据库的归档模式 有关设置日志归档模式的问题,请参考: Oracle 联机重做日志文件(ONLINE...append模式时产生的redo量 3766404-2562664=1203740 redo size 3766404 c.redo的比较 在具有logging属性对象中,使用append模式时产生的...redo量1284740-1281060=3680, 普通insert比使用append insert多产生/3680=341倍redo 在具有nologging属性对象中,使用append insert...4.direct insert append使用时的注意事项 a.当使用insert into ... values语句时,不能够使用append方式 b.append方式为批量插入的记录,因此新插入的记录被存储在

    2K20

    触类旁通:那些关于 TBL$OR$IDX$PART$NUM 的诡异案例和知识

    SQL 出现在 AWR 报告的 TOP SQL中时,就需要注意,是否触发了BUG。...简单来说,就是Oracle在子分区级别执行子查询分区剪裁时,调用的内部递归SQL,因为缺少变量传入而出错,其解决方案是,禁用子查询谓词分区剪裁。...SQL就一目了然了,因为其使用了 4 个并行度,并行执行时间被累计: MERGE /*+ APPEND NOLOGGING PARALLEL ("TRANS_DEPOSITS", 4) */ INTO...注意:由于在很多场景下遇到问题,初始化配置数据库时,可以考虑将参数 _subquery_pruning_enabled 设置为 False,以规避可能遇到的种种问题。...大家知道,在分区表中,如果创建全局索引,当我们对分区进行删除、截断等操作时,全局索引会失效,除非增加关键字 UPDATE GLOBAL INDEXES 同时维护索引,但是增加这个关键字又可能导致分区维护过慢

    1.2K40

    关于如何在PostgreSQL中调整数据库参数和配置的综合指南

    它不分配实际内存,而是告诉优化器内核中可用的缓存量。这是使用索引成本估计的一个因素;值越高,使用索引扫描的可能性越大,而值越低,使用顺序扫描的可能性越大。...如果值设置得太低,查询规划器可以决定不使用某些索引,即使它们会有帮助。还应该考虑不同表上并发查询的预期数量,因为它们必须共享可用空间。因此,设置一个大的值总是有益的。...对于上述查询,我们的work_mem只有2MB。出于测试目的,让我们将其增加到256MB,看看是否对成本有任何影响。...10MB时,索引创建时间为170091.371毫秒,但当我们将maintenance_work_mem设置增加到256MB时,索引创建时间减少到111274.903毫秒。...运行备用服务器时,您必须将此参数设置为与主服务器相同或更高的值。否则,将不允许在备用服务器上进行查询。

    30710

    Oracle 每日一题系列合集

    在 Oracle 中,下面哪个命令可以修改用户的默认密码有效期为无限制?(单选) A. ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90; B....【正确答案】 12.DBWn进程是Oracle负责将脏块写入磁盘的后台进程,如果我们要加快它写出块的速度,可以配置多个DBWn进程,那么在Oracle 11g中最多可以配多少个呢?...C写法错误,索引的并行是/*+ parallel_index(table_name index_name degree)*/. 20.Oracle数据库中可通过V$SORT_USAGE动态视图查询当前实例各会话临时段使用情况...INSERT INTO GT_TRANS_TAB(TMP_ID) VALUES(123); COMMIT; D、使用长字符聚合查询(如:WM_CONCAT)返回大字段或插入到全局临时表中包含大字段值,这...【正确答案】 【答案解析】ABDEF 插入到全局临时表均使用临时表空间存储,存储数据段(SEGMENT)为临时段 会话表需断开会话或使用前后使用TRUNCATE语句释放临时段 提交或回滚事务时,Oracle

    1.3K20

    那些年,我们处理过的SQL问题

    常见原因无非有以下两个: 第一:对象开启了并行(包括索引和表) 第二:SQL语句里面使用了PARALLEL的HINTS 现场兄弟说,都查了并没有上面的情况,听到他的回答,我首先对他查询的方式持怀疑态度的...至此问题明朗起来了,执行的SQL使用了默认并行度执行,受参数parallel_query_default_dop控制。既然是默认的并行度,那也应该需要设置(如果不设置,默认是1)。...查询结果截图发出来,我就开心了,这里明显有一个设置了并行度为DEFAULT(如果我们不设置就是1)的表和索引。然后确认了他们正是正在运行的sql中的对象。...问题虽然解决了,但还有一个疑问没有解开,什么情况下会设置的并行度为DEFUALT呢?正常创建索引和表都是1。...数据库,也就是程序部署在A数据库中,而该SQL实际执行端在B数据库。

    68720

    并行的常见问题和注意事项

    关于Oracle中的并行,可以说是一把双刃剑,用得好,可以充分利用系统资源,提升数据库的处理能力,用得不好,可能会适得其反。...如果几亿甚至十几亿记录数的表全表扫描不使用并行,SQL的执行时间会相当长,特别是表在SQL执行的过程中如果还有其他session的DML操作的时候。...3、并行hint的写法 通常我们都会使用hint在SQL级别设置并行,一般不在表上和索引上设置并行度,所以我们上面并行创建表和索引的例子,后面都伴随着一个noparallel,如果在创建表或索引时使用了并行...11g+: 只要在整个sql的任何一个关键字(select、update、insert、delete、merge)后面出现一次parallel(n),那么整个SQL相关的表,都会使用并行,在写法上非常的简洁...parallel的hint, 也会使用并行度为n的并行。

    78220

    【OCP最新题库解析(052)--题50】 Which two are true about space

    当执行INSERT语句时,Oracle首先在FREELIST列表上搜索可用的空闲数据块,搜索成功之后将数据插入到那个空闲块。块在FREELIST列表中的可用性由PCTFREE参数值来决定。...从Oracle 9i开始,引入了ASSM,它让Oracle自动管理FREELIST。在ASSM里,Oracle使用位图方式来标记数据块是否可用,这种数据块的空间管理方式比用一个列表来管理效率更高。...当创建或者更改任何表和索引的时候,Oracle在空间控制方面使用这两个存储参数。...当数据块中的FREE空间小于PCTFREE设置的空间时,该数据块从FREELIST中去掉,当块由于DML操作FREE空间大于PCTUSED设置的空间时,该数据库块将被添加在FREELIST链表中。...可用状态的块可以执行插入操作,不可用状态的块只能执行删除和修改,可用状态的块被放在FREELIST中。

    45110

    enq HW – contention分析

    据官方文档描述,Oracle设计 HW – contention队列意义在于对于数据库资源来讲,对于保护内存结构都需要“锁”的概念来控制并发,当申请超过高水位空间时,为防止多个进程同时修改HWM而提供的锁称为...三:enq:HW–contention问题分析 同步工具大概实现方式: 根据之前等待事件解释,我们是积压数据后,源端多个表对应到目标端一个表,类似A001写入A到A031写入A,理论上并发写入时对应进程空间不够时需要高水位之上的空间时才需要申请...经过分析性能测试工具每次写入的空间都在高水位(使用append hint强制),造成每次需要排他锁造成阻塞其他delete、update、insert在此表上。...HW出现场景: 1、大并发插入造成HW 2、使用APPEND方式 3、表存在LOB字段 具体处理思路: 1、通过ash来分析这个等待事件发生次数,单个节点1小时内等待次数高达6000次以上.实际环境中更严重...同步工具数据库日志解析成消息写入KAFKA中,然后通过从KAFKA写入ORACLE数据库临时表中(针对更新多次的行,取最后一行方式来避免merge报错),通过设置写入batch size以及时间阈值来作为终点

    1.8K30
    领券