F.30. pg_prewarm — precargar datos de relaciones en los cachés de búfer #

F.30.1. Funciones
F.30.2. Parámetros de configuración
F.30.3. Autor

El módulo pg_prewarm proporciona una forma conveniente de cargar datos de relaciones tanto en el caché de búfer del sistema operativo como en el caché de búfer de PostgreSQL. La precarga se puede realizar manualmente utilizando la función pg_prewarm, o se puede realizar automáticamente incluyendo pg_prewarm en shared_preload_libraries. En este último caso, el sistema ejecutará un proceso de segundo plano (background worker) que registra periódicamente el contenido de los búferes compartidos en un archivo llamado autoprewarm.blocks y, utilizando 2 procesos de segundo plano, recargará esos mismos bloques después de un reinicio.

F.30.1. Funciones #

pg_prewarm(regclass, mode text default 'buffer', fork text default 'main',
           first_block int8 default null,
           last_block int8 default null) RETURNS int8

El primer argumento es la relación que se va a precargar. El segundo argumento es el método de precarga que se utilizará, el cual se describe en detalle más abajo; el tercero es la bifurcación (fork) de la relación que se va a precargar, generalmente main. El cuarto argumento es el número del primer bloque a precargar (se acepta NULL como sinónimo de cero). El quinto argumento es el número del último bloque a precargar (NULL significa precargar hasta el último bloque en la relación). El valor de retorno es el número de bloques precargados.

Hay tres métodos de precarga disponibles. prefetch emite peticiones de pre-búsqueda asíncronas al sistema operativo si esto está admitido, o genera un error en caso contrario. read lee el rango de bloques solicitado; a diferencia de prefetch, este es síncrono y está admitido en todas las plataformas y compilaciones, pero puede ser más lento. buffer lee el rango de bloques solicitado en el caché de búfer de la base de datos.

Ten en cuenta que con cualquiera de estos métodos, intentar precargar más bloques de los que se pueden almacenar en caché — por el sistema operativo cuando se utiliza prefetch o read, o por PostgreSQL cuando se utiliza buffer — probablemente provocará que los bloques con números más bajos sean desalojados a medida que se leen los bloques con números más altos. Los datos precargados tampoco gozan de ninguna protección especial contra el desalojo de caché, por lo que es posible que otra actividad del sistema desaloje los bloques recién precargados poco después de que se lean; por el contrario, la precarga también puede desalojar otros datos de la caché. Por estas razones, la precarga suele ser más útil al inicio, cuando las cachés están en su mayoría vacías.

autoprewarm_start_worker() RETURNS void

Inicia el proceso de segundo plano principal de autoprewarm. Esto normalmente ocurrirá de forma automática, pero es útil si la precarga automática no se configuró al iniciar el servidor y deseas iniciar el proceso más tarde.

autoprewarm_dump_now() RETURNS int8

Actualiza autoprewarm.blocks inmediatamente. Esto puede ser útil si el proceso de autoprewarm no se está ejecutando pero prevés ejecutarlo después del próximo reinicio. El valor de retorno es el número de registros escritos en autoprewarm.blocks.

F.30.2. Parámetros de configuración #

pg_prewarm.autoprewarm (boolean)

Controla si el servidor debe ejecutar el proceso de autoprewarm. Esto está activado por defecto. Este parámetro solo se puede establecer al iniciar el servidor.

pg_prewarm.autoprewarm_interval (integer)

Este es el intervalo entre actualizaciones de autoprewarm.blocks. El valor predeterminado es 300 segundos. Si se establece en 0, el archivo no se volcará a intervalos regulares, sino solo cuando se apague el servidor.

Estos parámetros deben establecerse en postgresql.conf. Un uso típico podría ser:

# postgresql.conf
shared_preload_libraries = 'pg_prewarm'

pg_prewarm.autoprewarm = true
pg_prewarm.autoprewarm_interval = 300s

F.30.3. Autor #

Robert Haas