Você está na página 1de 11

----------------------------------------------- Comandos Linux ------------------------------------------------------

Criar usuario postgres ---> adduser postgres


Tirar as permisses da pasta data ---> chmod 0700 data
Remover pasta ---> rm -rf nome da pasta
Remover arquivo ---> rm -f nome do arquivo ou rm -i nome do arquivo (ira perguntar se
realmente quer apagar o arquivo)
Instalar comando make ----> apt-get install make
Parar e reiniciar o servio do postgres /home/postgres/pg913/bin/pg_ctl stop -m fast e depois
start
Com o usurio postgres pg_ctl stop(Parar)
pg_ctl start(Reiniciar)
pg_ctl stop f(Fora parar)
Alterar ip do servidor ----> vi /etc/network/interfaces
Mudar de usuario -----> usar o camando su
Reiniciar servidor linux -----> shutdown -r now
Desligar o servidor ----> shutdown -h now
Ao inves de colocar now pode-se colocar +10 ento o sistema efetuara o camando daqui a 10
minutos
Mostar a quanto tempo o servidor esta ligado ----> uptime
Mostar o diretorio em que se encontra ---> pwd
Trocar senha de usuario ----> passwd
Copiar arquivo -------> cp diretorio/arquivo diretorio de destino
Mover arquivo --------> mv diretorio/arquivo diretorio de destino
Desligar servidor -----> halt
Passar para o dono da pasta ---> chown postgres -R /home/postgres/pg914l/
Alterar hora e data ----> date -s hh:mm:ss e date -d ms/dia/ano
Nao pedir cds debian ---> vi /etc/apt/sources.list comentar todos Cds
Grava links do debian no arquivo /etc/apt/sources.list ---> Links abaixo

deb http://debian.las.ic.unicamp.br/debian/ squeeze main


deb-src http://debian.las.ic.unicamp.br/debian/ squeeze main

deb http://security.debian.org/ squeeze/updates main


deb-src http://security.debian.org/ squeeze/updates main

# squeeze-updates, previously known as 'volatile'


deb http://debian.las.ic.unicamp.br/debian/ squeeze-updates main
deb-src http://debian.las.ic.unicamp.br/debian/ squeeze-updates main

Habilitar acesso internet no arquivo ----> vi /etc/resolv.conf comando abaixo:


nameserver 8.8.8.8, se no existir arquivo favor criar.
Iniciar o servico do postgres no boot ----> editar o arquivo da pasta da instalao do postgres
conforme a instalao postgresql-9.1.3/contrib/start-scripts/linux e copiar para
/etc/initit.d/postgresql
Dar permisso de execuo desse arquivo ----> chmod u+x /etc/init.d/postgresql
Efetuar o camando ---> update-rc.d postgres defaults

---------------------------------------------------- Configurar Rede---------------------------------------------------

Configurar rede ----->


Acessar o arquivo vi /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth1 (ou 0) 1 Placa de rede externa 0 Placa de rede na maquina


iface eth1 (ou 0) inet static
address 192.168.2.1
netmask 255.255.255.0
gateway 192.168.2.254
dns-nameservers 192.168.2.254

Aps salvar o arquivo e digitar esse comando


# /etc/init.d/networking restart

---------------------------------------------- Instalao Postgres --------------------------------------------------

Instalar o postgres utilizando um usurio que no seja root, criar um usuario postgres.
1- sudo aptitude install libreadline-dev libssl-dev gettext zlib1g-dev libxml2-dev
2- ./configure --prefix=/home/postgres/pg913 --enable-nls --with-openssl --with-libxml
3- make world
4- make install-world
5- mkdir /home/postgres/pg913/data
6- /home/postgres/pg913/bin/initdb -D /home/postgres/pg913/data/
7- /home/postgres/pg913/bin/pg_ctl start -D /home/postgres/pg913/data/.

- Dentro da pasta /home/postgres


sudo gedit .bashrc
Colocar os seguintes comandos
export PGDATA=/home/postgres/pg934/data
export PATH=/home/postgres/pg934/bin:$PATH

- Instalar pgadmin
sudo aptitude install pgadmin3

- Verifcar conexes no banco


ps aux |grep postgres

- Verificar se banco esta startado


netstat -an |less

- Alterar autenticao no pg_hba


