clob欄位對於parallel dml的限制
今天發現包含clob欄位的表不能parallel insert
實驗如下:
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - Productio
NLSRTL Version 10.2.0.4.0 - Production
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - Productio
NLSRTL Version 10.2.0.4.0 - Production
5 rows selected.
SQL> create table test_lock (id number);
Table created.
SQL> alter session enable parallel dml;
Session altered.
SQL> explain plan for insert /*+ parallel(test_lock,4) */ into test_lock select object_id from user_objects;
Explained.
SQL> @s_xplan
執行計劃如下:
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 640494208
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 640494208
----------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
----------------------------------------------------------------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 5307 | 68991 | 1792 (2)| 00:00:22 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10001 | 5307 | 68991 | 1792 (2)| 00:00:22 | Q1,01 | P->S | QC (RAND) |
| 3 | LOAD AS SELECT | TEST_LOCK | | | | | Q1,01 | PCWP | |
| 4 | BUFFER SORT | | | | | | Q1,01 | PCWC | |
| 5 | PX RECEIVE | | 5307 | 68991 | 1792 (2)| 00:00:22 | Q1,01 | PCWP | |
| 6 | PX SEND ROUND-ROBIN | :TQ10000 | 5307 | 68991 | 1792 (2)| 00:00:22 | | S->P | RND-ROBIN |
| 7 | VIEW | USER_OBJECTS | 5307 | 68991 | 1792 (2)| 00:00:22 | | | |
| 8 | UNION-ALL | | | | | | | | |
|* 9 | FILTER | | | | | | | | |
|* 10 | TABLE ACCESS FULL | OBJ$ | 6197 | 205K| 1790 (2)| 00:00:22 | | | |
|* 11 | TABLE ACCESS BY INDEX ROWID| IND$ | 1 | 9 | 2 (0)| 00:00:01 | | | |
|* 12 | INDEX UNIQUE SCAN | I_IND1 | 1 | | 1 (0)| 00:00:01 | | | |
|* 13 | INDEX RANGE SCAN | I_LINK1 | 8 | 32 | 2 (0)| 00:00:01 | | | |
----------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
----------------------------------------------------------------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 5307 | 68991 | 1792 (2)| 00:00:22 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10001 | 5307 | 68991 | 1792 (2)| 00:00:22 | Q1,01 | P->S | QC (RAND) |
| 3 | LOAD AS SELECT | TEST_LOCK | | | | | Q1,01 | PCWP | |
| 4 | BUFFER SORT | | | | | | Q1,01 | PCWC | |
| 5 | PX RECEIVE | | 5307 | 68991 | 1792 (2)| 00:00:22 | Q1,01 | PCWP | |
| 6 | PX SEND ROUND-ROBIN | :TQ10000 | 5307 | 68991 | 1792 (2)| 00:00:22 | | S->P | RND-ROBIN |
| 7 | VIEW | USER_OBJECTS | 5307 | 68991 | 1792 (2)| 00:00:22 | | | |
| 8 | UNION-ALL | | | | | | | | |
|* 9 | FILTER | | | | | | | | |
|* 10 | TABLE ACCESS FULL | OBJ$ | 6197 | 205K| 1790 (2)| 00:00:22 | | | |
|* 11 | TABLE ACCESS BY INDEX ROWID| IND$ | 1 | 9 | 2 (0)| 00:00:01 | | | |
|* 12 | INDEX UNIQUE SCAN | I_IND1 | 1 | | 1 (0)| 00:00:01 | | | |
|* 13 | INDEX RANGE SCAN | I_LINK1 | 8 | 32 | 2 (0)| 00:00:01 | | | |
----------------------------------------------------------------------------------------------------------------------------------
SQL>
SQL> alter table test_lock add text clob;
Table altered.
SQL> explain plan for insert /*+ parallel(test_lock,4) */ into test_lock (id) select object_id from user_objects;
Explained.
SQL> @s_xplan
執行計劃如下:
PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 2452769860
PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 2452769860
-----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 5307 | 68991 | 1792 (2)| 00:00:22 |
| 1 | VIEW | USER_OBJECTS | 5307 | 68991 | 1792 (2)| 00:00:22 |
| 2 | UNION-ALL | | | | | |
|* 3 | FILTER | | | | | |
|* 4 | TABLE ACCESS FULL | OBJ$ | 6197 | 205K| 1790 (2)| 00:00:22 |
|* 5 | TABLE ACCESS BY INDEX ROWID| IND$ | 1 | 9 | 2 (0)| 00:00:01 |
|* 6 | INDEX UNIQUE SCAN | I_IND1 | 1 | | 1 (0)| 00:00:01 |
|* 7 | INDEX RANGE SCAN | I_LINK1 | 8 | 32 | 2 (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 5307 | 68991 | 1792 (2)| 00:00:22 |
| 1 | VIEW | USER_OBJECTS | 5307 | 68991 | 1792 (2)| 00:00:22 |
| 2 | UNION-ALL | | | | | |
|* 3 | FILTER | | | | | |
|* 4 | TABLE ACCESS FULL | OBJ$ | 6197 | 205K| 1790 (2)| 00:00:22 |
|* 5 | TABLE ACCESS BY INDEX ROWID| IND$ | 1 | 9 | 2 (0)| 00:00:01 |
|* 6 | INDEX UNIQUE SCAN | I_IND1 | 1 | | 1 (0)| 00:00:01 |
|* 7 | INDEX RANGE SCAN | I_LINK1 | 8 | 32 | 2 (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------
SQL>
計劃中沒有px了.
SQL> explain plan for update /*+ parallel(test_lock,4) */ test_lock set id = id+100;
Explained.
SQL> @s_xplan
執行計劃如下:
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 3152912665
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 3152912665
----------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
----------------------------------------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT | | 30 | 390 | 3 (0)| 00:00:01 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10000 | 30 | 390 | 3 (0)| 00:00:01 | Q1,00 | P->S | QC (RAND) |
| 3 | UPDATE | TEST_LOCK | | | | | Q1,00 | PCWP | |
| 4 | PX BLOCK ITERATOR | | 30 | 390 | 3 (0)| 00:00:01 | Q1,00 | PCWC | |
| 5 | TABLE ACCESS FULL| TEST_LOCK | 30 | 390 | 3 (0)| 00:00:01 | Q1,00 | PCWP | |
----------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
----------------------------------------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT | | 30 | 390 | 3 (0)| 00:00:01 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10000 | 30 | 390 | 3 (0)| 00:00:01 | Q1,00 | P->S | QC (RAND) |
| 3 | UPDATE | TEST_LOCK | | | | | Q1,00 | PCWP | |
| 4 | PX BLOCK ITERATOR | | 30 | 390 | 3 (0)| 00:00:01 | Q1,00 | PCWC | |
| 5 | TABLE ACCESS FULL| TEST_LOCK | 30 | 390 | 3 (0)| 00:00:01 | Q1,00 | PCWP | |
----------------------------------------------------------------------------------------------------------------
是可以parallel.注意這時test_lock是有clob欄位的.
總結:一個表是否可以進行paralle dml是有很多限制的,這種限制需要大家來總結.
從上面實驗可以看到:
對於有clob欄位的表:parallel insert 是禁止的;parallel update 確是可以的.(我想對於blob應該也時一樣的)
從上面實驗可以看到:
對於有clob欄位的表:parallel insert 是禁止的;parallel update 確是可以的.(我想對於blob應該也時一樣的)
另外:
<>的書中提到:對於Delete\update\Merge的操作,只有操作的物件是分割槽表時,Oracle才會啟用並行操作.
通過上面的測試後,parallel update 對於普通的表也時可以並行的.
<>的書中提到:對於Delete\update\Merge的操作,只有操作的物件是分割槽表時,Oracle才會啟用並行操作.
通過上面的測試後,parallel update 對於普通的表也時可以並行的.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/195110/viewspace-745353/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Parallel DMLOracleParallel
- 包括clob segment 大欄位 表的大小統計
- MySQL的欄位數量以及長度限制MySql
- 簡單介紹2種Java讀取Oracle大欄位資料(CLOB)的方法JavaOracle
- laravel-query-builder 對於欄位 值為 null的排序方式LaravelUINull排序
- 【解決方案】Oracle插入/更新CLOB欄位報ORA-01704:字串文字太長Oracle字串
- 關於Oracle的BLOB和CLOBOracle
- SQLServer索引優化(1):對於有order by欄位的建索引策略SQLServer索引優化
- 將多個JSON欄位對映到單個Java欄位JSONJava
- 欄位長度前後端是否都需要做限制?後端
- redis對hash欄位加鎖Redis
- EBS:物料搬運單檢視人限制(建立人欄位)
- MySQL 更新一個表裡的欄位等於另一個表某欄位的值MySql
- SAP ABAP DDIC 結構欄位的一些技術限制條件
- ArcGIS對欄位分割查詢操作
- MySQL學習筆記4:完整性約束限制欄位MySql筆記
- pydantic 欄位欄位校驗
- unusable index對DML/QUERY的影響Index
- SqlServer根據特定欄位分組後,對需要欄位進行分組拼接SQLServer
- 關於日期及時間欄位的查詢
- resultMap 和 resultType 的欄位對映覆蓋問題
- 【Mongo】mongo更新欄位為另一欄位的值Go
- KunlunDB對MySQL私有DML語法的支援MySql
- Laravel 對於 Mysql 欄位string型別查詢,當使用數字對這個欄位進行查詢,PHP弱型別語言導致索引失效LaravelMySql型別PHP索引
- fastadmin 新增欄位記圖片欄位AST
- mysql建立表的時候對欄位和表新增COMMENTMySql
- MySQL欄位新增註釋,但不改變欄位的型別MySql型別
- Stream流對List集合篩選重複欄位
- [20180416]clob的插入.txt
- Oracle-欄位的新增Oracle
- abc欄位數的使用
- [BUG反饋]模型管理 > 欄位管理看不見任何欄位。這表明顯有欄位、!模型
- 關於Thinkphp 使用AdvModel來讀取Blob欄位PHP
- MySQL alter 新增列對dml影響MySql
- SAP CRM銷售訂單UI上的欄位對應的資料庫表儲存欄位:requested start date和end dateUI資料庫
- oracle點陣圖索引對DML操作的影響Oracle索引
- 大數量的DML時對索引處理的技巧索引
- windows域控裡,屬性和欄位對映表Windows
- ALV雙擊對應欄位跳轉事務碼