Configuração de memória

<< Click to Display Table of Contents >>

Navigation:  PostgreSQL > Avançado >

Configuração de memória

Previous pageReturn to chapter overviewNext page

Local

/var/lib/pgsql/data/postgresql.conf

 

Resumo

max_connections: O menor número possível;

shared buffers: (no máximo) 30% do total -> Para operações em execução; (valor ideal entre 20% a 33%)

temp_buffers: Acesso às tabelas temporárias;

work_mem: Para agregação, ordenação, consultas complexas;

maintenance_work_mem: 75% da maior tabela ou índice;

max_fsm_pages: Máximo de páginas necessárias p/ mapear espaço livre. Importante para operações de UPDATE/DELETE.;

 

work_mem

Especifica a quantidade de memória utilizada pelas operações internas de classificação e tabelas de dispersão (hash tables), antes de alternar para arquivos temporários em disco. O valor é especificado em kilobytes, e o valor padrão é 1024 kilobytes (1 MB). Deve ser observado que, em uma consulta complexa, podem ser executadas várias classificações ou operações de hash em paralelo; cada uma podendo utilizar tanta memória quanto especificado por este parâmetro, antes de colocar os dados em arquivos temporários. Além disso, diversas sessões em execução podem estar fazendo operações de classificação simultaneamente. Portanto, a memória total utilizada pode ser várias vezes o valor de  work_mem; é necessário ter este fato em mente ao escolher o valor. As operações de classificação são utilizadas por  ORDER BY,  DISTINCT e junções por mesclagem (merge joins). As tabelas de dispersão (hash tables) são utilizadas em junções de dispersão (hash joins), agregações baseadas em dispersão (hash-based aggregation), e no processamento baseado em dispersão (hash-based processing) de subconsultas IN.  

shared_buffers

Define o número de buffers de memória compartilhada, utilizados pelo servidor de banco de dados. O valor típico é 1000, mas pode ser menor se a configuração do núcleo do sistema operacional não não tiver capacidade para suportar este valor (conforme determinado durante o initdb). Cada buffer possui 8192 bytes, a menos que seja escolhido um valor diferente para BLCKSZ ao construir o servidor. O valor definido deve ser pelo menos igual a 16, assim como pelo menos duas vezes o valor de max_connections; entretanto, normalmente é necessário definir um valor bem maior que o mínimo para obter um bom desempenho. São recomendados valores de alguns poucos milhares para instalações de produção. Somente pode ser definido na inicialização do servidor.   O aumento deste parâmetro pode fazer com que o PostgreSQL requisite mais memória compartilhada System V que o permitido pela configuração padrão do sistema operacional. Para obter informações sobre como ajustar estes parâmetros deve ser consultada a Seção 16.5.1, se for necessário.  

maintenance_work_mem (integer)

Especifica a quantidade máxima de memória que pode ser utilizada pelas operações de manutenção, como VACUUM, CREATE INDEX e ALTER TABLE ADD FOREIGN KEY. O valor é especificado em kilobytes, e o valor padrão é 16384 kilobytes (16 MB). Uma vez que somente pode ser executada uma destas operações por vez em uma mesma sessão de banco de dados, e o servidor normalmente não possui muitas delas acontecendo ao mesmo tempo, é seguro definir este valor significativamente maior que  work_mem. Definições maiores podem melhorar o desempenho do comando VACUUM e da restauração de cópias de segurança.

max_stack_depth (integer) 

Especifica a profundidade máxima segura para a pilha de execução do servidor. A definição ideal deste parâmetro é o limite do tamanho da pilha imposto pelo núcleo do sistema operacional (conforme definido pelo comando ulimit -s 2  ou seu equivalente local, menos uma margem de segurança em torno de um megabyte. A margem de segurança é necessária porque a profundidade da pilha não é verificada em todas as rotinas do servidor, mas somente nas rotinas potencialmente recursivas chave, como avaliação de  expressão. Definir o parâmetro acima do limite do núcleo significa que uma função recursiva fora de controle pode derrubar um processo servidor individual. A definição padrão é 2048 KB (dois megabytes), que é conservadoramente pequena e com pouca chance de risco de queda. Entretanto, pode ser muito pequena para permitir a execução de funções complexas

max_fsm_pages (integer) 

Define o número máximo de páginas de disco para as quais o espaço livre será acompanhado no mapa de espaço livre compartilhado. São consumidos seis bytes de memória compartilhada para cada encaixe de página. O valor definido deve ser maior que 16 * max_fsm_relations. O valor padrão é 20000. Somente pode ser definido na inicialização do servidor.

max_fsm_relations (integer) 

Define o número máximo de relações (tabelas e índices) para as quais o espaço livre será acompanhado no mapa de espaço livre compartilhado. São consumidos, aproximadamente, 50 bytes de memória compartilhada por cada encaixe. O valor padrão é 1000. Somente pode ser definido na inicialização do servidor.  

Material em português para leitura

http://www.devmedia.com.br/articles/viewcomp.asp?comp=5518&hl=