Skip to content

DISK_ASYNCH_IO - Enable Oracle Asynchronous I/O

DISK_ASYNCH_IO controls whether Oracle uses asynchronous I/O for disk operations against datafiles, control files, and log files stored on file systems. When enabled (the default), Oracle submits I/O requests to the operating system and continues processing without waiting for each request to complete — the OS notifies Oracle when each I/O finishes. This allows database writer processes (DBWn) and other background processes to overlap I/O with other work, improving throughput especially on systems with high write concurrency.

When DISK_ASYNCH_IO is set to FALSE, Oracle falls back to synchronous I/O — each I/O request blocks the calling process until it completes. This can serialize I/O and significantly reduce throughput on write-intensive workloads. This parameter applies only to file system files; ASM disk group I/O uses a separate asynchronous mechanism and is not affected by this setting.

Parameter Type: Static (requires instance restart to change) Default Value: TRUE Valid Values: TRUE, FALSE Available Since: Oracle 8i Modifiable: No — SCOPE=SPFILE only; takes effect on next startup PDB Modifiable: No (CDB-level setting)

-- Check current DISK_ASYNCH_IO setting
SELECT name, value, isdefault, ismodified, description
FROM v$parameter
WHERE name = 'disk_asynch_io';
-- Check SPFILE value (persistent setting for next startup)
SELECT name, value, isspecified
FROM v$spparameter
WHERE name = 'disk_asynch_io';
-- Check related async I/O parameters together
SELECT name, value
FROM v$parameter
WHERE name IN (
'disk_asynch_io',
'tape_asynch_io',
'filesystemio_options',
'db_writer_processes'
)
ORDER BY name;
-- Check whether async I/O is actually being used (OS-level view)
SELECT name, value
FROM v$parameter
WHERE name = 'disk_asynch_io';
-- Enable asynchronous I/O (default; recommended)
ALTER SYSTEM SET disk_asynch_io = TRUE SCOPE=SPFILE;
-- Disable asynchronous I/O (for diagnosis or unsupported OS configurations)
ALTER SYSTEM SET disk_asynch_io = FALSE SCOPE=SPFILE;
-- After changing, restart the instance to apply
-- SHUTDOWN IMMEDIATE;
-- STARTUP;
-- Verify the new setting after restart
SELECT name, value, isdefault
FROM v$parameter
WHERE name = 'disk_asynch_io';
EnvironmentRecommended Setting
Linux (ext4, XFS, NFS with async)TRUE (default)
AIX with JFS2TRUE
Solaris with UFSTRUE
Windows NTFSTRUE
NFS without async mount optionFALSE or use FILESYSTEMIO_OPTIONS
Legacy OS without kernel async I/OFALSE
ASM disk groups (all platforms)Not applicable — ASM uses its own async mechanism

In the vast majority of modern production environments, DISK_ASYNCH_IO = TRUE is correct and should not be changed. Disabling it is only appropriate when diagnosing I/O-related problems or when the OS configuration does not support kernel-level async I/O.

This is a boolean parameter with no numeric tuning. The key decision is whether your OS and file system combination supports asynchronous I/O properly. Verify OS-level async I/O support before relying on this feature.

-- Monitor I/O wait events to assess async I/O effectiveness
SELECT event, total_waits, time_waited,
ROUND(time_waited / NULLIF(total_waits, 0), 2) AS avg_wait_ms
FROM v$system_event
WHERE event IN (
'db file async I/O submit',
'db file sequential read',
'db file scattered read',
'db file parallel read',
'log file parallel write',
'log file sync'
)
ORDER BY time_waited DESC;
-- Check DBWn efficiency (high async I/O benefit visible here)
SELECT name, value
FROM v$sysstat
WHERE name IN (
'physical write total IO requests',
'physical write total bytes',
'DBWR checkpoint buffers written',
'DBWR buffers scanned'
)
ORDER BY name;
-- Review background process wait patterns
SELECT p.program, e.event, e.total_waits, e.time_waited
FROM v$process p
JOIN v$session s ON p.addr = s.paddr
JOIN v$session_event e ON s.sid = e.sid
WHERE p.background = 1
AND e.event LIKE '%I/O%'
ORDER BY e.time_waited DESC;
-- Check for I/O-related wait events that indicate async I/O issues
SELECT event, total_waits, total_timeouts,
time_waited, average_wait
FROM v$system_event
WHERE event LIKE '%async%'
OR event LIKE '%db file%'
ORDER BY time_waited DESC
FETCH FIRST 10 ROWS ONLY;
-- Examine I/O throughput by file
SELECT f.name, s.phyrds, s.phywrts,
s.readtim, s.writetim,
ROUND(s.writetim / NULLIF(s.phywrts, 0), 2) AS avg_write_ms
FROM v$datafile f
JOIN v$filestat s ON f.file# = s.file#
WHERE s.phywrts > 0
ORDER BY s.writetim DESC;

