oracle - 平行度是否被默默忽略?
问题描述
我的查询如下:
ALTER TABLE EMPLOYEE MODIFY LOB(DOCUMENT) (SHRINK SPACE);
表的平行度为 1:
SELECT DEGREE FROM USER_TABLES WHERE TABLE_NAME = 'EMPLOYEE';
结果:1
表 EMPLOYEE 未分区。
如果我以并行度启动相同的查询,系统不会抱怨,但它会被默默忽略吗?
ALTER TABLE EMPLOYEE MODIFY LOB(DOCUMENT) (SHRINK SPACE) PARALLEL 8;
查询会更快吗?
解决方案
DDL 操作将在以下情况下并行运行:
- 表的度数不是 1
或者
- 会话并行 ddl 已由
alter session enable parallel ddl
无论如何,在运行任何可以并行运行的 DDL 操作之前,您应该始终运行 alter session enable parallel ddl。虽然文档没有说shrink可以并行运行,但语法是允许的,所以我猜你可以测试它是否运行得更快。
非分区表和索引的并行 DDL 语句是:
CREATE INDEX
CREATE TABLE AS SELECT
ALTER INDEX REBUILD
分区表和索引的并行 DDL 语句是:
CREATE INDEX
CREATE TABLE AS SELECT
ALTER TABLE {MOVE|SPLIT|COALESCE} PARTITION
ALTER INDEX {REBUILD|SPLIT} PARTITION
例子
SQL> create table t ( c1 clob ) ;
Table created.
SQL> alter table t MODIFY LOB(c1) (SHRINK SPACE) PARALLEL 8 ;
Table altered.
代替 SHRINK,您始终可以移动段 lob,我可以保证 100% 将并行运行且速度更快。问题是,如果你有索引,就会变得无效。
更新
要移动 lob 段,您必须执行以下操作
移动 LOB:
SQL> spoolmovelob.sql
SET HEADING OFF
SET pagesize 200
SET linesize 200
select 'ALTER TABLE <owner>.'||TABLE_NAME||' MOVE LOB('||COLUMN_NAME||') STORE AS (TABLESPACE <Tablespace_name>) parallel 5 nologging;' from dba_lobs where TABLESPACE_NAME='<Tablespace_name>';
Note: The above query will include all the LOB,LOBSEGMENT,LOBINDEXES
移动表:
SQL> spool /home/oracle/moveTables.sql
SET HEADING OFF
SET PAGESIZE 200
SET LINESIZE 200
select ' ALTER TABLE <owner>.'||TABLE_NAME||' MOVE TABLESPACE <Tablespace_name>) parallel 5 nologging;' from dba_tables where owner='<owner name>';
移动索引:
SQL> spool /home/oracle/moveIndex.sql
SET HEADING OFF
SET long 9999
SET linesize 200
select 'alter index <owner>.'||index_name||' from dba_indexes 'rebuild tablespace <Tablespace_name>) online parallel X nologging;' where owner='<owner>.';
请记住将 X 替换为特定的度数。
推荐阅读
- formatting - KDB+:格式化表格中的值
- colors - 无法使用调色板用颜色填充对象
- c# - 如何将从 datagridview 显示的选定数据传递给 CrystalReportViewer
- javascript - 我可以在 django 项目中使用反应路由器吗?
- javascript - 从选中的单选按钮传递整数数组而不是数字字符串
- python - 在不知道确切长度的情况下从大型 csv 中选择行子集时使用 numpy.random.seed()
- ios - 如何在背景中将渐变颜色设置为 UIButton?
- r - 如何在 CentOS 中安装特定版本的 R 3.3.1
- javascript - 制作 React 状态数组的浅拷贝并修改该浅拷贝是否安全?
- python - 给np数组中的字符串赋值,转换为int,计算加权平均值