Lecturas asíncronas a nivel de kernel en PostgreSQL 19 con io_uring

Fuentes: kernel asynchronous reads in PostgreSQL 19 (io_uring)

PostgreSQL 19 introduce un nuevo método de E/S asíncrona basado en io_uring, la interfaz del kernel de Linux que permite enviar y completar operaciones de lectura sin bloquear el proceso. Frente al modelo previo basado en procesos 'io worker' internos, esta variante delega la gestión de la cola de E/S directamente en el núcleo, lo que elimina la necesidad de procesos auxiliares visibles y reduce el cambio de contexto.

En una prueba práctica dentro de un contenedor Docker con seccomp desactivado (requisito para usar las llamadas io_uring), se ejecutó una consulta de escaneo secuencial paralelo sobre una tabla 'smalldocs' con io_method=io_uring. Los parámetros io_combine_limit, io_max_concurrency e io_workers mantuvieron los valores por defecto de la beta. El plan de ejecución muestra un prelectura profunda (capacidad de 94, máximo de 91 peticiones en vuelo) y lecturas combinadas de unos 15,9 bloques de media, con tiempos de espera casi nulos pese a miles de operaciones de E/S.

La traza con strace confirma que el backend de PostgreSQL invoca io_uring_enter para enviar cada solicitud y consultar la cola de completados, sin esperar a lecturas individuales. Comparado con io_mode=sync (pread64 directo) e io_mode=worker (procesos io worker emitiendo pread64), io_uring ofrece el mismo resultado funcional pero con la E/S gestionada por el kernel, lo que puede mejorar el rendimiento en cargas con gran volumen de lectura secuencial en Linux.