diff --git a/src/sql/optimizer/ob_del_upd_log_plan.cpp b/src/sql/optimizer/ob_del_upd_log_plan.cpp index d6796c641b..d1a85afbab 100644 --- a/src/sql/optimizer/ob_del_upd_log_plan.cpp +++ b/src/sql/optimizer/ob_del_upd_log_plan.cpp @@ -994,16 +994,10 @@ int ObDelUpdLogPlan::create_pdml_delete_plan(ObLogicalOperator *&top, IndexDMLInfo *index_dml_info) { int ret = OB_SUCCESS; - bool need_exchange = true; if (OB_ISNULL(source_table_partition)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("get unexpected null", K(source_table_partition), K(ret)); - } else if (!is_index_maintenance && - OB_FAIL(check_need_exchange_for_pdml_del_upd(top, exch_info, - source_table_partition->get_table_id(), - need_exchange))) { - LOG_WARN("failed to check whether pdml need exchange for del upd", K(ret)); - } else if (need_exchange && OB_FAIL(allocate_exchange_as_top(top, exch_info))) { + } else if (OB_FAIL(allocate_exchange_as_top(top, exch_info))) { LOG_WARN("failed to allocate exchange as top", K(ret)); } else if (OB_FAIL(allocate_pdml_delete_as_top(top, is_index_maintenance, @@ -1496,16 +1490,10 @@ int ObDelUpdLogPlan::create_pdml_update_plan(ObLogicalOperator *&top, IndexDMLInfo *index_dml_info) { int ret = OB_SUCCESS; - bool need_exchange = true; if (OB_ISNULL(source_table_partition)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("get unexpected null", K(source_table_partition), K(ret)); - } else if (!is_index_maintenance && - OB_FAIL(check_need_exchange_for_pdml_del_upd(top, exch_info, - source_table_partition->get_table_id(), - need_exchange))) { - LOG_WARN("failed to check pdml need exchange for del upd", K(ret)); - } else if (OB_FAIL(need_exchange && allocate_exchange_as_top(top, exch_info))) { + } else if (OB_FAIL(allocate_exchange_as_top(top, exch_info))) { LOG_WARN("failed to allocate exchange as top", K(ret)); } else if (OB_FAIL(allocate_pdml_update_as_top(top, is_index_maintenance, diff --git a/tools/deploy/mysql_test/test_suite/pdml/r/mysql/pdml_update_part_global_index.result b/tools/deploy/mysql_test/test_suite/pdml/r/mysql/pdml_update_part_global_index.result index fda3faf2c5..5fb752ca8a 100644 --- a/tools/deploy/mysql_test/test_suite/pdml/r/mysql/pdml_update_part_global_index.result +++ b/tools/deploy/mysql_test/test_suite/pdml/r/mysql/pdml_update_part_global_index.result @@ -13,22 +13,25 @@ c1 c2 c3 6 6 6 explain update /*+ parallel(3) enable_parallel_dml */ t1 set c2 = 3; Query Plan -===================================================================================== -|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| -------------------------------------------------------------------------------------- -|0 |PX COORDINATOR | |1 |60 | -|1 |└─EXCHANGE OUT DISTR |:EX10002 |1 |60 | -|2 | └─INDEX INSERT |t1(t1_idx1)|1 |60 | -|3 | └─EXCHANGE IN DISTR | |1 |47 | -|4 | └─EXCHANGE OUT DISTR (PKEY HASH) |:EX10001 |1 |47 | -|5 | └─MATERIAL | |1 |46 | -|6 | └─INDEX DELETE |t1(t1_idx1)|1 |46 | -|7 | └─EXCHANGE IN DISTR | |1 |35 | -|8 | └─EXCHANGE OUT DISTR (PKEY HASH)|:EX10000 |1 |35 | -|9 | └─UPDATE | |1 |34 | -|10| └─PX BLOCK ITERATOR | |1 |3 | -|11| └─TABLE FULL SCAN |t1 |1 |3 | -===================================================================================== +============================================================================================= +|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| +--------------------------------------------------------------------------------------------- +|0 |PX COORDINATOR | |1 |61 | +|1 |└─EXCHANGE OUT DISTR |:EX10003 |1 |60 | +|2 | └─INDEX INSERT |t1(t1_idx1)|1 |60 | +|3 | └─EXCHANGE IN DISTR | |1 |47 | +|4 | └─EXCHANGE OUT DISTR (PKEY HASH) |:EX10002 |1 |47 | +|5 | └─MATERIAL | |1 |47 | +|6 | └─INDEX DELETE |t1(t1_idx1)|1 |47 | +|7 | └─EXCHANGE IN DISTR | |1 |35 | +|8 | └─EXCHANGE OUT DISTR (PKEY HASH) |:EX10001 |1 |35 | +|9 | └─MATERIAL | |1 |35 | +|10| └─UPDATE | |1 |35 | +|11| └─EXCHANGE IN DISTR | |1 |3 | +|12| └─EXCHANGE OUT DISTR (PKEY HASH)|:EX10000 |1 |3 | +|13| └─PX BLOCK ITERATOR | |1 |3 | +|14| └─TABLE FULL SCAN |t1 |1 |3 | +============================================================================================= Outputs & filters: ------------------------------------- 0 - output(nil), filter(nil), rowset=16 @@ -46,11 +49,15 @@ Outputs & filters: 7 - output([t1.c1], [PARTITION_ID], [t1.c2]), filter(nil), rowset=16 8 - output([t1.c1], [PARTITION_ID], [t1.c2]), filter(nil), rowset=16 (#keys=1, [t1.c2]), dop=3 - 9 - output([t1.c1], [t1.c2]), filter(nil) + 9 - output([t1.c1], [t1.c2]), filter(nil), rowset=16 + 10 - output([t1.c1], [t1.c2]), filter(nil) table_columns([{t1: ({t1: (t1.c1, t1.c2, t1.c3)})}]), update([t1.c2=column_conv(INT,PS:(11,0),NULL,cast(3, INT(-1, 0)))]) - 10 - output([t1.c1], [t1.c2], [t1.c3], [PARTITION_ID]), filter(nil), rowset=16 - 11 - output([t1.c1], [t1.c2], [t1.c3], [PARTITION_ID]), filter(nil), rowset=16 + 11 - output([t1.c1], [t1.c2], [PARTITION_ID], [t1.c3]), filter(nil), rowset=16 + 12 - output([t1.c1], [t1.c2], [PARTITION_ID], [t1.c3]), filter(nil), rowset=16 + (#keys=1, [t1.c1]), dop=3 + 13 - output([t1.c1], [t1.c2], [t1.c3]), filter(nil), rowset=16 + 14 - output([t1.c1], [t1.c2], [t1.c3]), filter(nil), rowset=16 access([t1.c1], [t1.c2], [t1.c3]), partitions(p[0-2]) is_index_back=false, is_global_index=false, range_key([t1.c1]), range(MIN ; MAX)always true @@ -80,22 +87,25 @@ c2 c1 6 3 explain update /*+ parallel(3) enable_parallel_dml */ pindex set c2 = c3, c3 = 5; Query Plan -====================================================================================== -|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| --------------------------------------------------------------------------------------- -|0 |PX COORDINATOR | |1 |60 | -|1 |└─EXCHANGE OUT DISTR |:EX10002 |1 |60 | -|2 | └─INDEX INSERT |pindex(pindex_i2)|1 |60 | -|3 | └─EXCHANGE IN DISTR | |1 |47 | -|4 | └─EXCHANGE OUT DISTR (HASH) |:EX10001 |1 |47 | -|5 | └─MATERIAL | |1 |46 | -|6 | └─INDEX DELETE |pindex(pindex_i2)|1 |46 | -|7 | └─EXCHANGE IN DISTR | |1 |35 | -|8 | └─EXCHANGE OUT DISTR (HASH)|:EX10000 |1 |35 | -|9 | └─UPDATE | |1 |34 | -|10| └─PX BLOCK ITERATOR | |1 |3 | -|11| └─TABLE FULL SCAN |pindex |1 |3 | -====================================================================================== +=================================================================================================== +|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| +--------------------------------------------------------------------------------------------------- +|0 |PX COORDINATOR | |1 |61 | +|1 |└─EXCHANGE OUT DISTR |:EX10003 |1 |60 | +|2 | └─INDEX INSERT |pindex(pindex_i2)|1 |60 | +|3 | └─EXCHANGE IN DISTR | |1 |47 | +|4 | └─EXCHANGE OUT DISTR (HASH) |:EX10002 |1 |47 | +|5 | └─MATERIAL | |1 |47 | +|6 | └─INDEX DELETE |pindex(pindex_i2)|1 |47 | +|7 | └─EXCHANGE IN DISTR | |1 |35 | +|8 | └─EXCHANGE OUT DISTR (HASH) |:EX10001 |1 |35 | +|9 | └─MATERIAL | |1 |35 | +|10| └─UPDATE | |1 |35 | +|11| └─EXCHANGE IN DISTR | |1 |3 | +|12| └─EXCHANGE OUT DISTR (PKEY HASH)|:EX10000 |1 |3 | +|13| └─PX BLOCK ITERATOR | |1 |3 | +|14| └─TABLE FULL SCAN |pindex |1 |3 | +=================================================================================================== Outputs & filters: ------------------------------------- 0 - output(nil), filter(nil), rowset=16 @@ -113,11 +123,15 @@ Outputs & filters: 7 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c1], [pindex.c2]), filter(nil), rowset=16 8 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c1], [pindex.c2]), filter(nil), rowset=16 (#keys=1, [pindex.c2]), dop=3 - 9 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c1], [pindex.c2]), filter(nil) + 9 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c1], [pindex.c2]), filter(nil), rowset=16 + 10 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c1], [pindex.c2]), filter(nil) table_columns([{pindex: ({pindex: (pindex.c1, pindex.c2, pindex.c3)})}]), update([pindex.c2=column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c3=column_conv(INT,PS:(11,0),NULL,cast(5, INT(-1, 0)))]) - 10 - output([pindex.c1], [pindex.c2], [pindex.c3], [PARTITION_ID]), filter(nil), rowset=16 - 11 - output([pindex.c1], [pindex.c2], [pindex.c3], [PARTITION_ID]), filter(nil), rowset=16 + 11 - output([pindex.c1], [pindex.c2], [PARTITION_ID], [pindex.c3]), filter(nil), rowset=16 + 12 - output([pindex.c1], [pindex.c2], [PARTITION_ID], [pindex.c3]), filter(nil), rowset=16 + (#keys=1, [pindex.c1]), dop=3 + 13 - output([pindex.c1], [pindex.c2], [pindex.c3]), filter(nil), rowset=16 + 14 - output([pindex.c1], [pindex.c2], [pindex.c3]), filter(nil), rowset=16 access([pindex.c1], [pindex.c2], [pindex.c3]), partitions(p[0-2]) is_index_back=false, is_global_index=false, range_key([pindex.c1]), range(MIN ; MAX)always true @@ -150,22 +164,25 @@ NULL 2 NULL 3 explain update /*+ parallel(3) enable_parallel_dml */ pindex set c2 = c3, c3 = 5; Query Plan -====================================================================================== -|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| --------------------------------------------------------------------------------------- -|0 |PX COORDINATOR | |1 |60 | -|1 |└─EXCHANGE OUT DISTR |:EX10002 |1 |60 | -|2 | └─INDEX INSERT |pindex(pindex_i2)|1 |60 | -|3 | └─EXCHANGE IN DISTR | |1 |47 | -|4 | └─EXCHANGE OUT DISTR (HASH) |:EX10001 |1 |47 | -|5 | └─MATERIAL | |1 |46 | -|6 | └─INDEX DELETE |pindex(pindex_i2)|1 |46 | -|7 | └─EXCHANGE IN DISTR | |1 |35 | -|8 | └─EXCHANGE OUT DISTR (HASH)|:EX10000 |1 |35 | -|9 | └─UPDATE | |1 |34 | -|10| └─PX BLOCK ITERATOR | |1 |3 | -|11| └─TABLE FULL SCAN |pindex |1 |3 | -====================================================================================== +=================================================================================================== +|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| +--------------------------------------------------------------------------------------------------- +|0 |PX COORDINATOR | |1 |61 | +|1 |└─EXCHANGE OUT DISTR |:EX10003 |1 |60 | +|2 | └─INDEX INSERT |pindex(pindex_i2)|1 |60 | +|3 | └─EXCHANGE IN DISTR | |1 |47 | +|4 | └─EXCHANGE OUT DISTR (HASH) |:EX10002 |1 |47 | +|5 | └─MATERIAL | |1 |47 | +|6 | └─INDEX DELETE |pindex(pindex_i2)|1 |47 | +|7 | └─EXCHANGE IN DISTR | |1 |35 | +|8 | └─EXCHANGE OUT DISTR (HASH) |:EX10001 |1 |35 | +|9 | └─MATERIAL | |1 |35 | +|10| └─UPDATE | |1 |35 | +|11| └─EXCHANGE IN DISTR | |1 |3 | +|12| └─EXCHANGE OUT DISTR (PKEY HASH)|:EX10000 |1 |3 | +|13| └─PX BLOCK ITERATOR | |1 |3 | +|14| └─TABLE FULL SCAN |pindex |1 |3 | +=================================================================================================== Outputs & filters: ------------------------------------- 0 - output(nil), filter(nil), rowset=16 @@ -183,11 +200,15 @@ Outputs & filters: 7 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c1], [pindex.c2]), filter(nil), rowset=16 8 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c1], [pindex.c2]), filter(nil), rowset=16 (#keys=1, [pindex.c2]), dop=3 - 9 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c1], [pindex.c2]), filter(nil) + 9 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c1], [pindex.c2]), filter(nil), rowset=16 + 10 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c1], [pindex.c2]), filter(nil) table_columns([{pindex: ({pindex: (pindex.c1, pindex.c2, pindex.c3)})}]), update([pindex.c2=column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c3=column_conv(INT,PS:(11,0),NULL,cast(5, INT(-1, 0)))]) - 10 - output([pindex.c1], [pindex.c2], [pindex.c3], [PARTITION_ID]), filter(nil), rowset=16 - 11 - output([pindex.c1], [pindex.c2], [pindex.c3], [PARTITION_ID]), filter(nil), rowset=16 + 11 - output([pindex.c1], [pindex.c2], [PARTITION_ID], [pindex.c3]), filter(nil), rowset=16 + 12 - output([pindex.c1], [pindex.c2], [PARTITION_ID], [pindex.c3]), filter(nil), rowset=16 + (#keys=1, [pindex.c1]), dop=3 + 13 - output([pindex.c1], [pindex.c2], [pindex.c3]), filter(nil), rowset=16 + 14 - output([pindex.c1], [pindex.c2], [pindex.c3]), filter(nil), rowset=16 access([pindex.c1], [pindex.c2], [pindex.c3]), partitions(p[0-2]) is_index_back=false, is_global_index=false, range_key([pindex.c1]), range(MIN ; MAX)always true @@ -218,22 +239,25 @@ c2 c1 6 3 explain update /*+ parallel(3) enable_parallel_dml */ pindex set c2 = c3, c3 = 5; Query Plan -=========================================================================================== -|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| -------------------------------------------------------------------------------------------- -|0 |PX COORDINATOR | |1 |60 | -|1 |└─EXCHANGE OUT DISTR |:EX10002 |1 |60 | -|2 | └─INDEX INSERT |pindex(pindex_i2)|1 |60 | -|3 | └─EXCHANGE IN DISTR | |1 |47 | -|4 | └─EXCHANGE OUT DISTR (PKEY HASH) |:EX10001 |1 |47 | -|5 | └─MATERIAL | |1 |46 | -|6 | └─INDEX DELETE |pindex(pindex_i2)|1 |46 | -|7 | └─EXCHANGE IN DISTR | |1 |35 | -|8 | └─EXCHANGE OUT DISTR (PKEY HASH)|:EX10000 |1 |35 | -|9 | └─UPDATE | |1 |34 | -|10| └─PX BLOCK ITERATOR | |1 |3 | -|11| └─TABLE FULL SCAN |pindex |1 |3 | -=========================================================================================== +=================================================================================================== +|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| +--------------------------------------------------------------------------------------------------- +|0 |PX COORDINATOR | |1 |61 | +|1 |└─EXCHANGE OUT DISTR |:EX10003 |1 |60 | +|2 | └─INDEX INSERT |pindex(pindex_i2)|1 |60 | +|3 | └─EXCHANGE IN DISTR | |1 |47 | +|4 | └─EXCHANGE OUT DISTR (PKEY HASH) |:EX10002 |1 |47 | +|5 | └─MATERIAL | |1 |47 | +|6 | └─INDEX DELETE |pindex(pindex_i2)|1 |47 | +|7 | └─EXCHANGE IN DISTR | |1 |35 | +|8 | └─EXCHANGE OUT DISTR (PKEY HASH) |:EX10001 |1 |35 | +|9 | └─MATERIAL | |1 |35 | +|10| └─UPDATE | |1 |35 | +|11| └─EXCHANGE IN DISTR | |1 |3 | +|12| └─EXCHANGE OUT DISTR (PKEY HASH)|:EX10000 |1 |3 | +|13| └─PX BLOCK ITERATOR | |1 |3 | +|14| └─TABLE FULL SCAN |pindex |1 |3 | +=================================================================================================== Outputs & filters: ------------------------------------- 0 - output(nil), filter(nil), rowset=16 @@ -251,11 +275,15 @@ Outputs & filters: 7 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c1], [PARTITION_ID], [pindex.c2]), filter(nil), rowset=16 8 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c1], [PARTITION_ID], [pindex.c2]), filter(nil), rowset=16 (#keys=1, [pindex.c2]), dop=3 - 9 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c1], [pindex.c2]), filter(nil) + 9 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c1], [pindex.c2]), filter(nil), rowset=16 + 10 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c1], [pindex.c2]), filter(nil) table_columns([{pindex: ({pindex: (pindex.c1, pindex.c2, pindex.c3)})}]), update([pindex.c2=column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c3=column_conv(INT,PS:(11,0),NULL,cast(5, INT(-1, 0)))]) - 10 - output([pindex.c1], [pindex.c2], [pindex.c3], [PARTITION_ID]), filter(nil), rowset=16 - 11 - output([pindex.c1], [pindex.c2], [pindex.c3], [PARTITION_ID]), filter(nil), rowset=16 + 11 - output([pindex.c1], [pindex.c2], [PARTITION_ID], [pindex.c3]), filter(nil), rowset=16 + 12 - output([pindex.c1], [pindex.c2], [PARTITION_ID], [pindex.c3]), filter(nil), rowset=16 + (#keys=1, [pindex.c1]), dop=3 + 13 - output([pindex.c1], [pindex.c2], [pindex.c3]), filter(nil), rowset=16 + 14 - output([pindex.c1], [pindex.c2], [pindex.c3]), filter(nil), rowset=16 access([pindex.c1], [pindex.c2], [pindex.c3]), partitions(p[0-2]) is_index_back=false, is_global_index=false, range_key([pindex.c1]), range(MIN ; MAX)always true @@ -275,22 +303,25 @@ c2 c1 6 3 explain update /*+ parallel(3) enable_parallel_dml */ pindex set c2 = c3, c3 = 5; Query Plan -====================================================================================== -|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| --------------------------------------------------------------------------------------- -|0 |PX COORDINATOR | |1 |60 | -|1 |└─EXCHANGE OUT DISTR |:EX10002 |1 |60 | -|2 | └─INDEX INSERT |pindex(pindex_i2)|1 |60 | -|3 | └─EXCHANGE IN DISTR | |1 |47 | -|4 | └─EXCHANGE OUT DISTR (HASH) |:EX10001 |1 |47 | -|5 | └─MATERIAL | |1 |46 | -|6 | └─INDEX DELETE |pindex(pindex_i2)|1 |46 | -|7 | └─EXCHANGE IN DISTR | |1 |35 | -|8 | └─EXCHANGE OUT DISTR (HASH)|:EX10000 |1 |35 | -|9 | └─UPDATE | |1 |34 | -|10| └─PX BLOCK ITERATOR | |1 |3 | -|11| └─TABLE FULL SCAN |pindex |1 |3 | -====================================================================================== +===================================================================================================== +|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| +----------------------------------------------------------------------------------------------------- +|0 |PX COORDINATOR | |1 |61 | +|1 |└─EXCHANGE OUT DISTR |:EX10003 |1 |60 | +|2 | └─INDEX INSERT |pindex(pindex_i2)|1 |60 | +|3 | └─EXCHANGE IN DISTR | |1 |47 | +|4 | └─EXCHANGE OUT DISTR (HASH) |:EX10002 |1 |47 | +|5 | └─MATERIAL | |1 |47 | +|6 | └─INDEX DELETE |pindex(pindex_i2)|1 |47 | +|7 | └─EXCHANGE IN DISTR | |1 |35 | +|8 | └─EXCHANGE OUT DISTR (HASH) |:EX10001 |1 |35 | +|9 | └─MATERIAL | |1 |35 | +|10| └─UPDATE | |1 |35 | +|11| └─EXCHANGE IN DISTR | |1 |3 | +|12| └─EXCHANGE OUT DISTR (PKEY RANDOM)|:EX10000 |1 |3 | +|13| └─PX BLOCK ITERATOR | |1 |3 | +|14| └─TABLE FULL SCAN |pindex |1 |3 | +===================================================================================================== Outputs & filters: ------------------------------------- 0 - output(nil), filter(nil), rowset=16 @@ -308,11 +339,15 @@ Outputs & filters: 7 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.__pk_increment], [pindex.c1], [pindex.c2]), filter(nil), rowset=16 8 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.__pk_increment], [pindex.c1], [pindex.c2]), filter(nil), rowset=16 (#keys=1, [pindex.c2]), dop=3 - 9 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.__pk_increment], [pindex.c1], [pindex.c2]), filter(nil) + 9 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.__pk_increment], [pindex.c1], [pindex.c2]), filter(nil), rowset=16 + 10 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.__pk_increment], [pindex.c1], [pindex.c2]), filter(nil) table_columns([{pindex: ({pindex: (pindex.__pk_increment, pindex.c1, pindex.c2, pindex.c3)})}]), update([pindex.c2=column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c3=column_conv(INT,PS:(11,0),NULL,cast(5, INT(-1, 0)))]) - 10 - output([pindex.__pk_increment], [pindex.c1], [pindex.c2], [pindex.c3], [PARTITION_ID]), filter(nil), rowset=16 - 11 - output([pindex.__pk_increment], [pindex.c1], [pindex.c2], [pindex.c3], [PARTITION_ID]), filter(nil), rowset=16 + 11 - output([pindex.__pk_increment], [pindex.c1], [pindex.c2], [PARTITION_ID], [pindex.c3]), filter(nil), rowset=16 + 12 - output([pindex.__pk_increment], [pindex.c1], [pindex.c2], [PARTITION_ID], [pindex.c3]), filter(nil), rowset=16 + (#keys=1, [pindex.c1]), dop=3 + 13 - output([pindex.__pk_increment], [pindex.c1], [pindex.c2], [pindex.c3]), filter(nil), rowset=16 + 14 - output([pindex.__pk_increment], [pindex.c1], [pindex.c2], [pindex.c3]), filter(nil), rowset=16 access([pindex.__pk_increment], [pindex.c1], [pindex.c2], [pindex.c3]), partitions(p[0-2]) is_index_back=false, is_global_index=false, range_key([pindex.__pk_increment]), range(MIN ; MAX)always true @@ -345,22 +380,25 @@ NULL 2 NULL 3 explain update /*+ parallel(3) enable_parallel_dml */ pindex set c2 = c3, c3 = 5; Query Plan -====================================================================================== -|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| --------------------------------------------------------------------------------------- -|0 |PX COORDINATOR | |1 |60 | -|1 |└─EXCHANGE OUT DISTR |:EX10002 |1 |60 | -|2 | └─INDEX INSERT |pindex(pindex_i2)|1 |60 | -|3 | └─EXCHANGE IN DISTR | |1 |47 | -|4 | └─EXCHANGE OUT DISTR (HASH) |:EX10001 |1 |47 | -|5 | └─MATERIAL | |1 |46 | -|6 | └─INDEX DELETE |pindex(pindex_i2)|1 |46 | -|7 | └─EXCHANGE IN DISTR | |1 |35 | -|8 | └─EXCHANGE OUT DISTR (HASH)|:EX10000 |1 |35 | -|9 | └─UPDATE | |1 |34 | -|10| └─PX BLOCK ITERATOR | |1 |3 | -|11| └─TABLE FULL SCAN |pindex |1 |3 | -====================================================================================== +===================================================================================================== +|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| +----------------------------------------------------------------------------------------------------- +|0 |PX COORDINATOR | |1 |61 | +|1 |└─EXCHANGE OUT DISTR |:EX10003 |1 |60 | +|2 | └─INDEX INSERT |pindex(pindex_i2)|1 |60 | +|3 | └─EXCHANGE IN DISTR | |1 |47 | +|4 | └─EXCHANGE OUT DISTR (HASH) |:EX10002 |1 |47 | +|5 | └─MATERIAL | |1 |47 | +|6 | └─INDEX DELETE |pindex(pindex_i2)|1 |47 | +|7 | └─EXCHANGE IN DISTR | |1 |35 | +|8 | └─EXCHANGE OUT DISTR (HASH) |:EX10001 |1 |35 | +|9 | └─MATERIAL | |1 |35 | +|10| └─UPDATE | |1 |35 | +|11| └─EXCHANGE IN DISTR | |1 |3 | +|12| └─EXCHANGE OUT DISTR (PKEY RANDOM)|:EX10000 |1 |3 | +|13| └─PX BLOCK ITERATOR | |1 |3 | +|14| └─TABLE FULL SCAN |pindex |1 |3 | +===================================================================================================== Outputs & filters: ------------------------------------- 0 - output(nil), filter(nil), rowset=16 @@ -378,11 +416,15 @@ Outputs & filters: 7 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.__pk_increment], [pindex.c1], [pindex.c2]), filter(nil), rowset=16 8 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.__pk_increment], [pindex.c1], [pindex.c2]), filter(nil), rowset=16 (#keys=1, [pindex.c2]), dop=3 - 9 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.__pk_increment], [pindex.c1], [pindex.c2]), filter(nil) + 9 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.__pk_increment], [pindex.c1], [pindex.c2]), filter(nil), rowset=16 + 10 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.__pk_increment], [pindex.c1], [pindex.c2]), filter(nil) table_columns([{pindex: ({pindex: (pindex.__pk_increment, pindex.c1, pindex.c2, pindex.c3)})}]), update([pindex.c2=column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c3=column_conv(INT,PS:(11,0),NULL,cast(5, INT(-1, 0)))]) - 10 - output([pindex.__pk_increment], [pindex.c1], [pindex.c2], [pindex.c3], [PARTITION_ID]), filter(nil), rowset=16 - 11 - output([pindex.__pk_increment], [pindex.c1], [pindex.c2], [pindex.c3], [PARTITION_ID]), filter(nil), rowset=16 + 11 - output([pindex.__pk_increment], [pindex.c1], [pindex.c2], [PARTITION_ID], [pindex.c3]), filter(nil), rowset=16 + 12 - output([pindex.__pk_increment], [pindex.c1], [pindex.c2], [PARTITION_ID], [pindex.c3]), filter(nil), rowset=16 + (#keys=1, [pindex.c1]), dop=3 + 13 - output([pindex.__pk_increment], [pindex.c1], [pindex.c2], [pindex.c3]), filter(nil), rowset=16 + 14 - output([pindex.__pk_increment], [pindex.c1], [pindex.c2], [pindex.c3]), filter(nil), rowset=16 access([pindex.__pk_increment], [pindex.c1], [pindex.c2], [pindex.c3]), partitions(p[0-2]) is_index_back=false, is_global_index=false, range_key([pindex.__pk_increment]), range(MIN ; MAX)always true @@ -413,22 +455,25 @@ c2 c1 6 3 explain update /*+ parallel(3) enable_parallel_dml */ pindex set c2 = c3, c3 = 5; Query Plan -=========================================================================================== -|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| -------------------------------------------------------------------------------------------- -|0 |PX COORDINATOR | |1 |60 | -|1 |└─EXCHANGE OUT DISTR |:EX10002 |1 |60 | -|2 | └─INDEX INSERT |pindex(pindex_i2)|1 |60 | -|3 | └─EXCHANGE IN DISTR | |1 |47 | -|4 | └─EXCHANGE OUT DISTR (PKEY HASH) |:EX10001 |1 |47 | -|5 | └─MATERIAL | |1 |46 | -|6 | └─INDEX DELETE |pindex(pindex_i2)|1 |46 | -|7 | └─EXCHANGE IN DISTR | |1 |35 | -|8 | └─EXCHANGE OUT DISTR (PKEY HASH)|:EX10000 |1 |35 | -|9 | └─UPDATE | |1 |34 | -|10| └─PX BLOCK ITERATOR | |1 |3 | -|11| └─TABLE FULL SCAN |pindex |1 |3 | -=========================================================================================== +===================================================================================================== +|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| +----------------------------------------------------------------------------------------------------- +|0 |PX COORDINATOR | |1 |61 | +|1 |└─EXCHANGE OUT DISTR |:EX10003 |1 |60 | +|2 | └─INDEX INSERT |pindex(pindex_i2)|1 |60 | +|3 | └─EXCHANGE IN DISTR | |1 |47 | +|4 | └─EXCHANGE OUT DISTR (PKEY HASH) |:EX10002 |1 |47 | +|5 | └─MATERIAL | |1 |47 | +|6 | └─INDEX DELETE |pindex(pindex_i2)|1 |47 | +|7 | └─EXCHANGE IN DISTR | |1 |35 | +|8 | └─EXCHANGE OUT DISTR (PKEY HASH) |:EX10001 |1 |35 | +|9 | └─MATERIAL | |1 |35 | +|10| └─UPDATE | |1 |35 | +|11| └─EXCHANGE IN DISTR | |1 |3 | +|12| └─EXCHANGE OUT DISTR (PKEY RANDOM)|:EX10000 |1 |3 | +|13| └─PX BLOCK ITERATOR | |1 |3 | +|14| └─TABLE FULL SCAN |pindex |1 |3 | +===================================================================================================== Outputs & filters: ------------------------------------- 0 - output(nil), filter(nil), rowset=16 @@ -446,11 +491,15 @@ Outputs & filters: 7 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.__pk_increment], [pindex.c1], [PARTITION_ID], [pindex.c2]), filter(nil), rowset=16 8 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.__pk_increment], [pindex.c1], [PARTITION_ID], [pindex.c2]), filter(nil), rowset=16 (#keys=1, [pindex.c2]), dop=3 - 9 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.__pk_increment], [pindex.c1], [pindex.c2]), filter(nil) + 9 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.__pk_increment], [pindex.c1], [pindex.c2]), filter(nil), rowset=16 + 10 - output([column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.__pk_increment], [pindex.c1], [pindex.c2]), filter(nil) table_columns([{pindex: ({pindex: (pindex.__pk_increment, pindex.c1, pindex.c2, pindex.c3)})}]), update([pindex.c2=column_conv(INT,PS:(11,0),NULL,pindex.c3)], [pindex.c3=column_conv(INT,PS:(11,0),NULL,cast(5, INT(-1, 0)))]) - 10 - output([pindex.__pk_increment], [pindex.c1], [pindex.c2], [pindex.c3], [PARTITION_ID]), filter(nil), rowset=16 - 11 - output([pindex.__pk_increment], [pindex.c1], [pindex.c2], [pindex.c3], [PARTITION_ID]), filter(nil), rowset=16 + 11 - output([pindex.__pk_increment], [pindex.c1], [pindex.c2], [PARTITION_ID], [pindex.c3]), filter(nil), rowset=16 + 12 - output([pindex.__pk_increment], [pindex.c1], [pindex.c2], [PARTITION_ID], [pindex.c3]), filter(nil), rowset=16 + (#keys=1, [pindex.c1]), dop=3 + 13 - output([pindex.__pk_increment], [pindex.c1], [pindex.c2], [pindex.c3]), filter(nil), rowset=16 + 14 - output([pindex.__pk_increment], [pindex.c1], [pindex.c2], [pindex.c3]), filter(nil), rowset=16 access([pindex.__pk_increment], [pindex.c1], [pindex.c2], [pindex.c3]), partitions(p[0-2]) is_index_back=false, is_global_index=false, range_key([pindex.__pk_increment]), range(MIN ; MAX)always true