PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

pgFincore 1.2, uma extensão do PostgreSQL


pgFincore 1.2 é uma extensão do PostgreSQL para auditar e manipular o cache da página de dados do sistema operacional. A extensão já tem um histórico de 7 anos de uso, com evoluções correspondentes às necessidades de produção.

Baixe aqui a última versão 1.2, compatível com PostgreSQL 9.6.


Cache de dados




O cache de página de dados é uma operação que acontece "naturalmente", em vários níveis no gerenciamento de dados. O objetivo é simples:uma infinidade de camadas são sobrepostas entre os dados gravados fisicamente em disco e a restituição ao usuário. Atualmente quase todas as camadas de dados possuem uma abstração para servir comandos de leitura e escrita mais rapidamente. Assim, a maioria dos discos rígidos oferece um cache de gravação, que atrasa a gravação física, e um cache de leitura que permite antecipar solicitações futuras e fornecer dados mais rapidamente. Existe um sistema equivalente em SANs, placas RAID, sistemas operacionais, software, etc.

É claro que o PostgreSQL tem seu próprio sistema de gerenciamento para escrita e leitura, os buffers compartilhados , que pode ser auditado com a extensão pg_buffercache.

É possível auditar o cache do sistema operacional com ferramentas do sistema e pgFincore porta isso no PostgreSQL.

Leia com antecedência


A maioria dos sistemas operacionais otimiza os caminhos de dados fornecendo uma janela de leitura antecipada, permitindo pré-carregar dados no cache e, assim, fornecê-lo mais rapidamente aos aplicativos. O PostgreSQL contém várias otimizações para favorecer esse comportamento no nível do sistema e também carrega funcionalidade semelhante com a opção Effective_io_concurrency.

Uma solução para facilitar essas otimizações é usar chamadas de sistema POSIX_FADVISE. Novamente pgFincore Porta esta solução para o PostgreSQL.

pg Fincore 1.2


Esta extensão permite, portanto:
  • para obter informações precisas sobre a ocupação de uma tabela ou índice (e alguns outros arquivos usados ​​pelo PostgreSQL) no cache do sistema que suporta POSIX (linux, BSD, …),
  • para manipular este cache:faça um mapa dele e restaure-o mais tarde ou em outro servidor,
  • para otimizar caminhos por meio de chamadas posix_fadvise.

Obtenha o pgFincore


Pacotes Debian e Red Hat disponíveis nas distribuições e para cada versão do PostgreSQL nos repositórios Apt PGDG e RPM PGDG.

E as fontes no repositório git pgfincore.

Precisa de ajuda?


Além do suporte da comunidade, você pode entrar em contato com o 2ndQuadrant.

Exemplos de uso

Configuração

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

Informações do sistema

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

Otimize o passeio aleatório (reduza a janela de leitura antecipada)

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

Otimize a passagem sequencial (aumento da janela de leitura antecipada)

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

Auditoria de cache

# 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 | 

Carregar uma tabela na memória

# 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

Limpe o cache de uma tabela

# 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 em cache


Aqui usamos um parâmetro do tipo bit-string representando as páginas a serem carregadas e descarregadas da memória.
# 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 a demonstração, apenas 6 páginas de dados são tratadas acima, 1 carrega a página, 0 descarrega a página.