java.sql.SQLException: ORA-01652: 无法将表空间 TEMP 中的临时段扩展 128(即使在扩展之后)
java.sql.SQLException: ORA-01652: unable to extend temp segment by 128 in tablespace TEMP(Even after extending)
我们的数据加载在 运行 多个小时后失败。 DBA
温度升高 tablespace
三次。仍然失败。
错误的原因可能是什么。块大小或其他因素重要吗?
尝试时出错
为此加载规则提取数据 CRM_ECC_UTIL_PVT.GET_ECC_DATA_LOAD_INFO
工作 125,840
的数据集 crm-expenditures
**java.sql.SQLException: ORA-01652: unable to extend temp segment by 128 in
tablespace TEMP**
我按照一些人的建议放了 sql。
SELECT
*
FROM
(
SELECT /*+ leading(ppp) index(pp PA_PROJECTS_U1) */ 'PROJ_EXP-'
|| pp.project_id
|| '-'
|| nvl(to_char(pt.task_id), 'NO_TASK')
|| '-'
|| to_char(pei.expenditure_item_id) AS ecc_spec_id,
greatest(pp.last_update_date, pt.last_update_date, pei.last_update_date, pet.last_update_date, pe.last_update_date,
nvl(pap.last_update_date, pp.last_update_date),
nvl(pj.last_update_date, pp.last_update_date),
nvl(ap1.last_update_date, pp.last_update_date)) AS ecc_last_update_date,
pp.project_id AS project_id,
pp.segment1 AS project_number,
pp.org_id AS org_id,
pt.task_id AS task_id,
pt.task_number AS task_number,
pei.expenditure_item_id AS item_id,
pei.expenditure_type AS exp_type,
pet.expenditure_category AS exp_category,
pet.revenue_category_code AS exp_revenue_category_code,
hou1.name AS exp_org,
pei.expenditure_item_date AS exp_item_date,
pei.quantity AS exp_quantity,
flv.meaning AS uom,
pei.projfunc_currency_code AS exp_projfunc_currency_code,
nvl(pei.burden_cost, 0) AS exp_burdened_cost,
pei.accrued_revenue AS exp_accrued_revenue,
pei.bill_amount AS exp_bill_amount,
pei.project_currency_code AS exp_project_currency_code,
nvl(pei.project_burdened_cost, 0) AS exp_project_burdened_cost,
pei.project_raw_revenue AS exp_project_raw_revenue,
pei.project_bill_amount AS exp_project_bill_amount,
pei.bill_trans_currency_code AS exp_bill_trans_currency_code,
pei.bill_trans_bill_amount AS exp_bill_trans_bill_amount,
pei.non_labor_resource AS exp_non_labor_resc,
hou2.name AS exp_non_labor_org,
pe.incurred_by_person_id AS exp_incurred_by_person_id,
pap.full_name AS exp_employee_name,
pap.employee_number AS exp_employee_number,
pei.job_id AS exp_person_job_id,
pj.name AS exp_person_job_name,
pe.vendor_id AS supplier_id,
ap1.vendor_name AS supplier_name,
hou1.language AS language
FROM
pa_projects_all pp,
pa_tasks pt,
pa_expenditure_items_all pei,
pa_expenditure_types pet,
pa_expenditures_all pe,
per_all_people_f pap,
per_jobs pj,
ap_suppliers ap1,
hr_all_organization_units_tl hou1,
hr_all_organization_units_tl hou2,
fnd_lookup_values flv,
(
SELECT DISTINCT
project_id
FROM
pjm_project_parameters
) ppp
WHERE
pp.start_date >= nvl(TO_DATE('01-JAN-18', 'RRRR/MM/DD HH24:MI:SS'), pp.start_date)
AND pp.project_type <> 'AWARD_PROJECT'
AND pp.template_flag = 'N'
AND pp.project_id = ppp.project_id
AND pt.project_id = pp.project_id
AND pei.project_id = pt.project_id
AND pei.task_id = pt.task_id
AND pet.expenditure_type = pei.expenditure_type
AND pe.expenditure_id = pei.expenditure_id
AND pe.org_id = pei.org_id
AND pap.person_id (+) = pe.incurred_by_person_id
AND trunc(sysdate) BETWEEN nvl(pap.effective_start_date, sysdate - 1) AND nvl(pap.effective_end_date, sysdate + 1)
AND pj.job_id (+) = pei.job_id
AND ap1.vendor_id (+) = pe.vendor_id
AND hou1.organization_id = nvl(pei.override_to_organization_id, pe.incurred_by_organization_id)
AND hou2.organization_id (+) = pei.organization_id
AND ( hou2.language IS NULL
OR hou2.language = hou1.language )
AND flv.view_application_id = 275
AND flv.security_group_id = 0
AND flv.lookup_type = 'UNIT'
AND flv.lookup_code = pet.unit_of_measure
AND flv.language = hou1.language
AND hou1.language IN ( 'US' )
) PIVOT (
MAX ( exp_org )
AS exp_org, MAX ( uom ) AS uom, MAX ( exp_non_labor_org ) AS exp_non_labor_org
FOR language
IN ( 'US' "US" )
)
如果对某些方面有帮助,下面是跟踪输出。
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 2.87 2.87 0 0 6 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 3640.57 6131.92 9944538 9990033 260 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 3643.44 6134.79 9944538 9990033 266 0
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 173
Number of plan statistics captured: 1
Rows (1st) Rows (avg) Rows (max) Row Source Operation
---------- ---------- ---------- ---------------------------------------------------
0 0 0 HASH GROUP BY PIVOT (cr=0 pr=0 pw=0 time=211 us starts=1 cost=2368710 size=159986583 card=301293)
0 0 0 HASH JOIN RIGHT OUTER (cr=0 pr=0 pw=0 time=24 us starts=1 cost=2340094 size=159986583 card=301293)
20334 20334 20334 TABLE ACCESS FULL AP_SUPPLIERS (cr=1027 pr=0 pw=0 time=8264 us starts=1 cost=168 size=752358 card=20334)
0 0 0 HASH JOIN RIGHT OUTER (cr=0 pr=0 pw=0 time=26 us starts=1 cost=2339923 size=148838742 card=301293)
7569 7569 7569 TABLE ACCESS FULL PER_JOBS (cr=183 pr=181 pw=0 time=53049 us starts=1 cost=31 size=264915 card=7569)
0 0 0 FILTER (cr=0 pr=0 pw=0 time=25 us starts=1)
0 0 0 NESTED LOOPS OUTER (cr=0 pr=0 pw=0 time=23 us starts=1 cost=2339890 size=138293487 card=301293)
0 0 0 HASH JOIN (cr=0 pr=0 pw=0 time=19 us starts=1 cost=2339889 size=131062455 card=301293)
3488 3488 3488 TABLE ACCESS FULL HR_ALL_ORGANIZATION_UNITS_TL (cr=30 pr=0 pw=0 time=1511 us starts=1 cost=6 size=83688 card=3487)
0 0 0 FILTER (cr=0 pr=0 pw=0 time=20 us starts=1)
0 0 0 HASH JOIN RIGHT OUTER (cr=0 pr=0 pw=0 time=20 us starts=1 cost=2339880 size=123831423 card=301293)
482564 482564 482564 TABLE ACCESS FULL PER_ALL_PEOPLE_F (cr=24850 pr=0 pw=0 time=496147 us starts=1 cost=3887 size=26058456 card=482564)
0 0 0 HASH JOIN (cr=0 pr=0 pw=0 time=83 us starts=1 cost=2335031 size=31579863 card=88459)
964899956 964899956 964899956 HASH JOIN (cr=9963945 pr=9944251 pw=0 time=1257291836 us starts=1 cost=2272141 size=57476164 card=173644)
440 440 440 TABLE ACCESS BY INDEX ROWID BATCHED FND_LOOKUP_VALUES (cr=345 pr=11 pw=0 time=8731 us starts=1 cost=4 size=60 card=1)
440 440 440 INDEX RANGE SCAN FND_LOOKUP_VALUES_U1 (cr=8 pr=5 pw=0 time=4739 us starts=1 cost=3 size=0 card=1)(object id 10051183)
964899956 964899956 964899956 HASH JOIN (cr=9963600 pr=9944240 pw=0 time=1017124322 us starts=1 cost=2272127 size=307417251 card=1134381)
1095 1095 1095 TABLE ACCESS FULL PA_EXPENDITURE_TYPES (cr=30 pr=28 pw=0 time=10207 us starts=1 cost=6 size=58035 card=1095)
964899956 964899956 964899956 HASH JOIN (cr=9963569 pr=9944212 pw=0 time=846695062 us starts=1 cost=2272112 size=247295058 card=1134381)
1358758 1358758 1358758 HASH JOIN (cr=19092 pr=0 pw=0 time=469629 us starts=1 cost=7758 size=113438100 card=1134381)
19048 19048 19048 HASH JOIN (cr=4302 pr=0 pw=0 time=55357 us starts=1 cost=5230 size=1806098 card=25438)
31692 31692 31692 TABLE ACCESS FULL PJM_PROJECT_PARAMETERS (cr=499 pr=0 pw=0 time=5159 us starts=1 cost=78 size=158460 card=31692)
5436 5436 5436 TABLE ACCESS BY INDEX ROWID BATCHED PA_PROJECTS_ALL (cr=3803 pr=0 pw=0 time=33748 us starts=1 cost=5152 size=147972 card=2242)
7889 7889 7889 INDEX FULL SCAN PA_PROJECTS_U1 (cr=43 pr=0 pw=0 time=2952 us starts=1 cost=43 size=0 card=7889)(object id 10074361)
351540 351540 351540 TABLE ACCESS FULL PA_TASKS (cr=14789 pr=0 pw=0 time=139478 us starts=1 cost=2272 size=10194660 card=351540)
130267813 130267813 130267813 TABLE ACCESS FULL PA_EXPENDITURE_ITEMS_ALL (cr=9944477 pr=9944212 pw=0 time=213772932 us starts=1 cost=1945518 size=19299868662 card=163558209)
0 0 0 TABLE ACCESS FULL PA_EXPENDITURES_ALL (cr=0 pr=0 pw=0 time=0 us starts=0 cost=50307 size=526480734 card=20249259)
0 0 0 TABLE ACCESS BY INDEX ROWID BATCHED HR_ALL_ORGANIZATION_UNITS_TL (cr=0 pr=0 pw=0 time=0 us starts=0 cost=1 size=24 card=1)
0 0 0 INDEX RANGE SCAN HR_ALL_ORGANIZATION_UNTS_TL_PK (cr=0 pr=0 pw=0 time=0 us starts=0 cost=1 size=0 card=1)(object id 10049431)
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
SQL*Net message to client 1 0.00 0.00
db file sequential read 125 0.00 0.09
db file scattered read 22 0.00 0.05
db file parallel read 1 0.00 0.00
PGA memory operation 121 0.00 0.01
direct path read 2737 0.02 9.60
direct path write temp 1230152 2.10 2532.69
Disk file operations I/O 45 0.00 0.01
latch free 10 0.00 0.00
log file sync: SCN ordering 1 0.00 0.00
latch: enqueue hash chains 1 0.00 0.00
SQL*Net break/reset to client 2 0.00 0.00
SQL*Net message from client 1 0.20 0.20
********************************************************************************
SQL ID: 2bpdh1w6xph3h Plan Hash: 3884771224
所涉及的 SQL 正在构建一个中间结果集 - 很可能是因为连接或排序。你的 TEMP tablespace 中没有足够的 space 来容纳它。您需要将一个或多个数据文件添加到 tablespace(假设您的物理存储上有足够的 space 来执行此操作),或者使用较小的数据集。或者,您可以寻找修改 SQL 的方法,以尽可能删除连接和排序。否则,没有任何解决方法。
如果您可以获得所涉及的 SQL 的解释计划,它应该至少可以为您提供优化器预计需要多少 TEMP space 的粗略估计。
首先检查 table 统计数据。
解释计划应突出显示优化器期望的行数比实际获得和生成次优计划少得多的任何情况。
然后我会改变一些SQL,替换
(
SELECT DISTINCT
project_id
FROM
pjm_project_parameters
) ppp
使用物理 table CREATE TABLE AS SELECT DISTINCT ...
这将防止数据库潜在地扫描此 table 然后排序以获取它处理的每一行的不同值。
还有 pp.start_date >= nvl(TO_DATE('01-JAN-18', 'RRRR/MM/DD HH24:MI:SS'), pp.start_date)
和 pp.start_date >= TO_DATE('01-JAN-18', 'DD-MON-YY')
(您的日期掩码与文字不匹配,并且有零点 nvl
ing a litteral
然后拆分 select 和 PIVOT。
作为 'CTAS' 执行主查询,然后在 table 上执行 PIVOT,我怀疑您会获得更好的性能,并且会使用一小部分临时 space .
我们的数据加载在 运行 多个小时后失败。 DBA
温度升高 tablespace
三次。仍然失败。
错误的原因可能是什么。块大小或其他因素重要吗?
尝试时出错
为此加载规则提取数据 CRM_ECC_UTIL_PVT.GET_ECC_DATA_LOAD_INFO
工作 125,840
**java.sql.SQLException: ORA-01652: unable to extend temp segment by 128 in
tablespace TEMP**
我按照一些人的建议放了 sql。
SELECT
*
FROM
(
SELECT /*+ leading(ppp) index(pp PA_PROJECTS_U1) */ 'PROJ_EXP-'
|| pp.project_id
|| '-'
|| nvl(to_char(pt.task_id), 'NO_TASK')
|| '-'
|| to_char(pei.expenditure_item_id) AS ecc_spec_id,
greatest(pp.last_update_date, pt.last_update_date, pei.last_update_date, pet.last_update_date, pe.last_update_date,
nvl(pap.last_update_date, pp.last_update_date),
nvl(pj.last_update_date, pp.last_update_date),
nvl(ap1.last_update_date, pp.last_update_date)) AS ecc_last_update_date,
pp.project_id AS project_id,
pp.segment1 AS project_number,
pp.org_id AS org_id,
pt.task_id AS task_id,
pt.task_number AS task_number,
pei.expenditure_item_id AS item_id,
pei.expenditure_type AS exp_type,
pet.expenditure_category AS exp_category,
pet.revenue_category_code AS exp_revenue_category_code,
hou1.name AS exp_org,
pei.expenditure_item_date AS exp_item_date,
pei.quantity AS exp_quantity,
flv.meaning AS uom,
pei.projfunc_currency_code AS exp_projfunc_currency_code,
nvl(pei.burden_cost, 0) AS exp_burdened_cost,
pei.accrued_revenue AS exp_accrued_revenue,
pei.bill_amount AS exp_bill_amount,
pei.project_currency_code AS exp_project_currency_code,
nvl(pei.project_burdened_cost, 0) AS exp_project_burdened_cost,
pei.project_raw_revenue AS exp_project_raw_revenue,
pei.project_bill_amount AS exp_project_bill_amount,
pei.bill_trans_currency_code AS exp_bill_trans_currency_code,
pei.bill_trans_bill_amount AS exp_bill_trans_bill_amount,
pei.non_labor_resource AS exp_non_labor_resc,
hou2.name AS exp_non_labor_org,
pe.incurred_by_person_id AS exp_incurred_by_person_id,
pap.full_name AS exp_employee_name,
pap.employee_number AS exp_employee_number,
pei.job_id AS exp_person_job_id,
pj.name AS exp_person_job_name,
pe.vendor_id AS supplier_id,
ap1.vendor_name AS supplier_name,
hou1.language AS language
FROM
pa_projects_all pp,
pa_tasks pt,
pa_expenditure_items_all pei,
pa_expenditure_types pet,
pa_expenditures_all pe,
per_all_people_f pap,
per_jobs pj,
ap_suppliers ap1,
hr_all_organization_units_tl hou1,
hr_all_organization_units_tl hou2,
fnd_lookup_values flv,
(
SELECT DISTINCT
project_id
FROM
pjm_project_parameters
) ppp
WHERE
pp.start_date >= nvl(TO_DATE('01-JAN-18', 'RRRR/MM/DD HH24:MI:SS'), pp.start_date)
AND pp.project_type <> 'AWARD_PROJECT'
AND pp.template_flag = 'N'
AND pp.project_id = ppp.project_id
AND pt.project_id = pp.project_id
AND pei.project_id = pt.project_id
AND pei.task_id = pt.task_id
AND pet.expenditure_type = pei.expenditure_type
AND pe.expenditure_id = pei.expenditure_id
AND pe.org_id = pei.org_id
AND pap.person_id (+) = pe.incurred_by_person_id
AND trunc(sysdate) BETWEEN nvl(pap.effective_start_date, sysdate - 1) AND nvl(pap.effective_end_date, sysdate + 1)
AND pj.job_id (+) = pei.job_id
AND ap1.vendor_id (+) = pe.vendor_id
AND hou1.organization_id = nvl(pei.override_to_organization_id, pe.incurred_by_organization_id)
AND hou2.organization_id (+) = pei.organization_id
AND ( hou2.language IS NULL
OR hou2.language = hou1.language )
AND flv.view_application_id = 275
AND flv.security_group_id = 0
AND flv.lookup_type = 'UNIT'
AND flv.lookup_code = pet.unit_of_measure
AND flv.language = hou1.language
AND hou1.language IN ( 'US' )
) PIVOT (
MAX ( exp_org )
AS exp_org, MAX ( uom ) AS uom, MAX ( exp_non_labor_org ) AS exp_non_labor_org
FOR language
IN ( 'US' "US" )
)
如果对某些方面有帮助,下面是跟踪输出。
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 2.87 2.87 0 0 6 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 3640.57 6131.92 9944538 9990033 260 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 3643.44 6134.79 9944538 9990033 266 0
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 173
Number of plan statistics captured: 1
Rows (1st) Rows (avg) Rows (max) Row Source Operation
---------- ---------- ---------- ---------------------------------------------------
0 0 0 HASH GROUP BY PIVOT (cr=0 pr=0 pw=0 time=211 us starts=1 cost=2368710 size=159986583 card=301293)
0 0 0 HASH JOIN RIGHT OUTER (cr=0 pr=0 pw=0 time=24 us starts=1 cost=2340094 size=159986583 card=301293)
20334 20334 20334 TABLE ACCESS FULL AP_SUPPLIERS (cr=1027 pr=0 pw=0 time=8264 us starts=1 cost=168 size=752358 card=20334)
0 0 0 HASH JOIN RIGHT OUTER (cr=0 pr=0 pw=0 time=26 us starts=1 cost=2339923 size=148838742 card=301293)
7569 7569 7569 TABLE ACCESS FULL PER_JOBS (cr=183 pr=181 pw=0 time=53049 us starts=1 cost=31 size=264915 card=7569)
0 0 0 FILTER (cr=0 pr=0 pw=0 time=25 us starts=1)
0 0 0 NESTED LOOPS OUTER (cr=0 pr=0 pw=0 time=23 us starts=1 cost=2339890 size=138293487 card=301293)
0 0 0 HASH JOIN (cr=0 pr=0 pw=0 time=19 us starts=1 cost=2339889 size=131062455 card=301293)
3488 3488 3488 TABLE ACCESS FULL HR_ALL_ORGANIZATION_UNITS_TL (cr=30 pr=0 pw=0 time=1511 us starts=1 cost=6 size=83688 card=3487)
0 0 0 FILTER (cr=0 pr=0 pw=0 time=20 us starts=1)
0 0 0 HASH JOIN RIGHT OUTER (cr=0 pr=0 pw=0 time=20 us starts=1 cost=2339880 size=123831423 card=301293)
482564 482564 482564 TABLE ACCESS FULL PER_ALL_PEOPLE_F (cr=24850 pr=0 pw=0 time=496147 us starts=1 cost=3887 size=26058456 card=482564)
0 0 0 HASH JOIN (cr=0 pr=0 pw=0 time=83 us starts=1 cost=2335031 size=31579863 card=88459)
964899956 964899956 964899956 HASH JOIN (cr=9963945 pr=9944251 pw=0 time=1257291836 us starts=1 cost=2272141 size=57476164 card=173644)
440 440 440 TABLE ACCESS BY INDEX ROWID BATCHED FND_LOOKUP_VALUES (cr=345 pr=11 pw=0 time=8731 us starts=1 cost=4 size=60 card=1)
440 440 440 INDEX RANGE SCAN FND_LOOKUP_VALUES_U1 (cr=8 pr=5 pw=0 time=4739 us starts=1 cost=3 size=0 card=1)(object id 10051183)
964899956 964899956 964899956 HASH JOIN (cr=9963600 pr=9944240 pw=0 time=1017124322 us starts=1 cost=2272127 size=307417251 card=1134381)
1095 1095 1095 TABLE ACCESS FULL PA_EXPENDITURE_TYPES (cr=30 pr=28 pw=0 time=10207 us starts=1 cost=6 size=58035 card=1095)
964899956 964899956 964899956 HASH JOIN (cr=9963569 pr=9944212 pw=0 time=846695062 us starts=1 cost=2272112 size=247295058 card=1134381)
1358758 1358758 1358758 HASH JOIN (cr=19092 pr=0 pw=0 time=469629 us starts=1 cost=7758 size=113438100 card=1134381)
19048 19048 19048 HASH JOIN (cr=4302 pr=0 pw=0 time=55357 us starts=1 cost=5230 size=1806098 card=25438)
31692 31692 31692 TABLE ACCESS FULL PJM_PROJECT_PARAMETERS (cr=499 pr=0 pw=0 time=5159 us starts=1 cost=78 size=158460 card=31692)
5436 5436 5436 TABLE ACCESS BY INDEX ROWID BATCHED PA_PROJECTS_ALL (cr=3803 pr=0 pw=0 time=33748 us starts=1 cost=5152 size=147972 card=2242)
7889 7889 7889 INDEX FULL SCAN PA_PROJECTS_U1 (cr=43 pr=0 pw=0 time=2952 us starts=1 cost=43 size=0 card=7889)(object id 10074361)
351540 351540 351540 TABLE ACCESS FULL PA_TASKS (cr=14789 pr=0 pw=0 time=139478 us starts=1 cost=2272 size=10194660 card=351540)
130267813 130267813 130267813 TABLE ACCESS FULL PA_EXPENDITURE_ITEMS_ALL (cr=9944477 pr=9944212 pw=0 time=213772932 us starts=1 cost=1945518 size=19299868662 card=163558209)
0 0 0 TABLE ACCESS FULL PA_EXPENDITURES_ALL (cr=0 pr=0 pw=0 time=0 us starts=0 cost=50307 size=526480734 card=20249259)
0 0 0 TABLE ACCESS BY INDEX ROWID BATCHED HR_ALL_ORGANIZATION_UNITS_TL (cr=0 pr=0 pw=0 time=0 us starts=0 cost=1 size=24 card=1)
0 0 0 INDEX RANGE SCAN HR_ALL_ORGANIZATION_UNTS_TL_PK (cr=0 pr=0 pw=0 time=0 us starts=0 cost=1 size=0 card=1)(object id 10049431)
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
SQL*Net message to client 1 0.00 0.00
db file sequential read 125 0.00 0.09
db file scattered read 22 0.00 0.05
db file parallel read 1 0.00 0.00
PGA memory operation 121 0.00 0.01
direct path read 2737 0.02 9.60
direct path write temp 1230152 2.10 2532.69
Disk file operations I/O 45 0.00 0.01
latch free 10 0.00 0.00
log file sync: SCN ordering 1 0.00 0.00
latch: enqueue hash chains 1 0.00 0.00
SQL*Net break/reset to client 2 0.00 0.00
SQL*Net message from client 1 0.20 0.20
********************************************************************************
SQL ID: 2bpdh1w6xph3h Plan Hash: 3884771224
所涉及的 SQL 正在构建一个中间结果集 - 很可能是因为连接或排序。你的 TEMP tablespace 中没有足够的 space 来容纳它。您需要将一个或多个数据文件添加到 tablespace(假设您的物理存储上有足够的 space 来执行此操作),或者使用较小的数据集。或者,您可以寻找修改 SQL 的方法,以尽可能删除连接和排序。否则,没有任何解决方法。
如果您可以获得所涉及的 SQL 的解释计划,它应该至少可以为您提供优化器预计需要多少 TEMP space 的粗略估计。
首先检查 table 统计数据。 解释计划应突出显示优化器期望的行数比实际获得和生成次优计划少得多的任何情况。
然后我会改变一些SQL,替换
(
SELECT DISTINCT
project_id
FROM
pjm_project_parameters
) ppp
使用物理 table CREATE TABLE AS SELECT DISTINCT ...
这将防止数据库潜在地扫描此 table 然后排序以获取它处理的每一行的不同值。
还有 pp.start_date >= nvl(TO_DATE('01-JAN-18', 'RRRR/MM/DD HH24:MI:SS'), pp.start_date)
和 pp.start_date >= TO_DATE('01-JAN-18', 'DD-MON-YY')
(您的日期掩码与文字不匹配,并且有零点 nvl
ing a litteral
然后拆分 select 和 PIVOT。
作为 'CTAS' 执行主查询,然后在 table 上执行 PIVOT,我怀疑您会获得更好的性能,并且会使用一小部分临时 space .