gedit /home/curso/pg913/pg_hba.conf
Restartar banco ---> pg_ctl restart
Recarregar configuraes ---> pg_ctl reload

---------------------------------------------- Memria Compartilhada ---------------------------------------------

- Verificar memria compartilhada, para saber qual a instancia utiliza o bloco de memria do
Postgres ----> s verificar no Postmaster.pid
ipcs -m

- Comando para alterar valor de memria compartlhada


vi /etc/sysctl.conf

- Tamanho maximo de um segmento de memria compartilhada em bytes


kernel.shmmax = 2022105088
6442450944
- Nmero total de paginas de memoria compartilhada
kernel.shmall = 493678

- Depois de salvar o arquivo deve-se aplicar o comando


sysctl -w kernel.shmmax=2022105088

- Depois de salvar o arquivo deve-se aplicar o comando


sysctl -w kernel.shmall=493678

- Aps, acessar o arquivo Postgresql.conf e alterar o valor do parametro -----> shared buffers

- Fazer overcommit para no deixar o Postgres usar mais memria do que esta disponvel na
maquina
sudo sysctl vm.overcommit_memory

0 - Overcommit baseado em heuristica


1 - Faz overcommit
2 - No faz overcommit

- Configurar o linux para no deixar o overcommit no matar o processo pai


echo -17>/proc/12345/oom_adj
- cat /sys/block/sda/queue/scheduler
noop anticipatory

- su - echo "deadline" > /sys/block/sda/queue/scheduler

---------------------------------------------------- SERVIDORES ------------------------------------------------------

- Prefira memorias com correo de erro e com registradores (quanto mais melhor);
- O mais importante so os discos ----> mais rpidos e com controladoras melhores;
-Prefira controladoras com baterias e quanto maior o cache melhor ser a performance;
- Utilize No-Breaks
- RAID (Redundant Array of Independent Disks)
- Verificar se o firewall no est limitando as transaes de rede;
- Se o banco for virtualizado garantir que (I/O) no seja compartilhado;
- Ao escolher Hardware avalie a qualidade dos componentes (RAID, CONTROLADORAS,
DISCOS, MEMORIA, ETC );

------------------------------------------------------------- SO ------------------------------------------------------------

- O ideal compilar o Postgres com o sistema operacional;


- No compartilhar o usurio Postgres com outros servios;
- Instales de grande porte necessitam de tuning no SO;
- Cache do Postgres fica armazenada em memria compartilhada;
- Todos processos servidor utilizam essa cache;
- Utilitrio sysctl configura parmetros do System V IPC;
- Comportamento padro de memria virtual do Kernel no timo para o Postgres;
- Fazer overcommit para no deixar o Postgres usar mais memria do que esta disponivel na
maquina;
- Sistemas de arquivos no linux o melhor o XFS;

------------------------------------------------------- Organizao -----------------------------------------------------

- Os dados ficam contidos em PGDATA


- PG_VERSION: Verso do Postgres;
- base: Diretrio contendo subdiretorios por banco de dados;
- global: Diretrio contendo tabela vlidas por todo cluster;
- pg_clog: diretrio contendo status da efetivao de transaes;
- pg_multixact: diretrio contendo statusde mltiplas transaes (locks);
- pg_stat_tmp: diretorio contendo arquivos temporarios de estatisticas;
- pg_subtrans: diretorio contendo status de subtransaes;
- pg_notify: diretorio contendo staus de LISTEN/NOTIFY;
- pg_serial: diretorio contendo transaes serializaveis;
- pg_tblspc: contem links simbolicos para tablespaces
- pg_twophase: diretorio contendo arquivos de transaes preparadas;

---------------------------------------------------- Banco de Dados --------------------------------------------------

- Tablespaces

Subdiretorio PGDATA/base/oid
Cada tablespace tem link sibolico para ela em PGDATA/pg_tablespace;
nome desse link oid da tablespace em pg_tblspc
Tabelas ou indices com muito acesso podem merecer tablespace

- Log de transao

Arquivos de logs de trnsao contidos em PGDATA/pg_xlog


Responsaveis por boa parte da taxa de I/O em sistemas OLTP
boa prtica separa-la do PGDATA;
opao - xlogdir ao executar initidb
mover dados e fazer um link simbolico
servio desligado.

- Arquivos temporarios

