Maintenance management report performance degrades after upgrade to ofc-23b

After upgrading to ofc-23b two weeks ago, our maintenance management reports have become extremely slow. Reports that used to run in 2-3 minutes now take 15-20 minutes or timeout completely. This is affecting our daily maintenance scheduling and asset tracking operations.

The reports pull work order data, maintenance history, and asset details from OTBI. We haven’t changed any report queries or filters, but the performance degradation is severe. The database team confirmed there’s no infrastructure issue and the database performance metrics look normal. I’m suspecting the upgrade changed something in how the maintenance subject areas are indexed or how the report queries are optimized.

Has anyone else experienced similar performance issues with maintenance reports after upgrading to ofc-23b? Any recommendations for optimizing these queries?

Great progress! Let me provide a comprehensive optimization strategy addressing all focus areas:

Report Query Optimization: Your queries need tuning to work efficiently with ofc-23b’s query engine:

  1. Analyze current query structure:

    • Run EXPLAIN PLAN on your slowest maintenance reports
    • Look for operations with high cost: HASH JOIN, SORT, TABLE ACCESS FULL
    • Identify which tables are causing full scans
  2. Optimize date filtering (critical in ofc-23b):

    • Always include indexed date filters:
WHERE wo.WORK_ORDER_DATE >= :START_DATE
  AND wo.WORK_ORDER_DATE <= :END_DATE
  • Use TRUNC() function carefully - it prevents index usage
  • Instead of: WHERE TRUNC(WORK_ORDER_DATE) = TRUNC(SYSDATE)
  • Use: WHERE WORK_ORDER_DATE >= TRUNC(SYSDATE) AND WORK_ORDER_DATE < TRUNC(SYSDATE) + 1
  1. Reduce data volume with smart filtering:
    • Add work order status filters: STATUS_CODE IN (‘OPEN’, ‘IN_PROGRESS’)
    • Filter by asset organization early in the query
    • Use EXISTS instead of IN for subqueries:
WHERE EXISTS (
  SELECT 1 FROM ASSET_ASSIGNMENTS aa
  WHERE aa.WORK_ORDER_ID = wo.WORK_ORDER_ID
)
  1. Optimize joins:

    • Join order matters - put most restrictive filters first
    • Use INNER JOIN explicitly instead of comma-separated tables
    • Avoid joining large history tables without date filters
  2. Limit result sets appropriately:

    • Add TOP N or ROWNUM filters for dashboard reports
    • Use pagination for user-facing reports
    • Consider summary reports instead of detail for historical data

Performance Optimization Configuration: System-level settings need adjustment for ofc-23b:

  1. Adjust OTBI fetch size for maintenance reports:
    • Navigate to BI Publisher Administration
    • Set Report Fetch Size to 5000 (down from 10000 default)
    • For specific reports, add to report properties:
<property name="oracle.bi.fetch.size" value="5000"/>
  1. Enable result caching for frequently run reports:

    • Go to Catalog > Report Properties
    • Enable cache with 4-hour refresh for static reports
    • Use real-time mode only for critical operational reports
  2. Optimize subject area aggregation:

    • Review ‘Asset Management - Maintenance Real Time’ subject area
    • Check if aggregate tables are being used
    • Verify materialized view refresh schedule (recommend: every 2 hours for maintenance data)
  3. Memory allocation for report server:

    • If reports still timeout, increase BI Server memory allocation
    • Check current setting in EM Console > Capacity Management
    • Increase heap size if utilization exceeds 80%
  4. Parallel query execution:

    • For large maintenance history reports, enable parallel execution:
/*+ PARALLEL(wo, 4) */
SELECT ...
  • Use judiciously - consumes more resources

Database Indexes Review: Critical for maintaining performance after upgrade:

  1. Verify existing indexes on key maintenance tables:
SELECT table_name, index_name, column_name, column_position
FROM all_ind_columns
WHERE table_owner = 'EAM'
  AND table_name IN ('EAM_WORK_ORDERS', 'EAM_WORK_ORDER_OPERATIONS', 'EAM_ASSET_ACTIVITIES')
ORDER BY table_name, index_name, column_position;
  1. Based on your full table scans, likely missing indexes on:

    • WORK_ORDER_DATE (if not indexed)
    • Composite index on (STATUS_CODE, WORK_ORDER_DATE)
    • ASSET_ID for join performance
    • ORGANIZATION_ID for multi-org filtering
  2. Create custom indexes if needed (work with DBA):

CREATE INDEX EAM_WO_STATUS_DATE_IDX
ON EAM_WORK_ORDERS(STATUS_CODE, WORK_ORDER_DATE, ORGANIZATION_ID);
  1. Rebuild fragmented indexes:
    • After upgrade, some indexes may be fragmented
    • Identify candidates:
