by Thiwanka Senarathna β April 19, 2026
Have you enabled Oracle In-Memory but noticed that your tables are not being populated?
You run queries expecting faster performance, but nothing changes.
This is a common Oracle 26ai In-Memory performance issue in production systems.
Letβs troubleshoot it step by step using a practical DBA approach.
Problem: Table Not Populating in In-Memory
You execute:
ALTER TABLE sales INMEMORY;Then check:
SELECT segment_name, populate_status
FROM v$im_segments
WHERE segment_name = 'SALES';You see:
SALES NO POPULATEEven after some time, the table is not loaded into memory.
Cause: Why This Happens
Typical reasons include:
In-Memory is not configured
In-Memory area is full
Priority is set to NONE
IMCO process has not triggered population
Table is too large for available memory
Step 1: Check In-Memory Configuration
SHOW PARAMETER inmemory_size;Problem Case
INMEMORY_SIZE = 0π In-Memory is not enabled.
Solution 1: Enable In-Memory
ALTER SYSTEM SET inmemory_size = 8G SCOPE=SPFILE;Restart the database:
SHUTDOWN IMMEDIATE;
STARTUP;Step 2: Check Available Memory
SELECT pool, alloc_bytes, used_bytes
FROM v$inmemory_area;Problem Case
used_bytes = alloc_bytes
π Memory is fully utilized.
Solution 2: Optimize Memory Usage
Option 1: Remove unnecessary objects
ALTER TABLE old_table NO INMEMORY;Option 2: Increase memory
ALTER SYSTEM SET inmemory_size = 12G SCOPE=SPFILE;Step 3: Check Population Priority
SELECT segment_name, inmemory_priority
FROM v$im_segments
WHERE segment_name = 'SALES';Problem Case
SALES NONEπ Table will not populate automatically.
Solution 3: Set Priority
ALTER TABLE sales INMEMORY PRIORITY HIGH;Step 4: Check Population Status
SELECT segment_name, populate_status
FROM v$im_segments
WHERE segment_name = 'SALES';Status Values
NOT POPULATED
POPULATING
COMPLETED
Step 4.1: Check Detailed Population Metrics
SELECT segment_name,
bytes,
inmemory_size,
bytes_not_populated,
populate_status
FROM v$im_segments
WHERE segment_name = 'SALES';π Helps identify partially populated segments.
Step 5: Force Manual Population
EXEC DBMS_INMEMORY.POPULATE('SALES');To wait for completion:
EXEC DBMS_INMEMORY_ADMIN.POPULATE_WAIT('SALES');Step 6: Check Background Processes
SELECT program
FROM v$process
WHERE program LIKE '%IMCO%';π If IMCO is not running, population will not occur.
Solution 4: Ensure Background Processes Are Healthy
Verify database instance health
Restart if necessary
Step 7: Check Table Size vs Available Memory
SELECT segment_name, bytes
FROM dba_segments
WHERE owner = 'SCOTT'
AND segment_name = 'SALES';Compare with:
SELECT alloc_bytes
FROM v$inmemory_area;π If table size exceeds memory, full population is not possible.
Solution 5: Use Column-Level In-Memory
ALTER TABLE sales
INMEMORY (product_id, amount_sold);π Load only required columns.
Step 8: Validate In-Memory Usage in Execution Plan
EXPLAIN PLAN FOR
SELECT SUM(amount_sold)
FROM sales;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY());Expected
TABLE ACCESS INMEMORY FULLπ If not shown, In-Memory is not being used by the optimizer.
Real DBA Example
Problem
SALES table size: 40GB
In-Memory size: 16GB
Population never completed
Fix Applied
ALTER TABLE sales
INMEMORY (product_id, amount_sold, region_id)
MEMCOMPRESS FOR QUERY LOW
PRIORITY HIGH;Result
Memory usage reduced to ~8GB
Population completed successfully
Query execution time reduced from minutes to seconds
Conclusion
Oracle 26ai In-Memory performance issues are usually caused by configuration gaps, memory limits, or incorrect object settings.
By systematically checking:
In-Memory configuration
Memory usage
Population status
Execution plans
DBAs can quickly identify why objects are not being populated and apply the correct fix.
π Enabling In-Memory is not enough verification and monitoring are essential to ensure it is actually being used by the optimizer.