Contidos em PGDATA/base/dboid/pgsql_tmp
Subdiretorio pgsql_tmp no diretrio da tablespace
parametro temp_tablespaces(lista de diretorios)
preferir coloca-los em --->> discos rpidos e sistemas de arquivos em memria

- Estatisticas

Arquivo PGDATA/global/pgstat.stat(-<8.3)
Arquivo PGDATA/pg_stat_tmp/pgstat.stat(>-8.4)

- Roles

Usurio, grupo e role


Roles une o conceito de grupo e usurio
Roles podem ser donos de objetos (usurio)
Voce pode atribuir uma role a outra (grupo)
No confunda usurio do sistema operacional com role do SGDB
- GRANT ---> permisses
- ROLE --->

---------------------------------------------------- Particionamento --------------------------------------------------

- Objetivos

- Melhorar perfamance das consultas;


- Facilitar gerenciamento de cargas e excluses;
- Separar dados que so raramente utilizados;
EX: dividir uma tabela muito grande em varias partes e so consultar o necessrio

- Implementao

- Utiliza o conceito de herana;


- Cada partio uma tabela filho;
- Tabela pai s existe para representar o conjunto de dados;
- Tabela pai fica normalmente vazia;
- No herda chaves primrias;

- Tipos de particionamento

- Por intervalo
Valor > 9 AND < 90
date >= '2008-06-06' and date <= '2008-10-08'

- Passo a passo

- Criar tabela pai contendo a etrutura da tabela selecionada;


- Criar tabelas filho que herdam da tabela pai normalmente sem colunas adicionais;
- Adicionar restries as tabelas filho;
- Restries no podem se sobrepor;
- Devem cobrir todos valores possiveis;
- Criar indices nas colunas chave em cada partio;
- No pr-requisito;
- Criar gatilhos ou regras para redicionar os dados para partio desejada
- COPY ignora regras;
- Habilitar parmetro contraint_exclusion no postgresql.conf
- partition: examina restries somente em
- Tabelas filho
- subsconsultas UNION ALL
- on: examina restries para todas as tabelas
- Criar um banco de dados com os dados

- Sintonia

- Adequar configuraes de um SGDB visando maximizar uso de recursos;


- PostgreSQL possui cerca de 200 parametros (nem todos afetam performance);
- Ajuste tambm;

- Arquitetura das aplicaes


- Tamanho da base de dados;
- Complexidade das transaes;
- Volume de transaes;
- Arquiteturas

- OLTP --> OnLine transaction processing TPC-C TPC-E


- OLAP --> OnLine analytical processing - TCP-H
- Web --> TPC-App
- Mista-->

- Ferramentas - Para testar desempenho do banco

- pgbench (tpc-b)
- dbt-2(tpc-c)
- dbt-3(tpc-h)
- dbt-4(tpc-app)
- dbt-5(tpc-e**)
- BenchmarkSQL(tpc-c)
- JMeter com JDBC

- Arquivo de configurao

- maiusculo ou minusculo
- tipo de dados: inteiro, ponto flutuante, string ou booleano e enu
- alguns parametros pode ter unidades
- memoria: KB, MB, GB
- tempo: ms, s, min, h e d
- uma parametro por linha
- caracter # significa linha comentada
- caracter = entre nome e valor opcional
- linha em branco ignorada
- sinal SIGHUP (reload) utilizado para ler parametros novamente
- alguns parametros podem ser alterados somente naquela sesso
- variavel de ambiente PGOPTIONS pode conter parametros especificos (libpq)
- ALTER [USER-DATABASE] SET pode conter parametros especificos

- Parametros

- select name, setting, context from pg_settings limit 3; ---> comando para verificar a
operao necessria para aplicar aps configurao;
- select distinct context from pg_settings;
- set work_men to "33MB" ---> aplica a c onfigurao na sesso e pode ser usada numa
QUERY;
- SELECT name,setting,context from pg_settings where name ~ 'work_m' ----> verifica
valor atribuido a uma configurao, exemplo - work_mem

- Autenticao e conexes:, para gerenciar as conexes no Postgres utlizar o PGPOOL, o


correto fechar a conexo com o postgres quando a aplicao no estiver utilizando;

- listen.addresses: aceitar conexoes de onde;


