有时候,我们全量dump oracle中的数据,如何才能让dump高效的执行呢?这个问题的关注点在于1.磁盘顺序读.2.并行.前者要需要oracle本身提供数据能够基本顺序并且程序并行扫描一段数据能够一次性取一批,后者由dump程序保证。
提供下oracle rowid分段的sql,程序就是用多线程扫描每一段数据,这里就不提供了。
select group_id,min(chartorowid(min_rowid)) min_rowid, max(chartorowid(max_rowid)) max_rowid
from (select T.min_rowid,
T.max_rowid,
T.Relative_Fno,
NTILE(分的段数) over(order by T.Relative_Fno,chartorowid(T.min_rowid)) group_id
from (select dbms_rowid.rowid_create(1,
B.data_object_id,
A.relative_fno,
A.block_id,
0) min_rowid,
dbms_rowid.rowid_create(1,
B.data_object_id,
A.relative_fno,
A.block_id + A.blocks - 1,
10000) max_rowid,A.Relative_Fno
from (select relative_fno, block_id, blocks
from sys.dba_extents
where segment_name = '表名'
and owner = '表的所有用户'
order by block_id) A,
(select data_object_id
from sys.DBA_objects
where owner = '表的所有用户'
and object_name = '表名') B
where B.data_object_id IS NOT NULL) T)
group by group_id;
分享到:
相关推荐
### Oracle全表扫描的三种优化手段 在Oracle数据库管理中,全表扫描(Full Table Scan,简称FTS)是指查询语句对整个表的数据进行读取的一种操作方式。当索引选择性较差或者表较小的时候,Oracle可能会选择全表扫描...
3. 并行查询:在并行查询模式下,全表扫描是常用方法。 4. 使用`FULL`提示:在SQL语句中明确指定`FULL`提示,会强制执行全表扫描。 5. 统计信息不准确:Oracle基于统计信息决定是否使用全表扫描,如果统计信息过时或...
- **查询优化**:利用查询分析器和执行计划,优化查询语句,避免不必要的全表扫描,提高并行查询的效率。 - **监控与调优**:定期监控并行查询的性能指标,识别瓶颈并进行针对性调优。 ### 总结 Oracle的并行处理...
- **并行全表扫描**:对于大表的查询,使用并行全表扫描可以显著提高查询速度。 - **并行索引扫描**:当查询条件涉及索引列时,可以使用并行索引扫描来加快查询速度。 ##### 4. 数据分区 - **范围分区**:根据数据...
例如,在进行全表扫描时,可以将表分成多个分区,每个分区由一个或多个并行执行服务器(Parallel Execution Server, PES)进程负责处理。 2. **并行服务器进程(Parallel Execution Server, PES)**:这些进程是由...
并行查询通常用于全表扫描、索引全扫描、大表的扫描和连接、创建大的索引、分区索引扫描、大批量插入更新和删除等操作。 启用并行查询可以通过 ALTER TABLE 语句或使用 Hints 提示,例如: SQL> ALTER TABLE T1 ...
这在全表扫描、索引全扫描、大表连接、创建大索引、分区索引扫描以及大批量的插入、更新和删除操作中尤其有用。启用并行查询可以通过ALTER TABLE命令或使用SQL查询提示(hints)来完成。 2. **并行DML(Parallel ...
- 减少RB的I/O:通过使用`CACHE`和`FULL`提示对源表执行全表扫描(FTS),使其尽可能多地进入buffer cache。 - 减少RC的I/O:设置更大的`SORT_AREA_SIZE`参数(若未使用PGA_AGGREGATE_TARGET则直接设置)。 - ...
ORACLE 采用一次读入多个数据块(database block)的方式优化全表扫描。 2. 通过 ROWID 访问表 你可以采用基于 ROWID 的访问方式,提高访问表的效率。ROWID 包含了表中记录的物理位置信息。ORACLE 采用索引(INDEX...
在传统的串行处理中,所有数据库操作都在一个CPU上顺序执行,如在描述中的SQL查询示例所示,一个处理器完成从扫描表、连接和排序到返回结果的全过程。而并行处理则将这些任务分配给多个处理器,每个处理器负责一部分...
- **SELECT**:查询语句可以在多个进程中并行执行,尤其是在进行全表扫描或索引扫描时。 - **JOIN**:联接操作可以通过并行方式加速。 - **GROUP BY** 和 **ORDER BY**:这类聚合操作也能通过并行执行提高效率。 - *...
一般推荐使用COST或RULE,避免不必要的全表扫描。 2. **访问Table的方式**:有两种主要方式,全表扫描和通过ROWID访问。全表扫描适合小表,而ROWID访问通常更快,尤其是当有索引时。索引能提供ROWID的快速访问,...
索引的优化涉及多个方面,包括选择合适的索引类型、考虑查询模式、避免全表扫描、维护索引的粒度等。例如,对于频繁查询的列创建索引,对于低选择性的列(即大部分行有相同值的列)可能不适合创建普通索引,而更适合...
- 全表扫描:Oracle会一次性读取多个数据块以优化全表扫描。虽然在某些情况下是必要的,但频繁的全表扫描会降低性能。 - ROWID访问:ROWID包含了表中记录的物理位置,通过索引快速找到ROWID能提高查询效率。创建索引...
1. 全局并行执行:所有并行执行服务器同时处理整个查询,适用于全表扫描或大范围索引扫描。 2. 分区并行执行:对于分区表,每个并行执行服务器处理一个或多个分区,适用于处理大量分区数据。 3. 子查询并行执行:...
- **Full Table Scan (全表扫描)**:通过指定`/*+ FULL(table_name) */`,可以强制执行器进行全表扫描。 - **Index Access (索引访问)**:通过`/*+ INDEX(table_name index_name) */`,可以指示优化器使用指定的索...
7. **避免全表扫描**:尽量让查询利用索引来访问数据,而不是进行全表扫描。如果表很大,全表扫描可能导致长时间阻塞。 8. **物化视图**:对于重复查询的数据,创建物化视图可预先计算结果,提供更快的查询速度。 ...
2. **避免跨分区操作**:设计应用程序时,尽量避免全表扫描和跨分区的JOIN操作。 3. **考虑分区边界**:合理设置分区边界,确保新数据能自动落入正确分区。 4. **利用分区修剪**:通过编写明智的SQL语句,让数据库...
3. 数据被分布到多个并行执行服务器(PQ1-PQ8),每个服务器负责一部分工作,如全扫描(Full Scan)销售表(SALES)。 4. 数据在服务器之间进行并行排序(SORT ORDER BY)。 5. 排序后的结果通过并行块迭代器(PX ...
正确选择索引类型(如B树、位图、函数索引等),并合理创建复合索引,可以减少全表扫描,提高查询速度。 - **执行计划分析**:理解SQL的执行计划,包括表的访问方式、连接顺序和排序操作,可以帮助识别性能瓶颈并...