Issue 1: Async I/O Enabled but OS Does Not Support It

Section titled “Issue 1: Async I/O Enabled but OS Does Not Support It”

On some NFS mounts or legacy file systems, DISK_ASYNCH_IO = TRUE may be set but the OS silently falls back to synchronous I/O. Oracle will not report an error, but I/O performance will be degraded.

Resolution: Verify OS async I/O is enabled and working. On Linux, check that libaio is installed and that the mount options for NFS volumes include async or that FILESYSTEMIO_OPTIONS=ASYNCH is configured where appropriate.

-- After a suspected fallback, compare wait events before and after
-- disabling DISK_ASYNCH_IO to see if behavior changes
SELECT event, time_waited
FROM v$system_event
WHERE event IN ('db file async I/O submit', 'db file sequential read')
ORDER BY event;

Issue 2: I/O Errors After Disabling Async I/O

Section titled “Issue 2: I/O Errors After Disabling Async I/O”

Setting DISK_ASYNCH_IO = FALSE for diagnosis and then forgetting to re-enable it leaves the database running in synchronous I/O mode permanently. This commonly surfaces as elevated db file sequential read or log file sync wait times.

Resolution: Re-enable the parameter and restart the instance. Monitor wait events after the restart to confirm improvement.

-- Confirm async I/O is re-enabled after restart
SELECT name, value
FROM v$parameter
WHERE name = 'disk_asynch_io';
-- Confirm I/O wait events return to baseline
SELECT event, total_waits, time_waited
FROM v$system_event
WHERE event IN ('db file sequential read', 'log file sync')
ORDER BY time_waited DESC;

Issue 3: Confusion with FILESYSTEMIO_OPTIONS

Section titled “Issue 3: Confusion with FILESYSTEMIO_OPTIONS”

DISK_ASYNCH_IO is sometimes confused with FILESYSTEMIO_OPTIONS. The former is a boolean that enables or disables Oracle’s use of OS async I/O at a high level. The latter controls more granular options including direct I/O and is platform-specific. Both may need to be configured together for optimal performance.

Resolution: Review both parameters together and consult platform-specific Oracle documentation.

-- Review all I/O-related parameters at once
SELECT name, value, isdefault
FROM v$parameter
WHERE name IN ('disk_asynch_io', 'filesystemio_options', 'tape_asynch_io')
ORDER BY name;
  • FILESYSTEMIO_OPTIONS — Controls direct I/O and async I/O at the file system level; used alongside this parameter
  • DB_WRITER_PROCESSES — Controls the number of database writer processes; async I/O amplifies DBWn throughput
  • DB_FILE_MULTIBLOCK_READ_COUNT — Controls read I/O size for full scans; pairs with async I/O for sequential read throughput
  • LOG_BUFFER — Redo log buffer size; log writer also benefits from async I/O when enabled
VersionNotes
Oracle 8iParameter introduced
Oracle 10gDefault TRUE; async I/O used by DBWn, LGWR, and CKPT
Oracle 11gNo functional changes; behavior consistent across supported platforms
Oracle 12c+Fully supported; ASM continues to use its own separate async I/O path
Oracle 19c+No changes; TRUE remains the correct default for all modern OS configurations
Oracle 21c / 23aiBehavior unchanged; verify NFS mount options when using dNFS (Direct NFS) alongside this parameter