sql >> Base de Datos >  >> RDS >> PostgreSQL

pgFincore 1.2, una extensión de PostgreSQL

pgFincore 1.2 es una extensión de PostgreSQL para auditar y manipular la memoria caché de la página de datos del sistema operativo. La extensión ya tiene un historial de 7 años de uso, con evoluciones correspondientes a las necesidades de producción.

Descarga aquí la última versión 1.2, compatible con PostgreSQL 9.6.

Caché de datos

El almacenamiento en caché de la página de datos es una operación que ocurre "naturalmente", en varios niveles en la gestión de datos. El objeto es simple:se superponen multitud de capas entre los datos registrados físicamente en el disco y la restitución al usuario. Actualmente, casi todas las capas de datos tienen una abstracción para servir comandos de lectura y escritura más rápido. Por lo tanto, la mayoría de los discos duros ofrecen una memoria caché de escritura, que retrasa la escritura física, y una memoria caché de lectura que le permite anticipar futuras solicitudes y servir los datos con mayor rapidez. Existe un sistema equivalente en SAN, tarjetas RAID, sistemas operativos, software, etc.

PostgreSQL tiene, por supuesto, su propio sistema de gestión para escrituras y lecturas, los búferes compartidos , que se puede auditar con la extensión pg_buffercache.

Es posible auditar el caché del sistema operativo con herramientas del sistema y pgFincore portar esto en PostgreSQL.

Leer adelante

La mayoría de los sistemas operativos optimizan las rutas de datos proporcionando una ventana de lectura anticipada, lo que permite precargar datos en el caché y así proporcionarlo más rápidamente a las aplicaciones. PostgreSQL contiene varias optimizaciones para favorecer este comportamiento a nivel del sistema y también ofrece una funcionalidad similar con la opción efectiva_io_concurrencia.

Una solución para facilitar estas optimizaciones es utilizar llamadas al sistema POSIX_FADVISE. De nuevo pgFincore portar esta solución en PostgreSQL.

pgFincore 1.2

Por lo tanto, esta extensión permite:

  • para obtener información precisa sobre la ocupación de una tabla o un índice (y algunos otros archivos utilizados por PostgreSQL) en el caché del sistema que soporta POSIX (linux, BSD, …),
  • para manipular este caché:haz un mapa de él y restáuralo más tarde o en otro servidor,
  • para optimizar rutas a través de llamadas posix_fadvise.

Obtener pgFincore

Paquetes Debian y Red Hat disponibles en las distribuciones y para cada versión de PostgreSQL en los repositorios Apt PGDG y RPM PGDG.

Y las fuentes en el repositorio pgfincore git.

¿Necesitas ayuda?

Además del apoyo de la comunidad, puede comunicarse con 2ndQuadrant.

Ejemplos de uso

Configuración

$ sudo apt-get install postgresql-9.6-pgfincore
$ psql -c 'CREATE EXTENSION pgfincore;'

Información del sistema

# select * from pgsysconf_pretty();
 os_page_size | os_pages_free | os_total_pages 
--------------+---------------+----------------
 4096 bytes   | 314 MB        | 16 GB

Optimizar la caminata aleatoria (reducir la ventana de lectura anticipada)

# select * from pgfadvise_random('pgbench_accounts_pkey');
          relpath | os_page_size | rel_os_pages | os_pages_free 
------------------+--------------+--------------+---------------
 base/16385/24980 | 4096         | 2            | 1853808

Optimizar el recorrido secuencial (aumento de la ventana de lectura anticipada)

# select * from pgfadvise_sequential('pgbench_accounts');
 relpath          | os_page_size | rel_os_pages | os_pages_free 
------------------+--------------+--------------+---------------
 base/16385/25676 | 4096         | 3176         | 1829288

Auditoría de caché

# select * from pgfincore('pgbench_accounts');
      relpath       | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit 
--------------------+---------+--------------+--------------+-----------+-----------+---------------+---------
 base/11874/16447   |       0 |         4096 |       262144 |         3 |         1 |        408444 | 
 base/11874/16447.1 |       1 |         4096 |        65726 |         0 |         0 |        408444 | 

Cargar una tabla en la memoria

# select * from pgfadvise_willneed('pgbench_accounts');
      relpath       | os_page_size | rel_os_pages | os_pages_free 
--------------------+--------------+--------------+---------------
 base/11874/16447   |         4096 |       262144 |         80650
 base/11874/16447.1 |         4096 |        65726 |         80650

Borrar el caché de una tabla

# select * from pgfadvise_dontneed('pgbench_accounts');
      relpath       | os_page_size | rel_os_pages | os_pages_free
--------------------+--------------+--------------+---------------
 base/11874/16447   |         4096 |       262144 |        342071
 base/11874/16447.1 |         4096 |        65726 |        408103

Restaurar páginas en caché

Aquí usamos un parámetro de tipo cadena de bits que representa las páginas para cargar y descargar de la memoria.

# select * 
  from pgfadvise_loader('pgbench_accounts', 0, true, true, 
                       B'101001'); -- Varbit décrivant les pages à manipuler
     relpath      | os_page_size | os_pages_free | pages_loaded | pages_unloaded 
------------------+--------------+---------------+--------------+----------------
 base/11874/16447 |         4096 |        408376 |            3 |              3

NOTA:para la demostración, solo se manejan 6 páginas de datos arriba, 1 carga la página, 0 descarga la página.