PDML

enq: TM

拜拜、爱过 提交于 2021-02-18 21:49:21
今天下午,有台服务器出现异常,响应特别慢,io等待奇高,awr top 5事件如下: 经回查ash,找到了造成这些事件的sql语句,如下: select * from v$active_session_history where event = ' enq: TM - contention ' select * from v$active_session_history where event = ' enq: KO - fast object checkpoint ' enq-TM的事件主要由insert /*+ append */语句引起,如下: enq-TM是一个表级别锁,在本例中主要是由于append引起。 TM 锁在下列场景中被申请: 在OPS(早期的RAC)中LGWR会以ID1=0 & ID2=0去申请该队列锁来检查 DML_LOCKS 在所有实例中是全0还是全非0 当一个单表或分区 需要做不同的表/分区操作时,ORACLE需要协调这些操作,所以需要申请该队列锁。包括: 启用参考约束 referential constraints 修改约束从DIASABLE NOVALIDATE 到DISABLE VALIDATE 重建IOT 创建视图或者修改ALTER视图时可能需要申请该队列锁 分析表统计信息或validate structure时 一些PDML并行DML操作

Oracle分区表

北战南征 提交于 2020-11-18 23:55:26
---恢复内容开始--- 转至https://www.cnblogs.com/Dreamer-1/p/6108247.html ---------------------------------------------------------------------------------------------------------------------------------------- 一:什么是分区(Partition)? 分区是将一个表或索引 物理地 分解为多个更小、更可管理的部分。 分区对应用透明 ,即对访问数据库的应用而言,逻辑上讲只有一个表或一个 索引 (相当于应用“看到”的只是一个表或索引),但在物理上这个表或索引可能由数十个物理分区组成。 每个分区都是一个独立的对象,可以独自处理,也可以作为一个更大对象的一部分进行处理。 --------------------------Tips:分表与分区表-------------------------- 分表是将一个大表按照一定的规则分解成多张具有 独立存储空间 的 实体表 (子表); 比如一个订单表 ORDER,采用年月分表后可能就会除 ORDER 本身外还生成许多如 ORDER_201601、ORDER_201602、ORDER_201603… 等的子表。 分表在逻辑上是多张不同的表,而分区表在逻辑上是一张表

《oracle编程艺术:深入数据库体系结构》之 十四 并行执行

故事扮演 提交于 2019-12-03 03:55:42
所谓并行执行,是指能够将一个大型串行任务(任何DML,或者一般的DDL)物理地划分为多个较小的部分,这些较小的部分可以同时得到处理。 1 何时使用并行执行 并行执行本质上是一个 不可扩缩 的解决方案,设计为允许单个用户或每个特定SQL语句占用数据库的所有资源。如果某个特性允许一个人使用所有可用的资源,倘若再允许两个人使用这个特性,就会遇到明显的竞争问题。 在应用并行执行之前,需要保证以下两点成立: 必须有一个非常大的任务 ,如对50GB数据进行全面扫描。 必须有足够的可用资源 。在并行全面扫描50GB数据之前,你要确保有足够的空闲CPU(以容纳并行进程),还要有足够的I/O通道,等等。 2 并行查询 scott@ORCL>explain plan for 2 select count(status) from big_table; 已解释。 scott@ORCL>select * from table(dbms_xplan.display); PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- -------------------------------------------------------------------------