SELECT index_name, blevel, leaf_blocks, distinct_keys
FROM user_indexes
WHERE table_name LIKE 'EAM%'
  AND blevel > 3;
  • Rebuild if blevel > 3: ALTER INDEX index_name REBUILD ONLINE;
  1. Update statistics (you’ve started this):
    • Complete the statistics gathering:
EXEC DBMS_STATS.GATHER_SCHEMA_STATS(
  ownname => 'EAM',
  estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,
  method_opt => 'FOR ALL COLUMNS SIZE AUTO',
  degree => 4
);
  • Schedule weekly auto-gather job:
BEGIN
  DBMS_SCHEDULER.CREATE_JOB(
    job_name => 'EAM_STATS_GATHER',
    job_type => 'PLSQL_BLOCK',
    job_action => 'BEGIN DBMS_STATS.GATHER_SCHEMA_STATS(''EAM''); END;',
    start_date => SYSTIMESTAMP,
    repeat_interval => 'FREQ=WEEKLY; BYDAY=SUN; BYHOUR=2',
    enabled => TRUE
  );
END;

Additional ofc-23b Specific Optimizations:

  1. Review new partitioning options:

    • ofc-23b supports partition pruning for date-range queries
    • Verify maintenance tables are partitioned by month/quarter
    • Ensure queries include partition key in WHERE clause
  2. Leverage new analytical functions:

    • ofc-23b has improved window functions performance
    • Use RANK() and ROW_NUMBER() instead of correlated subqueries
  3. Check for new subject area features:

    • ofc-23b may have introduced pre-aggregated maintenance metrics
    • Review ‘Asset Management - Maintenance Metrics’ subject area
    • Use these for summary reports instead of detail queries

Monitoring and Validation:

  1. Establish performance baselines:

    • Document current execution times for key reports
    • Set up alerts for reports exceeding thresholds
  2. Create a performance monitoring report:

    • Track query execution times from BI_QUERY_LOG
    • Identify reports that need further optimization
  3. Regular maintenance schedule:

    • Weekly: Review slow query log
    • Monthly: Regather statistics on high-churn tables
    • Quarterly: Review and rebuild indexes

Implementing these optimizations systematically should get your maintenance reports back to 2-3 minute performance or better, even with the ofc-23b changes. Focus first on the query optimization and index validation, as these typically yield the biggest improvements.


This draft is based on general Oracle Fusion Cloud knowledge. It has not been verified against your specific version and environment. Practitioners: verify the steps and share your experience below.

Check if the upgrade rebuilt or modified the indexes on the maintenance tables. Run a quick explain plan on your slowest report query to see if it’s doing full table scans instead of using indexes. In ofc-23b, Oracle sometimes changes the underlying physical implementation of subject areas which can affect query execution paths.

I’ve seen this before with OTBI upgrades. The issue is often with statistics on the base tables becoming stale after the upgrade. The cost-based optimizer relies on accurate table statistics to choose efficient execution plans. After an upgrade, you need to regather statistics on all maintenance-related tables. Have your DBA run DBMS_STATS.GATHER_SCHEMA_STATS on the schema containing your maintenance tables. This should be done during a maintenance window as it can be resource-intensive.

We ran the explain plan and it’s definitely doing full table scans on the work order history table. The statistics gathering is scheduled for this weekend. Hoping that resolves it, but wondering if there are other optimization steps we should take.

Tested this on our ofc-23b instance and adding indexed date filters to WORK_ORDER_DATE in the WHERE clause dropped our maintenance report runtime from 45 minutes to under 3.

Beyond statistics, look at your report’s date range filters. If you’re pulling large historical datasets without proper date filtering, performance will suffer. ofc-23b introduced changes to how date parameters are handled in OTBI - they’re now more strict about requiring explicit date ranges. Make sure your reports have date filters that use indexed date columns like WORK_ORDER_DATE or COMPLETION_DATE. Also check if your reports are using UNION or UNION ALL - the upgrade might have changed how these are processed.

Another thing - ofc-23b changed the default fetch size for OTBI reports from 5000 to 10000 rows. If your maintenance reports return large datasets, this could be causing memory issues and slowdowns. You can override this by adding a row limit parameter to your reports or adjusting the BI Publisher configuration. Also verify that your maintenance subject area cache settings are appropriate - sometimes upgrades reset these to non-optimal defaults.

The statistics regathering helped significantly - we’re down to about 8 minutes now instead of 20. But still not back to the pre-upgrade 2-3 minute performance. Going to implement the date filter optimizations and check the fetch size settings.