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.
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.
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
Robert Haas <[email protected]>