Abaixo o script para determinar o valor ideal dos parametros SHMMAX e SHMALL em sistemas operacionais Linux com o objetivo de melhorar a performance do PostgreSQL, segundo Greg Smith:#!/bin/bash# Output lines suitable for sysctl configuration based# on total amount of RAM on the system. The output# will allow up to 50% of physical memory to be allocated# into shared memory.# On Linux, you can use it as follows (as root):# # ./shmsetup >> /etc/sysctl.conf# sysctl -p# Early FreeBSD versions do not support the sysconf interface# used here. The exact version where this works hasn't# been confirmed yet.page_size=`getconf PAGE_SIZE`phys_pages=`getconf _PHYS_PAGES`if [ -z "$page_size" ]; then echo Error: cannot determine page size exit 1fiif [ -z "$phys_pages" ]; then echo Error: cannot determine number of memory pages exit 2fishmall=`expr $phys_pages / 2`shmmax=`expr $shmall \* $page_size` Forma 1Primeiro um select no banco:select oid,datname from pg_database;Depois acesse o diretorio onde sao criadas as bases do postgresql. Geralmente em /usr/local/pgsql/data de um du -sh, ou du -sh e o tamanho sera mostrado. Caso o postgres esteja num windows, basta ver as propriedades do diretorio com o oid da base que se deseja consultar.Forma 2select * from pg_database_size('nomedobanco')Forma 3select pg_size_pretty(pg_database_size('base_que_sera_consultada')); A algum tempo atras, surgiu a necessidade de saber o tamanho de cada tabela em bytes, numa base de dados (database) Postgresql. Era necessario para estimar o crescimento destas tabelas e saber quanto tempo levaria que esgotar a capacidade do HD.Nesta pesquisa encontrei muitos dados interessantes que irei compartilhar com voces. Claro que para alguns nao tera novidade nenhuma nesta materia, mas com certeza sera valioso para alguem como foi para mim. Antes de comecar temos que entender como o postgresql gerencia os arquivos da base de dados, entao vamos explora-lo. Como PostgreSQL gerencia os arquivos da base de dados ? O conceito fundamental do Postgresql e de outros SGBDS e que os dados sao armazenados em tabelas e as tabelas agrupadas em base de dados (databases). Em um nivel mais alto desta organizacao as base de dados sao agrupadas em clusters e um cluster de base de dados e gerenciado pelo postmaster.E como fica essa hierarquia no disco ?Para descobrir como funciona essa hierarquia na pratica vamos fazer umas consultas (queries) , executar um comandos no shell.Vamos comecar conectando a base de dados e descobrindo o OID (Obect ID) atraves de uma consulta. ~$ psql book -U postgres book=# SELECT datname, oid from pg_database; datname oid postgres 10819 book 16384 template1 1 template0 10818 (4 registros) Na resposta da nossa query podemos ver que temos 4 base de dados (databases) no cluster. Agora podemos encontrar as base de dados no disco dentro do diretorio $PG_DATA. ~$ cd $PG_DATA~$ lsbase pg_clog pg_ident.conf pg_subtrans pg_twophase pg_xlog postmaster.optsglobal pg_hba.conf pg_multixact pg_tblspc PG_VERSION postgresql.conf postmaster.pid Dentro do subdiretorio base encontra-se as base de dados no SELECT que executamos antes tem um oid 1 para a base de dados (datname) template1. Vamos entrar dentro do diretorio base e ver o que tem por la.~$ cd base~$ ls -ladrwx 2 postgres postgres 2648 Jul 11 11:17 1drwx 2 postgres postgres 2648 Jul 11