In a
previous post, I showed how to check if an autostats job had succeeded.
Recently I had to unlock table stats on a very large partitioned table, and then lock down older partition stats explicitly, to allow Oracle to gather statistics for the most recent partitions automatically with the auto stats job.
I wanted to know if Oracle was able to analyze the partitions within the designated 4 hours of weekday window.
When you read the code snippet below, please keep in mind that I have defined my weekday windows to start at 23:59 every evening.
I found the following query to be useful:
select distinct
opid,
target,
target_type,
to_char(start_Time,'dd.mm.yyyy hh24:mi:ss') "starttime",
to_char(end_time,'dd.mm.yyyy hh24:mi:ss') "endtime",
status
from dba_optstat_operation_tasks
where opid IN (
SELECT ID
FROM DBA_OPTSTAT_OPERATIONS
WHERE OPERATION LIKE 'gather_database_stats (auto)'
AND TO_CHAR(START_TIME,'dd.mm.yyyy hh24:mi') = '09.04.2018 23:59'
)
and target like '%SALES%';
The result:
OPID | TARGET | TARGET_TYPE | starttime | endtime | STATUS |
47815 | SH.SALES | TABLE | 09.04.2018 23:59:39 | 10.04.2018 03:25:17 | COMPLETED |
47815 | SH.SALES.P_SALES_DATA_2016 | TABLE PARTITION | 10.04.2018 03:25:41 | 10.04.2018 03:59:00 | TIMED OUT |
47815 | SH.SALES.P_SALES_DATA_MAX | TABLE PARTITION | 10.04.2018 03:25:33 | 10.04.2018 03:25:33 | COMPLETED |
All in all, the autostat job started on April 9th, 2018 at 23:59, had the following outcome:
select status,count(*)
from dba_optstat_operation_tasks
where opid IN (
SELECT ID
FROM DBA_OPTSTAT_OPERATIONS
WHERE OPERATION LIKE 'gather_database_stats (auto)'
AND TO_CHAR(START_TIME,'dd.mm.yyyy hh24:mi') = '09.04.2018 23:59'
)
group by status;
STATUS | COUNT(*) |
FAILED | 1 |
TIMED OUT | 12 |
COMPLETED | 339 |
From the output you can now proceed to find out why the analysis failed or timed out. The query below will list these objects for you:
select distinct opid,
target,
target_type,
to_char(start_Time,'dd.mm.yyyy hh24:mi:ss') "starttime",
to_char(end_time,'dd.mm.yyyy hh24:mi:ss') "endtime",
status
from dba_optstat_operation_tasks
where opid IN (
SELECT ID
FROM DBA_OPTSTAT_OPERATIONS
WHERE OPERATION LIKE 'gather_database_stats (auto)'
AND TO_CHAR(START_TIME,'dd.mm.yyyy hh24:mi') = '09.04.2018 23:59'
)
and STATUS IN ('TIMED OUT','FAILED');