关于 truncate table 的一点学习札记

---下面整理笔记来之 itpub 的各位前辈的语录。这里做了一个汇总。仅供学习。

truncate table后,oracle会回收表和其表中所在的索引到initial 大小,也就是初始分配的segments大小

truncate和drop一样都是ddl语句, 操作马上生效,原数据不放到rollback segment中,不能回滚

truncate table运行非常慢可能有下面几个原因:

首先要明确truncate table是DDL操作。会重置HWM。

1.查看是不是DML操作锁定了某些记录

2.segment header竞争

truncate 表慢可能跟extent的数量有关系

比方说。你一个表 size 100M,每一个10M ,10个extent

而又一个表 size 50M ,每一个8K,6400个extent

那么,第二个表的truncate就会比第一个慢上好多

通常来说是因为extent 太多,truncate时在做回收extent的动作

这也是 local management比 dictionary management好的当中一点。

假设操心下次碰到相同问题

能够考虑使用

truncate table test reuse STORAGE 的语句,能够避免hung在回收extent上。

就要用到 分次回收 的方式了

比方说。100M的表,每次回收 20M,在感觉上可能好点。

truncate table t4 reuse STORAGE ;

alter table test_tun deallocate unused keep 80M;

alter table test_tun deallocate unused keep 60M;

alter table test_tun deallocate unused keep 40M;

alter table test_tun deallocate unused keep 20M;

truncate table test_tun  drop storage;

假设truncate table 很慢 ,能够依照下面方法来诊断:

1.请查询 对应的session 在 v$session_wait 视图中的等待事件

2.能够用oradebug hanganalyze分析系统挂起的原因

3.假设为了试验目的。更能够做个10046 level 8的event

###################

### BUG lists

###################

truncate的时候,dbwr占用cpu高不高?能够试一下以下文档中的workround (alter system flush buffer_cache; 后再truncate),假设生效应该就是了。你能够升到10.2.0.4.3

是不是这个bug不好说,假设日志的大小不足导致日志切换hang住,引起dbwr的等待,出现不少free buffer busy的等待,而truncate又要做checkpoint,所以这时候前台进程也要等待dbwr,导致enqueue RO的wait变长

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

Bug 8544896  Waits for "enq: RO - fast object reuse" with high DBWR CPU

This note gives a brief overview of bug 8544896.

The content was last updated on: 08-JAN-2010

Click here for details of each of the sections below.

Affects:

Product (Component) Oracle Server (Rdbms)

Range of versions believed to be affected Versions >= 10.2.0.4

Versions confirmed as being affected 10.2.0.4

Platforms affected Generic (all / most platforms affected)

It is believed to be a regression in default behaviour thus:

Regression introduced in 10.2.0.4

Fixed:

This issue is fixed in 10.2.0.4.3 (Patch Set Update)

Symptoms: Related To:

Performance Affected (General)

Performance Of Certain Operations Affected

Waits for "enq: RO - fast object reuse"

Truncate

_DB_FAST_OBJ_TRUNCATE

Description

This problem is introduced in 10.2.0.4.

Sessions can wait on "enq: RO - fast object reuse" while DBWR consumes

lots of CPU when performing truncate type operations.

Workaround

Flush the buffer cache before truncating

OR

set _db_fast_obj_truncate = FALSE.

Please note: The above is a summary description only. Actual symptoms can vary. Matching to any symptoms here does not confirm that you are encountering this problem. Always consult with Oracle Support for advice.

References

Bug:8544896 (This link will only work for PUBLISHED bugs)

Note:245840.1 Information on the sections in this article

时间: 2024-12-24 19:10:48

关于 truncate table 的一点学习札记的相关文章

MySQL DELETE语句和TRUNCATE TABLE语句的区别

MySQL DELETE语句和TRUNCATE TABLE语句的区别 2010-10-08 16:05 佚名 互联网 字号:T | T 在MySQL数据库中,DELETE语句和TRUNCATE TABLE语句都可以用来删除数据,但是这两种语句还是有着其区别的,下文就为您介绍这二者的差别所在. AD:干货来了,不要等!WOT2015 北京站演讲PPT开放下载! MySQL DELETE语句和TRUNCATE TABLE语句功能相似,但是二者究竟有何区别呢?下文就将为您分析MySQL DELETE语

Informix学习札记

Informix学习札记: 一,启动关闭数据库脚本 启动:oninit 关闭:onmode -k 二,导入导出数据库 导出数据库 将数据库public_bak导出到目录/usr/informix/export中: $ dbexport public_bak -o /usr/informix/export 执行结束后,会在export目录下,生成一个pubic_bak.exp目录.此目录下,有数据库创建对象的语句及数据. $ pwd /usr/informix/export $ ls public

TRUNCATE TABLE 与 DELETE table 区别

语法 TRUNCATE TABLE name;参数  TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行. TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少. 原因: DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项. TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放. TRUNCATE TABLE 删除表中的所有行,但表结构

[Hive - LanguageManual] Create/Drop/Alter Database Create/Drop/Truncate Table

Hive Data Definition Language Hive Data Definition Language Overview Create/Drop/Alter Database Create/Drop/Truncate Table Alter Table/Partition/Column Create/Drop/Alter View Create/Drop/Alter Index Create/Drop Function Create/Drop/Grant/Revoke Roles

truncate table语句和delete table语句的区别

truncate table 表名 ; delete from 表名; 都是用来删除表中所有的记录,前者删除数据后表的标识列会重新开始编号,它比delete语句使用的系统资源和事务日志资源更少,但是表的结构,列,约束,索引等不会被改动,同时不能用于有外键约束引用的表,在实际工作中,不建议使用truncate ,因为使用它删除的数据不能恢复还原,而使用delete的话就可以恢复

Truncate Table 用法

TRUNCATE TABLE 删除表中的所有行,而不记录单个行删除操作. 语法 TRUNCATE TABLE name 参数 name 是要截断的表的名称或要删除其全部行的表的名称. 注释 TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少. DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项.TRUNCATE TABLE 通过

truncate table 和delete

delete table 和 truncate table 使用delete语句删除数据的一般语法格式: delete [from] {table_name.view_name} [where<search_condition>] 将XS表中的所有行数据删除 delete XS 执行完后,发现XS表中的数据都删除了,但是表的结构什么都还在. truncate truncate table语句将删除指定表中所有数据,因此也称其为清除表数据语句,一般格式如下 truncate table name

Java 学习札记(三)免安装版TomCat中tomcat6w.exe的运行

1.使用环境 很多时候我们用的是官网的解压免安装版的Tomcat,相比安装Tomcat除了少了安装步骤以外还少了tomcat6w.exe运行所需要的环境变量,所以一般Java开发免安装版的已经足够使用了,但是如果部署服务的时候我们不可能只运行startup.bat文件,我们需要新建一个服务并可以通过tomcat6w.exe启动和关闭服务. 2.无法运行tomcat6w.exe (1)提示错误: 运行tomcat6w.exe ,提示 指定的服务未安装 unable to open the serv

truncate table和delete table 的区别

truncate table和不带 where 的 detele 功能一样,都是删除表中的所有数据. 但TRUNCATE TABLE 速度更快,占用的日志更少,这是因为 TRUNCATE TABLE 直接释放数据页并且在事务日志中也只记录数据页的释放,而 DELETE 是一行一行地删除,在事务日志中要记录每一条记录的删除. 那么可不可以用 TRUNCATE TABLE 代替不带 WHERE 的 DELETE 呢?在以下情况是不行的: 1.要保留标识的情况下不能用 TRUNCATE TABLE,因