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');