1. What does “Deferred” mean in Materialized Views?
Deferred Refresh means the materialized view is not
refreshed immediately after data changes.
It is refreshed:
- Manually
- On schedule (via job)
- When explicitly invoked
Syntax:
REFRESH ... ON DEMAND
Deferred refresh is the same as ON DEMAND refresh.
2. How do you create a Materialized View with Deferred Refresh?
CREATE MATERIALIZED VIEW mv_sales_summary
BUILD IMMEDIATE
REFRESH FAST
ON DEMAND
AS
SELECT region_id, SUM(amount) total_sales
FROM sales
GROUP BY region_id;
- BUILD IMMEDIATE → Populate now
- REFRESH FAST → Incremental refresh
- ON DEMAND → Deferred refresh
3. Deferred vs ON COMMIT
|
Feature |
ON COMMIT |
ON DEMAND (Deferred) |
|
Refresh timing |
Automatically after commit |
Manual or scheduled |
|
Impact on OLTP |
High |
Low |
|
Data freshness |
Immediate |
Delayed |
|
Performance |
Slower transactions |
Better performance |
4. How do you manually refresh a Deferred MV?
EXEC DBMS_MVIEW.REFRESH('mv_sales_summary');
EXEC DBMS_MVIEW.REFRESH('mv_sales_summary', 'F'); -- Fast
EXEC DBMS_MVIEW.REFRESH('mv_sales_summary', 'C'); -- Complete
5. Can Deferred refresh be scheduled automatically?
Yes, using DBMS_SCHEDULER:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'mv_refresh_job',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN DBMS_MVIEW.REFRESH(''mv_sales_summary''); END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=HOURLY',
enabled => TRUE
);
END;
Schedules: Hourly, daily, weekly.
6. Refresh types in Deferred mode
- FAST Refresh – uses MV logs, incremental updates
- COMPLETE Refresh – rebuilds entire MV
- FORCE Refresh – tries FAST, falls back to COMPLETE
7. Requirement for FAST Deferred refresh
MV logs must exist:
CREATE MATERIALIZED VIEW LOG ON sales
WITH PRIMARY KEY INCLUDING NEW VALUES;
8. Internal behavior during Deferred Refresh
1. Oracle checks staleness
2. Reads MV logs (FAST)
3. Applies incremental changes or rebuilds
4. Updates metadata
5. Generates redo and undo
Until refresh occurs, MV may be STALE.
9. How to check if MV is stale?
SELECT mview_name, staleness
FROM user_mviews;
Values: FRESH, STALE, NEEDS_COMPILE
10. When should you use Deferred refresh?
Use when:
- OLTP performance is critical
- Large tables
- Real-time accuracy not required
- Data warehouse/reporting systems
- Nightly batch processing
11. Advantages of Deferred refresh
- Reduces OLTP overhead
- Better scalability
- Controlled refresh timing
- Easier batch management
- Improved system performance
12. Disadvantages
- Data may be outdated
- Manual refresh management
- Complex refresh logic in some cases
- FAST refresh restrictions
13. What is BUILD DEFERRED?
CREATE MATERIALIZED VIEW mv_test
BUILD DEFERRED
REFRESH COMPLETE
ON DEMAND
AS
SELECT * FROM employees;
- Does not populate MV at creation
- Data loaded only during first refresh
- Useful for large tables or minimal creation time
14. BUILD DEFERRED vs REFRESH ON DEMAND
|
Feature |
BUILD DEFERRED |
REFRESH ON DEMAND |
|
Data populated at creation |
No |
Yes (if BUILD IMMEDIATE) |
|
Controls refresh timing |
No |
Yes |
|
First refresh required |
Yes |
No |
15. Real-World Scenario
- E-commerce with 50M daily transactions
- ON COMMIT refresh slows every transaction
- Solution: REFRESH FAST ON DEMAND, schedule every 30 mins
- Result: Faster transactions, near real-time reporting, controlled system load
16. Does Deferred refresh lock base tables?
- Does not lock during normal DML
- Brief locks may occur during refresh
- FAST refresh minimizes locking
17. Can multiple MVs be refreshed together?
EXEC DBMS_MVIEW.REFRESH('mv1, mv2, mv3');
Supports single, multiple, or grouped refresh.
18. Performance considerations
- Use FAST refresh when possible
- Index MVs
- Partition large MVs
- Schedule refresh during low-traffic hours
- Monitor redo/undo
- Avoid overly complex queries
19. Common mistakes
- Forgetting MV logs for FAST refresh
- Refresh too frequently
- Ignoring stale status
- Using ON COMMIT in OLTP
- Not testing refresh duration
20. Interview Tip
“What is Deferred refresh in Materialized Views?”
Answer:
“Deferred refresh means the materialized view is refreshed manually or on schedule using ON DEMAND instead of automatically on commit. It reduces OLTP overhead and is used in data warehouse environments where near real-time data is acceptable.”
No comments:
Post a Comment