Io_uring reduces CPU use for Oracle Database asynchronous writes
io_uring in Oracle Database: A Hybrid Storage I/O Architecture at Production Scale
DatabasesPerformance
Summary
Storage input/output (I/O) in databases can slow down performance and use a lot of CPU power. The authors describe how Oracle Database integrated a Linux tool called io_uring to improve asynchronous, batched I/O operations, which are common in some database tasks. This change cuts CPU use for background write operations and speeds up some queries, but it does not help with synchronous reads, which are common in transaction processing. Based on these findings, the authors propose using a mix of traditional and new I/O methods for best performance in databases.
What this means in practice
- •For database administrators: Deploy a hybrid I/O approach in Oracle Database to reduce CPU load during asynchronous writes without impacting synchronous read performance.
- •For linux system engineers: Optimize multi-process RDBMS environments by integrating io_uring with shared buffer registration to improve asynchronous storage I/O efficiency.
Authors
Rajarshi Chowdhury, Akshay Shah, Margaret Susairaj, Ayush Agrawal
Abstract
We describe the integration of io_uring into Oracle Database's storage layer and the architectural decisions required to deploy it in a production multi-process RDBMS. Our design uses per-process ring contexts that eliminate inter-process synchronization, a shared buffer registration mechanism now part of the mainline Linux kernel, and a transparent fallback to libaio on error. Evaluation on an internal development build of Oracle Database 26ai shows that io_uring's benefits concentrate on asynchronous batched I/O paths: on a mixed OLTP workload (TPC-C), io_uring delivers identical throughput while reducing server CPU utilization by 1.2 percentage points through more efficient background writes; on analytical queries (TPC-H), CPU per query drops by 8.5% (geometric mean). Isolating the write path alone shows 29% lower CPU per write and 34% higher throughput. Synchronous read paths -- the dominant I/O in OLTP -- show no improvement and even increased CPU usage for very large I/O sizes. These results motivate a hybrid I/O architecture that retains pread/pwrite for synchronous operations, adopts io_uring for asynchronous batched I/O, and falls back transparently to libaio -- a selective strategy that may also be relevant to other database systems facing the same integration question.