- port: porta de conexo postgres;
- max_connections: mximo de conexes simultaneas;
- superuser_reserved_connections: numero de conexoes reservadas a super-
usuarios
- ssl: permitir conexes SSL
- shared_buffers - cache do postgres ---> deve ser menor que a cache do servidor
- Verificar se o valor esta muito alto atraves deste comando
create extension pg_buffercache; ---> criar extenso para consulta
SELECT * from pg_buffer_cache ---> executa consulta
- memoria utilizada para operaes ativas
- no o total de memoria RAM utilizada pelo PostgreSQL
- valores altos no aumentam a performance
- no windows no funciona
- temp_buffers: utilizado para o acesso a tabelas temporarias;
- work_mem: memoria utilizada para ordenaes e agregaes
- maintenance_work_mem: memria utilizada para operaes de manuteno
(VACUUM, CREATE INDEX, ALTER TABLE, ADD FOREIGN, etc); 50% a 75 % da maior
tabela ou indice e um bom numero;
-max_prepared_transactions: numero maximo de transaes preparadas (2PC),
utiliza um pouco de memria compartilhada
- vacuum_cost_delay: um coletor de lixo, e o tempo que ira adormecer se o limite
de custo for atingido
- vaccuum_cost_limit: custo que ira adormecer se o limite de custo for atingido
- bgwriter_delay: intervalo entre excues do background writer;
- bgwriter_iru_maxpages: no mais do que X paginas sero escritas pelo background
writer por ciclo;
- bgbgwriter_iru_multiplier: fator escalonador para estimar nmero de buffers
necesrios no prximo ciclo
Valores baixos bgwriter_iru_* reduzem a I/O extra causada pelo bgwriter mas far com que
processos servidor escrevam por eles mesmo atrasando consultas;
- select * from pg_stat_bgwriter;
- Write ahead log
fsync = on ----> garante com que os dados esto no LOG DE TRANSAO e
faz com que o restore seja mais rpido se estiver = OFF
synchronous_commit = 0 ---->
- wal_level: determina quanta informao escrita no wal;
- fsync: garante que o SO escreveu o WAL no disco;
- synchronous_commit: espera o WAL ser escrito no disco
- wal_sync_method: open_datasync, fdatasync, fsync_writethrough, fsync e
open_sync;
- full_page_writes: escreve pgina completa na primeira modificao da mesma aps
um checkpoint;
- wal_buffers: tamanho necessario para armazenar o wal que ainda nao foi escrito no
disco;
- wal_writer_delay: intervalo entre execucoes do wal writer
- commit_delay: tempo entre escrever um registro nos buffers do wal e escreve
- commit_sibilings: nmero minimo de transaes abertas antes de esperar
commit_delay;

Checkpoint:

o ponto no tempo que o PostgreSQL ir descarregar os dados da cache


(shared_buffers) ainda no escritos no disco.

- Quanto maior a cache, maiores devem ser os valores de:

- checkpoint_segments: numero maximo de segmentos de arquivo de log entre


pontos de controle automaticos
- checkpoint_timeout: intervalo maximo entre pontos de controle automaticos
- checkpoint_completion_target: frao do intervalo de ponto de controle
- checkpoint_warning: escreve mensagem no log caso o ponto de controle
ocorra antes disso

PGBENCH

- Comando para simular testes de banco


pgbench -c 5 -T 180 bench
- Comando para fazer inseres no banco
top -c -u curso
shared_buffers=512MB
work_mem=128MB
maintenance_work_mem=512MB
checkpoint_segments=64
checkpoint_timeout=15min
autovacuum=off
synchronous_commit=off

- Autovacuum: habilitar a execuo do processo de limpeza automatica;


- log_autovacuum_min_duration: registra execuo de limpeza automatica se ela
exceder esse tmepo;
- autovacuum_max_workers: o numero maximo de workres simultaneos;
- autovacuum_naptime: intervalo minimo entre excues do autovacuum;
- autovacuum_*_threshold: numerominimo de tuplas modificadas para disparar um
ANALYZE e/ ou VACUUM;
- autovacumm_*_scale_factor: frao minima do tamanho da tabela para disparar um
ANALYZE e/ ou VACUUM;

recomendado fazer um vacuum pelo menos 1 vez por semana.


- Explain: Mostra o plano de execuo que o planejador do PostgreSQL elegeu para
uma determinda consulta
- Como a tabela percorrida
- algoritmos de juno utilizados
- operaes executadas (ordenao, filtro, ...)
- estimativas de registros e tempo

www.timbira.com/furg