com
4Linux
também é
consultoria, suporte
e desenvolvimento.
Você já deve nos conhecer pelos melhores cursos de linux do Brasil mas a
4Linux também é consultoria, suporte e desenvolvimento e executou alguns
dos mais famosos projetos do Brasil utilizando tecnologias “open software”.
Você sabia que quando um cidadão faz uma aposta nas loterias, saca dinheiro em
um ATM (caixa eletrônico), recebe um SMS com o saldo de seu FGTS ou simula o valor
de um financiamento imobiliário no “feirão” da casa própria, ele está usando uma
infraestrutura baseada em softwares livres com consultoria e suporte da 4Linux?
Serviços
Consultoria: Suporte Linux e Open Source: Desenvolvimento de Software:
Definição de Arquitetura, tunning em Contratos com regimes de atendi- Customização visual e funcional de
banco de dados , práticas DEVOPS, mento – preventivo e/ou corretivo - softwares Open Source, consultoria para
metodologias de ensino on-line, em horário comercial (8x5) ou de a construção de ambiente ágeis de
soluções open source ( e-mail, monito- permanente sobre-aviso (24x7) para Integração Contínua (Java e PHP) e
ramento, servidor JEE), alocação de ambientes de missão crítica. Suporte mentoria para uso de bibliotecas, plata-
especialistas em momentos de crise e emergencial para ambientes construí- formas e ambientes Open Source.
auditoria de segurança. dos por terceiros. Parceiro Oficial Zend.
Parceiros Estratégicos
Saiba mais
www.4linux.com.br/suporte
contato@4linux.com.br
Amorim Weverton Rufino De / weverton.geek@gmail.com
Características e Instalação
do PostgreSQL
Curso 801
Administração
PostgreSQL com
Alta Performance e
Alta Disponibilidade
Versão 4.1
Amorim Weverton Rufino De / weverton.geek@gmail.com
Características
Características e Instalaçãodo
e Instalação doPostgreSQL
MySQL
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Objetivos da Aula
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Origem do PostgreSQL
Microsoft
Berkeley INGRES
CA Ingres Corp.
1970 1984 1987 1995 2016
INGRES hoje
Stonebraker e Wong criaram a RTI-Ingres. Em 1994 o então Ingres se tornou
propriedade da Computer Associates. Em 2004 alguns componentes do Ingres foram
liberados sob três licenças diferentes de código livre.
Em 2005 foi criada a Ingres Corporation. Ela mantém suporte ativo ao código
fonte e usuários até hoje.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Pronúncia e escrita
www.postgresql.org/community
www.postgresql.org.br/comunidade
Finalmente, PostgreSQL
●
1997 PostgreSQL 6.0 com a inclusão do MVCC(Multiversion Concurrencu Control) e
novos datatypes de data, hora e tipos e geométricos.
● 2000 PostgreSQL 7.0 WAL(Write Ahead Log), schemas, indexação por texto.
●
2005 PostgreSQL 8.0 Suporte para Microsoft Windows, tablespaces, PITR.
Características do PostgreSQL
Características atuais
O PostgreSQL é considerado o banco de dados livre mais avançado do mundo
por várias razões. Suporta largamente o padrão ANSI-SQL 2008 e respeita a norma
ACID. É altamente extensível, tem vários tipos de índices para diversas aplicações.
Pode ser instalado na maioria dos sistemas operacionais tipo Unix como Linux,
Solaris, AIX, HP-UX, família BSD, Mac OS X, True 64, etc. Atualmente conta também
com porte nativo para Windows.
Atomicidade Consistência
Isolamento Durabilidade
Versionamento do PostgreSQL
Atualizações minoritárias
Versionamento
Sendo um projeto comunitário, o PostgreSQL provê atualizações através do
site oficial www.postgresql.org. Se o pacote instalado for fornecido diretamente pelo
seu S.O., verifique as opções de atualização disponíveis.
As versões do PostgreSQL são divididas em majoritárias e minoritárias. As
versões majoritárias são identificadas pelos primeiros dois números da versão,
também chamadas de série. As versões minoritárias são identificadas pelo último
número da versão.
Uma versão majoritária é lançada a cada, aproximadamente, um ano, após
extensivos testes Novas versões majoritárias costumam incluir novas
funcionalidades ao PostgreSQL, que são normalmente discutidas nas listas
internacionais de discussão, na página wiki do Roadmap e debatidas e aprovadas
na reunião de desenvolvedores, que ocorre em paralelo ao evento PgCon, no
Canadá, no mês de maio de cada ano.
Um exemplo de versão minoritária disponível atualmente (em maio de 2015)
é a 9.4.1, significando que têm todas as funcionalidades da série 9.4.x, sendo que
existe somente 1 versão de correção foi lançada.
As versões majoritárias atualmente disponíveis para download estão
disponíveis no link: https://www.postgresql.org/ftp/source/
Nota
Atualmente (2016) as versão suportadas são da 9.1 até a 9.6, versão anteriores a
9.1 não são mais suportadas pela comunidade, nestes casos é extremamente
recomendável a atualização para uma das versões mais novas e suportadas.
Amorim Weverton Rufino De / weverton.geek@gmail.com
● Todo sistema operacional possui uma estrutura de diretórios definida por seus
desenvolvedores;
● A versão do PostgreSQL será fixada pelo fornecedor ou comunidade.
Pacotes em www.postgresql.org
● Não estão disponíveis para todos os S.O. ou todas as variantes e versões do S.O.;
●
Exige a presença do compilador C e código fonte das bibliotecas necessárias;
● Permite a maior customização;
# aptget
# dpkg
10
● Não estão disponíveis para todos os S.O. ou todas as variantes e versões do S.O.
●
Para distribuições GNU/Linux estão disponíveis repositórios para apt e yum,
distribuições recentes baseadas em Debian e Red Hat, respectivamente. Os
repositórios são completos e disponibilizam todas as versões suportadas do
PostgreSQL, bem como módulos contrib e outras ferramentas acessórias em
versões atuais como o PgAdmin 3, Slony, etc.
● Existe o one-click installer para Linux disponibilizado pela empresa EnterpriseDB.
+ deb http://apt.postgresql.org/pub/repos/apt/ jessiepgdg main
2# wget https://www.postgresql.org/media/keys/ACCC4CF8.asc
3# aptkey add ACCC4CF8.asc
11
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
2 # ls l /usr/lib/postgresql/9.6/bin
12
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
2# systemctl status postgresql
4$ /usr/lib/postgresql/9.6/bin/pg_ctl stop # Como “postgres”
6$ /usr/lib/postgresql/9.6/bin/pg_ctl start # Como “postgres”
13
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
# rpm # yum
14
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
4# whereis pg_dump
5# whereis psql
15
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
1 # /usr/pgsql9.6/bin/postgresql96setup initdb
2 Faça com que o serviço do PostgreSQL inicie no boot do SO:
2# systemctl enable postgresql9.6
3# systemctl start postgresql9.6
16
Vários clusters poderão estar rodando ao mesmo tempo, como várias instâncias,
se estiverem configurados para “escutarem” em portas TCP diferentes, definidos no
arquivo de configuração ou linha de inicialização da instância.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Compilando o PostgreSQL
O procedimento é manual;
Procedimento mais complexo;
É necessário instalar pacotes de compilação;
É necessário ter um entendimento sobre a
arquitetura do PostgreSQL;
17
zlib1gdev
3 Descompacte o pacote do postgres 9.2.1 e faça a compilação:
4# tar vzxf postgresql9.2.1.tar.gz
5# cd postgresql9.2.1
6# ./configure prefix=/var/lib/postgresql/9.2
7# make
8# make install
18
2) Instalar os pacotes para compilação de acordo com o SO, ex: gmake, build-
essential, libreadline6-dev, zlib1g-dev, etc.
Com esse comando é possível ver a lista das flags, dentre as flags de compilação
mais utilizadas estão:
--bindir=DIR
--sysconfdir=DIR
--with-blocksize=BLOCKSIZE
--with-pam
--with-ldap
Amorim Weverton Rufino De / weverton.geek@gmail.com
19
1# su postgres
2$ initdb D /var/lib/postgresql/9.2/main/
3$ pg_ctl D /var/lib/postgresql/9.2/main l logfile start
4 =# select version();
20
O usuário postgres
O usuário postgres do banco de dados não pode ser removido. Com ele, é
possível fazer uma recuperação de outros usuários em caso de emergência. Não
se recomenda que se utilize regularmente o usuário postgres para as tarefas
administrativas do banco de dados, muito menos utilizá-lo para tarefas de usuário
ou aplicações.
COMPILAÇÃO
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
25
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
3 postgres=# select count(*) from pg_database;
26
where setting = 'psql';
3 Selecione os campos table_owner e table_name da tabela pg_tables
onde o schemaname seja igual a ‘pg_catalog’ e o table_name
termine com a letra c:
3postgres=# select tableowner, tablename from pg_tables
where schemaname = 'pg_catalog'
and tablename like '%c';
27
Recapitulando
28
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Características
Estrutura Física eeLógica
Instalação
do do MySQL
PostgreSQL
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Objetivos da Aula
30
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Estrutura do PostgreSQL
Cluster
Tablespace Tablespace
Database Database
31
Cluster: É equivalente a uma instância de banco de dados que é composta pela infra
(processos, diretórios e arquivos) que dá sustentação os dados do PostgreSQL.
Índices: São objetos que faz o mapa das tuplas presentes nas tabelas.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Conceito de Cluster
32
●
O diretório precisa estar vazio;
● Pode ser criado mais de um Cluster por servidor em portas e diretórios diferentes;
Amorim Weverton Rufino De / weverton.geek@gmail.com
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Dados = “/var/lib/postgresql/[versão]/main”;
Configuração = “/etc/postgresql/[versão]/main”;
34
/etc/postgresql/[versão]/main
●Um arquivo de inicialização estará em:
/etc/rc2.d/
/usr/pgsql9.5/bin/postgres
Amorim Weverton Rufino De / weverton.geek@gmail.com
commit;
●pg_multixact - Subdiretório. Contém dados sobre o estado multitransacional.
Usado para shared row locks;
●
pg_stat_tmp - Subdiretório. Arquivos temporários do sub-sistema de
estatísticas;
●pg_subtrans - Subdiretório. Dados de estado de sub-transações;
●pg_twophase - Subdiretório Contém arquivos de estado para prepared transactions;
Conceito de Tablespace
37
Tablespace
3# chmod 700 /tbsdexter
6=# CREATE TABLESPACE tbsdexter LOCATION '/tbsdexter';
3 Liste as tablespaces:
7 =# \db
38
Tablespace e o DBA
39
É importante notar que tablespaces são entidades físicas, portanto não faz
sentido dizer que uma tablespace está dentro de um banco de dados, embora um
banco de dados possa estar "contido" em uma tablespace, outros objetos como
tabelas e índices isolados também podem. Não misturar as entidades físicas com as
lógicas.
postgres
Catálogos do sistema;
Dicionário de dados;
template1
Utilizado como template na criação de um database;
Pode ser customizado para criação dos Dbs;
template0
Backup do template1;
Jamais deve ser alterado;
40
postgres
O banco de dados "postgres" está disponível para ser utilizado como primeira
conexão ao cluster, logo após ser criado. Ele pode ser removido, desde que existam
outros bancos de dados disponíveis para conexão. Não se recomenda utilizar o banco
"postgres" no cotidiano para conter seus objetos de banco de dados, porém, ele pode
permanecer no cluster como um banco de conexão de emergência caso não se
lembre o nome de outros bancos disponíveis.
template1
O banco de dados template1 é o modelo que é utilizado por padrão na criação
de novos bancos de dados. Neste banco de dados, o administrador pode criar novos
objetos e fazer outras modificações, que serão automaticamente copiados para os
novos bancos de dados criados a partir de então.
template0
O banco de dados template0 é um modelo, similar ao template1, porém
recomenda-se jamais mexer nele ou removê-lo. Em caso de necessidade de se criar
um novo banco template1, por exemplo, pode-se utilizar este "modelo mínimo"
template0, e a única forma de criar um banco template0 é recriando o cluster.
Amorim Weverton Rufino De / weverton.geek@gmail.com
4 Liste os diretórios:
5=# \! ls la /var/lib/postgresql/9.6/main/pg_tblspc
41
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Conceito de Schemas
42
Schemas
São úteis para criar uma separação de objetos de aplicações diferentes que
compartilham o mesmo banco de dados, gerenciar grupos e usuários similares de
objetos diferentes e organizar bancos de dados com muitas tabelas.
Afim de permitir que tabelas fora do schema default sejam acessadas sem a
nomenclatura citada acima pode-se alterar o search_path padrão para o schema que
se deseja trabalhar automaticamente.
SET search_path = '[nome do schema]';
CREATE SCHEMA [nome];
Tabelas e índices
Tabelas
Tabelas
● Tabelas é uma estrutura com uma ou mais colunas utilizada para armazenamento
de dados;
● Para cada coluna de uma tabela um tipo de dado a ser inserido deve ser
associado;
● Uma ou mais colunas podem ser referenciadas entre as tabelas;
●
O PostgreSQL é responsável pelo gerenciamento das versões das tuplas
armazenadas nas tabelas.
Índices
● Índices são estruturas associadas a uma ou mais colunas de uma tabela com
● Cabe ao DBA identificar quais colunas precisam ou não de índices e qual tipo de
CREATE INDEX [ nome do indice ] ON [ tabela ] ( [ colunas ] )
● Para recriar índices:
REINDEX [ indice | tabela | database ]
Amorim Weverton Rufino De / weverton.geek@gmail.com
3=# CREATE SCHEMA financeiro;
4=# CREATE TABLE secretaria.turma (id int);
5=# CREATE TABLE financeiro.mensalidade (pagamento boolean);
8=# \dt+ secretaria.*
44
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Syntax:
CREATE INDEX nome_indice
ON tabela (coluna);
2 =# CREATE TABLE financeiro.turma (descricao text);
45
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Recapitulando
48
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Características
Gerenciamento e Instalação do MySQL
do PostgreSQL
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Gerenciamento do PostgreSQL
Objetivos da Aula
50
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
51
Não desejamos parar nossos bancos de dados nunca, mas é claro que várias
situações podem requerer esta tarefa. Um SGBD como o PostgreSQL terá:
Arquivos abertos – centenas ou até milhares de arquivos estão abertos em
disco quando bancos de dados estão transacionando.
Conexões de rede – sockets estão em uso, com clientes locais e/ou remotos
conectados.
Transações estão em andamento – a norma ACID prevê que as coisas
comecem, acontecem e terminem, tudo isso tem um intervalo de tempo.
Semáforos estão alocados – SGBDs multiprocesso utilizam o recurso de
semáforos do sistema operacional para controlar os processos que estão ocupando o
tempo de CPU e a comunicação entre eles.
Memória compartilhada está alocada – o desenho multiprocesso faz com que
uma área de memória esteja alocada para compartilhamento de todos os processos.
Considerando os itens acima, ao parar o cluster todos os recursos devem ser
liberados corretamente, caso contrário, o sistema operacional poderá não funcionar a
contento após uma parada do SGBD por esgotamento de recursos. O cluster pode
até não conseguir mais ser inicializado.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Parada smart
É a forma de parada mais segura, porém nem sempre viável, ao receber uma
solicitação de parada smart, o PostgreSQL aguardará que todas as transações
correntes sejam finalizadas, todas as sessões (conexões) abertas sejam encerradas
e, caso exista, um backup em andamento também será aguardado.
O uso da parada smart em ambientes complexos pode ser difícil ou até
impossível. Servidores de aplicação, pools de conexão, middlewares entre os
usuários e o banco de dados, scripts de automação rodando e até mesmo se algum
usuário deixou o psql ou pgAdmin abertos podem fazer com que o cluster não pare.
Será então necessário que todas as aplicações e clientes sejam parados
primeiro para que, em seguida, possa ser utilizada a parada smart.
Parada fast
Parada immediate
Só deve ser utilizada em último caso. A parada immediate faz tudo o que a parada
fast faz, só que encerra todos os processos abruptamente, sem liberar corretamente os
recursos do sistema operacional. É equivalente a uma falha catastrófica.
Ao ser iniciado novamente, o PostgreSQL fará a releitura dos arquivos WAL
presentes no diretório pg_xlog, para garantir a gravação correta de todas as transações
finalizadas até o momento da parada.
A parada immediate tem utilidade caso o servidor esteja passando por problemas,
por exemplo, processos presos, e a parada fast não estiver funcionando.
Pode ser necessário utilizar comandos do sistema operacional para liberar
recursos não liberados pela parada, especialmente semáforos do Solaris.
Uso do kill
Os sinais de kill devem ser enviados ao processo pai postgres, nunca aos demais.
Caso um sinal de kill inadequado seja enviado a um processo de conexão (backend)
todo o seu cluster poderá falhar catastroficamente por corrupção da memória
compartilhada.
O processo postgres é o orquestrador e pai dos demais processos (que são forks
dele), portanto, ele possui rotinas capazes de interpretar os sinais kill. O pg_ctl faz todo
esse trabalho, por isso, prefira utilizá-lo sempre.
Utilização do pg_ctl
Execute os comandos abaixo no servidor dbmaster:
1 O pg_ctl não está no path, crie um link para que ele fique acessível:
1 # ln s /usr/lib/postgresql/9.6/bin/pg_ctl /bin/
2 Com o usuário postgres faça o stop smart e acompanhe os logs:
2 $ pg_ctl stop D /etc/postgresql/9.6/main m smart
3 Inicie o banco com o pg_ctl, faça o stop fast e veja os logs:
3$ pg_ctl start D /etc/postgresql/9.6/main
4$ pg_ctl stop D /etc/postgresql/9.6/main m fast
5$ pg_ctl start D /etc/postgresql/9.6/main
6$ pg_ctl stop D /etc/postgresql/9.6/main m immediate
7$ pg_ctl start D /etc/postgresql/9.6/main
54
55
Processo de Autenticação:
Os clientes do PostgreSQL fazem uma requisição do processo postmaster que
por sua vez realiza algum dos 3 tipos de autenticação que são:
pg_hba.conf:
O Postmaster ao receber a requisição só encaminhará a requisição ao
PostgreSQL criando um processo em background caso a conexão de origem estejam
de acordo com as configurações que são carregadas do pg_hba.conf, essas
informações são carregadas de 2 formas diferentes:
Parâmetros (postgresql.conf):
port = 5432
Porta do PostgreSQL
hba_file = '/etc/postgresql/9.6/main/pg_hba.conf'
Define o local do arquivo “pg_hba.conf”, esse arquivo contém as
regras para que o client possa realizar uma tentativa de conexão.
listen_addresses = 'localhost'
Parâmetro que contém os IPs que poderão “escutar” a porta do
PostgreSQL.
56
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Arquivo pg_hba.conf
57
58
local
●Conexão por Unix Domain Sockets;
●
Nem todos os clientes aceitarão conectar-se por este método;
●O psql tentará se conecta por socket local se não for especificada a opção -h;
●Se nenhuma linha do pg_hba.conf contiver este valor, a conexão por socket será
totalmente desativada.
host
●TCP/IP remoto ou local;
hostssl
●Similar à opção host, somente SSL.
disponível);
●Deve estar ativa em postgresql.conf;
hostnossl
●Exatamente o oposto de hostssl;
●
Somente conexões não criptografadas serão aceitas.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Campo DATABASE
●Especificar diretamente banco de dados;
●
Separar múltiplos valores por vírgulas;
●"all" representará todos os bancos;
●
"samerole" usuários pertencentes a grupo de mesmo nome do banco.
●"@" seguido do nome do arquivo, arquivo de lista.
Campo USER
●Especificar usuário;
●
Separar múltiplos valores por vírgulas;
●Papel de grupo, precedido por "+", todos os usuários pertencentes ao grupo poderão
Campo CIDR-ADDRESS
Funciona com IPV4 e IPV6;
Depende do sistema operacional para IPV6;
Utilizar um registro IPV4 e outro IPV6 mesmo que haja equivalência.Esta é a única
coluna que pode conter de zero a dois valores separados por espaço, sendo aceitas.
Para linhas do tipo local, este campo não deve ser especificado (nenhum valor na
coluna, coluna ignorada)
Para registros host, hostssl e hostnossl, este campo pode conter:
Endereços tipo CIDR-address (um valor na coluna), por exemplo:
172.20.143.89/32 um único host
172.20.143.0/24 rede pequena
10.6.0.0/16 rede grande
201.0.0.0/8 internet, todos os IPs começando por 201
0.0.0.0/0 toda a internet
Amorim Weverton Rufino De / weverton.geek@gmail.com
Campo METHOD
Quando a tentativa de conexão coincidir com toda a combinação dos campos
anteriores, o PostgreSQL utilizará o método de conexão especificado neste campo.
Se este método aprovar a tentativa (como usuário e senha válidos), o usuário
se conectará ao banco de dados. Caso contrário, a conexão será recusada e, como já
citado acima, não haverá outras tentativas de conexão existentes no arquivo
pg_hba.conf abaixo desta linha.
trust
●Menos seguro;
reject
●
Rejeitar a conexão incondicionalmente;
●Útil para excluir hosts;
md5
●Senha criptografada;
●
Viajará criptografada pela rede;
●Preferido para conexões não SSL;
password
●Requererá uma senha não criptografada;
Ident → peer
●
Usuário do S.O é o mesmo do Postgres;
●TCP/IP, servidor ident, não recomendado;
●
Não pede senha;
●Em Solaris a partir do PostgreSQL 8.4;
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Usuários e Roles
Usuário
Usuário pode ser membro de uma role | grupo;
Deve possuir senha criptografada;
Pode definir tempo de expiração e lock;
Roles
Roles: Superuser, Create role, Create DB, Replication;
Role tem o mesmo conceito que grupo;
Uma role pode ser atribuida a qualquer usuário;
Roles são usadas para agilizar a concessão de privilégios;
62
Criação de usuários
Principais roles
SUPERUSER: Privilégios de DBA assim como o usuário “postgres”.
CREATEDB: Privilégio para criação de Databases.
CREATEROLE: Privilégios para criação e remoção de Roles / Usuários.
LOGIN: Privilégios com permissões de LOGIN no Postgres.
REPLICATION: Privilégios de replicação de dados.
Amorim Weverton Rufino De / weverton.geek@gmail.com
1=# CREATE ROLE dexter WITH PASSWORD '4linux';
2=# CREATE GROUP consulta;
4=# ALTER USER dexter WITH LOGIN;
5=# ALTER USER consulta RENAME TO desenvolvedores;
6=# ALTER USER dexter SET lock_timeout TO 100;
7=# \du
3 Valide o login com o usuário dexter:
8=# SHOW lock_timeout; \q
9$ psql Udexter h127.0.0.1 dbdexter c "SHOW lock_timeout;"
63
Criar um usuário:
CREATE USER nome_usuario [WITH rule_option] WITH PASSWORD;
Auditando usuários
64
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
2 # systemctl restart postgresql
65
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Conceito:
Comandos de
➢ GRANT – Conceder privilégios.
controle e
privilégios a dados. ➢ REVOKE – Revogar privilégios.
Syntax:
GRANT [SELECT|INSERT...] ON schema.tabela TO usuário;
REVOKE [DELETE|UPDATE...] ON schema.tabela FROM usuário;
66
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Algumas permissões
67
GRANT {{SELECT|INSERT|UPDATE|DELETE|TRUNCATE|REFERENCES|TRIGGER}
[,...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( column [, ...] )
[,...] | ALL [ PRIVILEGES ] ( column [, ...] ) }
ON [ TABLE ] table_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT {{CREATE|CONNECT|TEMPORARY|TEMP} [,...] | ALL [ PRIVILEGES ] }
ON DATABASE database_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON { FUNCTION function_name ( [ [ argmode ] [ arg_name ] arg_type
[, ...] ] ) [, ...]
| ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
ON SCHEMA schema_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { CREATE | ALL [ PRIVILEGES ] }
ON TABLESPACE tablespace_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT role_name [, ...] TO role_name [, ...] [ WITH ADMIN OPTION ]
Amorim Weverton Rufino De / weverton.geek@gmail.com
Concedendo privilérios
Execute os comandos abaixo no dbdexter:
1 Faça os procedimentos com o usuário dexter conforme segue:
1# psql Udexter h127.0.0.1 dbdexter
2=> select * from secretaria.alunos;
68
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Recomendações Gerais
69
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Gerenciamento do PostgreSQL
Recapitulando
70
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Objetivos da Aula
Surgimento do SQL
Operações DDL e DML
Funções do PostgreSQL
Carga de Dados
Importação e exportação de CSV
71
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
72
Conceitos:
SQL é uma linguagem de consulta estruturada padrão dos bancos de dados
relacionais, sendo muitas de suas características inspiradas em álgebra relacional.
A IBM criou o SQL e rapidamente foi se expandindo. Em um dado momento,
houve a necessidade de uma padronização, que foi realizada pela ANSI (American
National Standards Institute) e pela ISO.
Conceito:
➢ RENAME
➢ TRUNCATE
73
Alguns sistemas de banco de dados usam o comando ALTER, que permite ao usuário
alterar um objeto, por exemplo, adicionando uma coluna a uma tabela existente.
Outros comandos DDL são:
74
Prática DDL
Execute os comandos abaixo no servidor dbmaster:
76
Criar tabela:
CREATE TABLE nome_tabela (coluna1 [TYPE], coluna2 [TYPE]);
CREATE TEMPORARY TABLE nome_tabela_temp (coluna1 [TYPE]);
Renomear tabela:
Mesmo renomeando a tabela o OID é mantido.
ALTER TABLE nome_atual RENAME TO nome_novo;
Remover tabela:
DROP TABLE nome_tabela;
Criar índice:
CREATE INDEX nome_indice ON tabela (coluna);
Amorim Weverton Rufino De / weverton.geek@gmail.com
Conceito:
Comandos de consultas e manipulação de dados
do banco de dados, inserções, atualizações,
remoção de registros mantendo a estrutura de
dados inalterada.
Prática DML
Execute os comandos abaixo no dbdexter:
78
Atualizar registro(s):
UPDATE tabela SET coluna = [valor]
[WHERE campo = condição];
Remover registro(s):
DELETE FROM tabela
[WHERE campo = condição];
79
Funções no PostgreSQL:
80
3=# CREATE TABLE carga_insert (id int, valor text);
4=# CREATE TABLE carga_bloco (id int, valor text);
5=# CREATE TABLE carga_copy (id int, valor text);
6=# CREATE TABLE carga_csv (id int, valor text);
6$ time psql bi < /opt/insert_comum_10k.sql
7$ time psql bi < /opt/insert_blocos_10k.sql
8$ time psql bi < /opt/insert_copy_10k.sql
81
Amorim Weverton Rufino De / weverton.geek@gmail.com
insert_csv_10k.csv
4 Também é possível exportar para HTML:
2$ time psql d bi A H c "select * from carga_insert;" >
exemplo.html
FROM '/var/lib/postgresql/insert_csv_10k.csv' WITH
DELIMITER AS ';';"
82
Amorim Weverton Rufino De / weverton.geek@gmail.com
Recapitulando
Surgimento do SQL
Operações DDL e DML
Funções do PostgreSQL
Carga de Dados
Importação e exportação de CSV
83
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
CaracterísticasInterno
Funcionamento e Instalação do MySQL
e Parametrização
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Objetivos da Aula
Conhecer a arquitetura por trás de um DML;
Conceitos de Memória Compartilhada;
Aprender sobre a integridade do PostgreSQL;
Parametrização dos WAL files;
Função do Checkpoint;
Alterar parâmetros com ALTER SYSTEM;
85
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Processos do PostgreSQL
86
Processos do PostgreSQL:
Statistics collector: Coleta estatísticas sobre o uso dos objetos dos bancos de
dados; apenas um processo com este nome deve existir por cluster.
Logger: Coleta todas mensagens da saída de erro e escreve em arquivos de log;
também gerencia a rotação desses arquivos de acordo com tempo e/ou tamanho;
apenas um processo com este nome deve existir por cluster, podendo não existir
dependendo da configuração.
Archiver: Arquiva os log de transação (WAL) em um local especificado, normalmente
para fins de backup contínuo; apenas um processo com este nome deve existir por
cluster, podendo não existir dependendo da configuração.
Autovacuum launcher: Dispara execuções de processos ``autovacuum worker''
quando apropriado; apenas um processo com este nome deve existir por cluster,
podendo não existir dependendo da configuração.
Autovacuum worker: Processos que fazem as rotinas de manutenção ANALYZE e
VACUUM automaticamente. Eles se conectam ao banco de dados e tabela
determinados pelo processo ``autovacuum launcher'', e fazem esses trabalhos;
nenhum ou vários processos com este nome podem existir por cluster dependendo do
momento.
Amorim Weverton Rufino De / weverton.geek@gmail.com
88
●
A estrutura do servidor PostgreSQL é modular. Na figura são apresentados os
principais módulos e o caminho que os comandos SQL percorrem ao serem
executados. Os comandos DML - Data Manipulation Language, tais como SELECT e
UPDATE, utilizam pelo menos os módulos analisador (parser), reescritor (rewriter),
otimizador (optimizer) e executor.
●Outros comandos são tratados de maneira diferente porque não precisam dos
Parser: Faz a análise léxica e sintática de consultas SQL. A análise léxica produz uma
sequência de tokens (palavras chave) que serão utilizados durante a análise sintática
para produzir uma árvore (query tree) a partir de um conjunto de regras predefinidas.
Os tokens e sintaxe de um comando devem obedecer à especificação da linguagem
SQL;
Optimizer: Com a árvore validada pelo rewriter, tenta produzir um plano ótimo. O
optimizer traça os possíveis caminhos para execução de uma consulta e escolhe
aquele que tem o menor custo dos planos avaliados. Em consultas com muitas
junções, o planejador poderia gastar muitos recursos para determinar um plano ótimo
e utiliza um algoritmo mais rápido que não analisa todas as possibilidades, mas
oferece um plano bom
Amorim Weverton Rufino De / weverton.geek@gmail.com
Utilities: Contém rotinas de suporte tais como tipos de dados embutidos, funções
embutidas, rotinas de erro, rotinas de cache, rotinas de ordenação, gerenciador de
memória, gerenciador de funções e rotinas de suporte a codificação multibyte;
90
Este cria um fork de si mesmo para atender esta conexão, esse fork age como
um processo de backend que trata a conexão, as transações e realiza o parsing das
operações.
91
Somente após sua confirmação, o backend tenta usar o cache para gravar
essa modificação. Se o backend não conseguir gravar no cache caso ele esteja cheio,
o próprio backend gravará as informação no diretório do cluster.
Amorim Weverton Rufino De / weverton.geek@gmail.com
92
93
wal_buffers;
Shared Buffers
Shared Buffers
Os shared buffers, conforme citado anteriormente, são uma região de memória
compartilhada utilizada como buffer/cache de escrita e leitura comum a todos os
backends. Esta região tem seu tamanho limitado ao definido na opção
shared_buffers.
Ao iniciar o PostgreSQL, este segmento de memória sera totalmente alocado.
O sistema operacional deve estar configurado para aceitar a quantidade de memória
compartilhada especificada aqui.
O valor padrão típico é 128MB, mas este valor pode ser menor devido a
algumas configuração do ser sistema operacional. Esse valor também pode ser
definido em unidades de memória (kB, MB ou GB). Para bom desempenho em
produção, este valor deve ser aumentado, pois o valor padrão vem definido somente
para permitir a inicialização do banco. Este assunto será abordado em capítulo futuro.
De maneira geral recomenda-se que o tamanho dos shared buffers não
ultrapassem 40% do tamanho da memoria RAM, e também não ultrapassem a faixa
dos 4GB a 8GB. Existem limitações em ambiente Windows que tornam o uso de
grandes quantidades de shared buffer inviável. Em testes realizados, valores maiores
que 256MB causaram degradação do desempenho.
Amorim Weverton Rufino De / weverton.geek@gmail.com
grep shared_buffers
3 Reinicie o postgresql e valide conforme segue:
4=# SHOW shared_buffers;
95
Parâmetros de configuração:
ALTER SYSTEM
A versão 9.4 do PostgreSQL adicionou uma nova cláusula SQL chamada ALTER
SYSTEM. Com este comando, você pode editar diretamente as configurações do
arquivo posqtgresql.conf. Se faz necessário em alguns parâmetros a reinicialização
do Postgresql, ou reload dependendo do contexto.
Exibir um parâmetro:
SHOW parametro;
Amorim Weverton Rufino De / weverton.geek@gmail.com
Parâmetros (postgresql.conf):
bgwriter_delay = 200ms
Intervalo de execuções do BGWriter em milisegundos.
bgwriter_lru_maxpages = 200
Quantidade máxima de páginas por rodada do BGWriter.
bgwriter_lru_multiplier = 2.0
Fator de multiplicação onde (qtd paginas anterior * lru_multiplier);
96
1# vim /etc/postgresql/9.6/main/postgresql.conf
+ bgwriter_delay = 100ms
+ bgwriter_lru_maxpages = 300
+ bgwriter_lru_multiplier = 3.0
97
Utilizar shared buffers muito grandes podem denegrir o desempenho do banco, pois o
bgwriter terá de varrer uma quantidade de blocos muito grande, o que vai levar a um
tempo mais longo de execução e assim desperdiçar recursos sem necessidade.
WAL e Checkpointer
Parâmetros (postgresql.conf):
checkpoint_timeout = 5min
Limite de tempo para execução do Checkpoint;
max_wal_size = 1GB
Limite de tamanho da área de WAL para execução do Checkpoint;
min_wal_size = 80MB
Tamanho mínimo da área de WAL para execução do Checkpoint;
checkpoint_completion_target = 0.5
Fator de escala de tempo de execução de checkpoint;
checkpoint_warning = 30s
Intervalo mínimo entre checkpoints caso ultrapasse um log é gerado.
98
Dica: será exibido log caso ocorram mais de uma vez no período definido na opção:
checkpoint_warning;
LOG: checkpoints are occurring too frequently (x seconds apart)
O ideal é que os checkpoints ocorram preferencialmente por esgotamento do
tempo, pois caso ocorram por falta de segmentos com muita frequência podem
prejudicar o desempenho, devido a carga de I/O gerada na gravação dos “shared
buffers” em disco.
Uma dica será exibida no log do PostgreSQL caso os checkpoints ocorram em
períodos inferiores à opção “checkpoint_warning”
Aumentar o número de segmentos pode ajudar no desempenho do banco,
porém, deve-se tomar o cuidado de não aumentar demais, pois quando ocorrer um
crash o tempo de recuperação sera muito grande devido a necessidade de aplicar
todos estes segmentos.
Verifique seu tempo de SLA e faça testes para saber a quantidade de
segmentos aceitável no seu ambiente.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Alterando o Checkpoint
5=# SELECT pg_reload_conf();
6=# SHOW checkpoint_timeout;
99
●checkpoint_completion_target = 0.5;
Após as alterações:
●checkpoint_completion_target = 0.5;
WAL - fsync
Fsync
Garante a escrita em disco (não fica no chache do SO);
Por default é habilitado para garantir a escrita em disco;
Desabilitar ou alterar o “wal_sync_method” não é recomendado.
Parâmetros (postgresql.conf):
fsync = on
Habilita ou desabilita o fsync;
wal_sync_method = fsync
Métodos de sincronia da escrita dos arquivos de WAL;
full_page_writes = on
Cada escrita ocupa uma página inteira, desabilitar esse parâmetro
pode comprometer a integridade dos dados na recuperação.
100
-fsync é uma chamada de sistema operacional utilizada para garantir que dados
estejam gravados fisicamente em disco, eliminando a possibilidade dos dados ficarem
apenas em cache para posterior gravação.
Esta chamada só retorna sucesso após ter escrito todos dados fisicamente em
disco. Desta informação conclui-se que é muito importante que os discos do banco de
dados tenham alto desempenho, para que a chamada retorne o mais rápido possível,
aumentando a capacidade transacional do banco de dados.
Amorim Weverton Rufino De / weverton.geek@gmail.com
kernel;
É importante escolher o método mais adequado para o seu S.O. para o melhor
desempenho e segurança dos dados em disco.
Em caso de uma queda durante uma gravação de pagina modificada é possível que
após a recuperação do arquivo existam uma mistura de dados antigos e novos. Para
evitar que isto aconteça, o PostgreSQL, por padrão, efetua gravação de paginas
completas por vez, independente da quantidade de dados a serem gravados.
Armazenar toda página garante que ela poderá ser recuperada corretamente
mas o preço para isso é o aumento da quantidade de dados escritos pelo log de
transação. Este comportamento pode ser desativado através da opção
full_page_writes', porém apesar de melhor desempenho, os riscos são similares ao de
desativar o fsync', e por isso não é recomendada sua desativação.
Síncrono
Depois da escrita em WAL a transação é confirmada;
Assíncrono
Depois da escrita em WAL a transação é confirmada;
Aglomera commits em frações de microsegundos;
Parâmetros (postgresql.conf):
synchronous_commit = on
Level de sincronia entre o commit e a escrita em WAL.
commit_delay = 0
Delay entre os commits em microsegundos.
commit_siblings = 5
Métodos de sincronia da escrita dos arquivos de WAL;
102
Commit Assincrono:
●
Aglomerar transações concorrentes em único “fsync”;
●Commit atrasado;
●
O número mínimo de transações simultâneas para aguardar é definido em
“commit_siblings”;
●Pode reduzir carga de IO em servidores muito concorridos. No entanto, em
servidores de baixa concorrência, pode diminuir o desempenho;
●Sem risco;
Exemplo:
Recapitulando
Conhecer a arquitetura por trás de um DML;
Conceitos de Memória Compartilhada;
Aprender sobre a integridade do PostgreSQL;
Parametrização dos WAL files;
Função do Checkpoint;
Alterar parâmetros com ALTER SYSTEM;
104
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Características e Instalação do
Transações, Estatísticas MySQL
e Locks
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Objetivos da Aula
Lógica de uma transação;
Níveis de isolamento de transação;
Locks e DeadLocks;
Conceitos MVCC;
Vacuum e Analyze;
Autovacum;
106
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
ROLLBACK ID
ID da
Desfazer transação
Comandos
107
BEGIN:
Sinaliza o início de uma transação.
DML / DDL:
Manipulação e consulta de dados dentro da transação.
COMMIT:
Grava efetivamente todas as alterações realizadas e finaliza a transação.
ROLLBACK:
Desfaz as alterações sem alterar os dados.
ID:
Identificador único da transação.
Amorim Weverton Rufino De / weverton.geek@gmail.com
3=# BEGIN;
4=# SELECT txid_current();
5=# CREATE TABLE teste (id int);
6=# INSERT INTO teste VALUES (10);
7=# SELECT * FROM teste;
8=# SELECT txid_current();
9=# ROLLBACK;
10=# SELECT txid_current();
11=# SELECT * FROM teste;
108
A transação que alterou o dado já terá a nova versão, assim como novas
transações que venham após o término daquela que fez a alteração, respeitando
totalmente a norma ACID.
109
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
110
Locks e Deadlocks
Locks
Forçando um LOCK
1S1=# BEGIN;
2S1=# UPDATE secretaria.alunos SET senha = '100'
WHERE id = 1;
3S2=# BEGIN;
WHERE id = 1;
5S1=# COMMIT;
6S1=# SELECT * FROM secretaria.alunos;
7S2=# COMMIT;
8S2=# SELECT * secretaria.alunos;
112
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Forçando um DEADLOCK
1S1=# BEGIN;
2S1=# UPDATE secretaria.alunos SET senha = '300'
WHERE id = 1;
3S2=# BEGIN;
4S2=# UPDATE secretaria.alunos SET senha = '400'
WHERE id = 2;
5S1=# UPDATE secretaria.alunos SET senha = '500'
WHERE id = 2;
8S2=# UPDATE secretaria.alunos SET senha = '600'
WHERE id = 1;
9S1=# SELECT * FROM secretaria.alunos;
113
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
114
Mas como fazer com que uma transação que alterou um dado não propague
esta alteração para uma transação concorrente?
A transação que alterou o dado já terá a nova versão, assim como novas
transações que venham após o término daquela que fez a alteração, respeitando
totalmente a norma ACID.
2S2=# SELECT txid_current();
3S2=# SELECT xmin, xmax, empresa FROM financeiro.contratos;
4S1=# BEGIN;
5S1=# SELECT txid_current();
6S1=# DELETE FROM financeiro.contratos WHERE empresa = 'Zica';
7S2=# SELECT xmin, xmax, empresa FROM financeiro.contratos;
8S1=# ROLLBACK;
9S2=# SELECT xmin, xmax, empresa FROM financeiro.contratos;
10S2=# COMMIT;
11S2=# UPDATE financeiro.contratos
SET empresa = 'Zoca' WHERE id = 4;
12S2=# SELECT xmin, xmax, empresa FROM financeiro.contratos;
13S2=# \q
116
Vacuum e Analyze
Tuplas Mortas
Update, Delete
Insert (quando ocorre rollback);
Vacuum
●UPDATE
●DELETE
●INSERT (somente quando ocorre rollback)
Vale ressaltar que o vacuum não elimina as tuplas mortas, ele apenas as
marca para serem reutilizadas por novos dados modificados na tabela.
Amorim Weverton Rufino De / weverton.geek@gmail.com
118
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Autovacuum
119
Parametrização do Autovacuum
autovacuum = on
Habilitar ou não.
log_autovacuum_min_duration = 1
Duração mímina para gerar LOG.
autovacuum_max_workers = 3
Quantidade de processos que podem rodar em paralelo.
autovacuum_vacuum_threshold = 50
Numero de tuplas alteradas antes do VACUUM.
autovacuum_analyze_threshold = 50
Numero de tuplas alteradas antes do ANALYZE.
autovacuum_vacuum_scale_factor = 0.2
Fator de escala em % da tabela antes do VACUUM.
autovacuum_analyze_scale_factor = 0.1
Fator de escala em % da tabela antes do ANALYZE.
autovacuum_vacuum_cost_delay = 20ms
Tempo de espera antes de medir o custo do autovacuum.
autovacuum_vacuum_cost_limit = 1
Tempo limite para execução do autovacuum antes do delay.
120
atingido o limite de custo do VACUUM. Um valor -1 fará com que seja obedecido o
parâmetro vacuum_cost_delay.(Valor padrão: 20ms);
●autovacuum_vacuum_cost_limit: Especifica o custo limite que pode ser atingido
2=# CREATE TABLE teste (id int);
3=# INSERT INTO teste (id)
SELECT id FROM GENERATE_SERIES(1,100000) id;
4=# ANALYZE teste;
5=# SELECT * FROM pg_stat_all_tables WHERE relname = 'teste';
6=# UPDATE teste SET id = 0 WHERE id <= 10000;
7=# SELECT * FROM pg_stat_all_tables WHERE relname = 'teste';
8=# UPDATE teste SET id = 0 WHERE id = 11000;
9=# SELECT * FROM pg_stat_all_tables WHERE relname = 'teste';
10=# DELETE FROM teste WHERE id > 20000;
11=# SELECT * FROM pg_stat_all_tables
WHERE relname = 'teste';
121
Vacuum Freeze
autovacuum_multixact_freeze_max_age = 400000000
XID limite para execução de um vacuum na tabela;
122
Vacuum Full
123
● Para realizar esta operação é necessário ter espaço livre em disco equivalente ao
dobro do tamanho atual da tabela, pois a tabela é duplicada durante a operação
(versão 9.1 ou superior).
●É um processo lento (foi aprimorado na versão 9.1)
●
Não pode ser executado sobre tabelas em produção.
124
Processos do servidor:
Postmaster = Primeiro processo
Background = As conexões
BRWriter = Escrita nos Datafiles
Checkpointer = Escrita nos Datafiles
WAL Writer = Escrita nos WAL files
Archiver = Escrita dos Archives
Logger = Escrita dos LOGs
Statistics Collector = Coletor de estatísticas
Autovacuum Launcher = Processo que dispara os Vacuums
Autovacuum Worker = Processo do Vacuum.
Recapitulando
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Características
Backup ee Instalação do MySQL
Restauração
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Backup e Restauração
Objetivos da Aula
127
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Tipos de Backup
COLD-Backup
Backup Pontual
pg_dump
130
Restore do DUMP
131
132
Um usuário com direitos para tal deve criar o banco de dados conforme já
vimos em capítulo anterior. Se o banco de dados já existir, recomenda-se limpá-lo
primeiro, exceto se o dump foi criado com a opção de destruir objetos já existentes.
WAL e Archive
WAL
Arquivo de registro das transações;
Archive
Backup do WAL;
Parâmetros (postgresql.conf):
wal_level = replica
Nível de detalhe da geração dos arquivos de WAL
archive_mode = on
Habilitar ou não o Archive.
archive_command = 'comando'
Comando para fazer o backup dos WAL files;
archive_timeout = 60
Limite de tempo para geração de archive;
134
3# chown R postgres. /pg_backup
4# chmod R 700 /pg_backup
3 Reinicie o PostgreSQL.
135
1 $ psql c "SELECT pg_start_backup('backup1');"
2 Faça uma cópia dos dados e da tablespace:
2$ cp av /var/lib/postgresql/9.6/main/* /pg_backup/base/
3$ mkdir /pg_backup/base/tablespace
4$ cp av /tbsdexter /pg_backup/base/tablespace
136
3# cp av /pg_backup/base/* /var/lib/postgresql/9.6/restore
4# cp av /pg_backup/arquivamento/* /pg_backup/bkp_archive/
5# cp av /etc/postgresql/9.6/main/*
/var/lib/postgresql/9.6/restore
3 Sinalize o local da tablespace dexter no arquivo tablespace_map:
6# vim /var/lib/postgresql/9.6/restore/tablespace_map
+ <Tablespace OID>
/var/lib/postgresql/9.6/restore/tablespace/tbsdexter
137
● Pare o PostgreSQL.
● Limpe mova seu diretório do cluster.
●
Copie todo o seu backup inicial para seu cluster original, lembre-se de tablespaces.
●Crie um arquivo recovery.conf dentro do diretório do cluster. O conteúdo do arquivo
1$ vim /var/lib/postgresql/9.6/restore/postgresql.conf
+data_directory = '/var/lib/postgresql/9.6/restore'
+hba_file = '/var/lib/postgresql/9.6/restore/pg_hba.conf'
+ident_file = '/var/lib/postgresql/9.6/restore/pg_ident.conf'
+external_pid_file = '/var/run/postgresql/9.6main5433.pid'
+port = 5433
138
6) Iniciar o PostgreSQL
# service postgresql start
Amorim Weverton Rufino De / weverton.geek@gmail.com
3# su postgres
4$ /usr/lib/postgresql/9.6/bin/pg_ctl D
/var/lib/postgresql/9.6/restore/ start
8 Faça as validações
5$ ps ef | grep postgres
6$ psql p5433
139
O arquivo recovery.conf
O arquivo recovery.conf contém as informações necessárias para o restore, a
informação mínima para ser contida nesse arquivo é o parâmetro “restore_command”,
esse parâmetro recebe os dados de onde o PostgreSQL vai ler os arquivos de archive
durante a recuperação, porém outros parâmetros podem ser acrescentados.
A sequência de comandos fará com que seu cluster seja recuperado por
completo até o último arquivo WAL existente no seu backup. Caso deseje voltar para
um momento específico no tempo, tenha em mente que não é possível voltar para um
momento antes do backup inicial. Para recuperações em momento no tempo, insira a
seguinte linha em recovery.conf:
recovery_target_time = ‘’ (timestamp)
Onde timestamp é o momento onde se deseja o estado do cluster. Ele é no
formato do PostgreSQL como 'YYYY-MM-DD HH:MM:SS'.
recovery_target_xid = ‘’
Especificar até que XID a recuperação deve ser feita.
recovery_target_inclusive = 'true'
True = Recuperação logo após o recovery_target_time ou xid.
False = Recuperação até uma transação antes do recovery_target_time ou xid.
recovery_target_timeline = 'latest'
Para recuperação dentro de uma timeline utilizando o pg_control como
referência.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Backup e Restauração
Recapitulando:
140
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Características
BARMAN (Backupeand
Instalação do MySQL
Recovery Manager)
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Objetivos da Aula
Instalando o BARMAN
Arquivo de parâmetros;
Troca de chaves;
Validação e backup;
Restaurando backup;
Backup via streaming;
142
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
●
Backup físico completo a quente de um servidor PostgreSQL.
●Gerenciamento de vários servidores PostgreSQL.
●
Compressão de arquivos WAL (bzip2, gzip ou personalizado).
●Integração com ferramentas de arquivamento padrão (por exemplo, tar).
●
Arquivo de configuração INI simples.
●Point-In-Time-Recovery (PITR).
●
Remanejamento de PGDATA e espaços de tabela no momento da recuperação.
●Geral e do disco informações sobre o uso de backups.
●
Suporte a rsync sobre ssh para sincronização de arquivos e transferências.
Amorim Weverton Rufino De / weverton.geek@gmail.com
1# vim /etc/apt/sources.list
deb http://apt.postgresql.org/pub/repos/apt/ jessiepgdg
main
2# wget https://www.postgresql.org/media/keys/ACCC4CF8.asc
3# aptkey add ACCC4CF8.asc
4# aptget update
144
Roteiro de instalação:
pacotes);
●
Atualize a lista de pacotes e instale o pacote barman.
Amorim Weverton Rufino De / weverton.geek@gmail.com
1# vim /etc/barman.conf
barman_home = /var/lib/barman/backups
minimum_redundancy = 0
[dbmaster]
description = "Servidor PostgreSQL DB Master"
ssh_command = ssh postgres@dbmaster.dexter.com.br
conninfo = host=dbmaster.dexter.com.br user=barman
password=4linux dbname=postgres
archiver = on
retention_policy = RECOVERY WINDOW OF 2 DAYS
145
Configuração do Barman
●
Sessão [main]: Contem configurações relacionadas ao servidor Postgres que o
barman vai gerenciar os backups:
●description: Define a descrição do servidor Postgres.
banco).
●compression: Opções de compressão.
Para cada servidor Postgres é necessário criar uma sessão com um nome que
identifique seu cluster.
Amorim Weverton Rufino De / weverton.geek@gmail.com
1# mkdir p /var/lib/barman/backups/dbmaster/incoming
3# mkdir p /var/lib/barman/backups/audit/incoming
4# chmod 750 /var/lib/barman R
5# chown barman:barman /var/lib/barman R
146
● Vamos utilizar o LVM e RAID que a máquina File Server possui, com uma área de
armazenamento de 40GB para receber os dados das máquinas DB Master e Audit;
●
A máquina possui um volume lógico de 40GB grupo storage com sistema EXT4;
●É preciso fazer a montagem da nova partição na home do usuário barman.;
●
Em nosso exemplo a partição possui apenas 40GB, podendo ser estendida com a
adição de novos discos no RAID.
●Em seguida crie os diretórios para cada servidor que o Barman ira gerenciar os
backups;
●Para terminar altere a permissão de acesso para o usuário barman no ponto de
montagem.
Amorim Weverton Rufino De / weverton.geek@gmail.com
2$ sshkeygen <Enter 3x>
3$ cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
4$ chmod 600 ~/.ssh/authorized_keys
6# rsync avz ~postgres/.ssh/id_rsa* backup:~barman/.ssh/
147
●
Através do comando rsync envie os arquivos authorized_keys, chave publica e
privada para o servidor de backup, no login do usuário do Barman.
Amorim Weverton Rufino De / weverton.geek@gmail.com
3# chmod 600 /var/lib/barman/.ssh/authorized_keys
4# chmod 600 /var/lib/barman/.ssh/id_rsa
5# chmod 755 /var/lib/barman/.ssh/id_rsa.pub
8 $ ssh barman@backup.dexter.com.br
148
●
Através do comando rsync envie os arquivos authorized_keys, chave publica e
privada para o servidor de backup, no login do usuário do Barman.
5# vim /etc/postgresql/9.6/main/postgresql.conf
archive_command = 'scp %p barman@backup.dexter.com.br
:/var/lib/barman/backups/dbmaster/incoming/%f >
/dev/null'
4 Reinicie o PostgreSQL.
149
Configuração do Postgres
●
É necessário criar um usuário no PostgreSQL com privilégios de SUPERUSER para
a realização do backup.
●É necessário ajustar o comando de arquivamento, que agora sera feito via scp;
Amorim Weverton Rufino De / weverton.geek@gmail.com
Informativos:
1 Liste, verifique e exiba detalhes do servidor:
1# barman listserver
2# barman switchxlog force dbmaster
3# barman check dbmaster
4# barman showserver dbmaster
Comandos de Gerenciamento:
2 Faça o Backup do dbmaster:
5 # barman backup dbmaster
3 Liste os backups realizados e os arquivos:
6# barman listbackup dbmaster
7# barman showbackup dbmaster <Backup ID>
8# barman listfiles dbmaster <Backup ID>
150
Comandos Informativos:
Listar servidores gerenciados pelo barman:
barman listserver
Checar conexão com um servidor Postgres:
barman check dbmaster
Exibir detalhes de configuração de um servidor Postgres:
barman backup dbmaster
Comandos de gerenciamento
Executar backup completo:
barman backup dbmaster
Listar backups de um servidor Postgres:
barman listbackup dbmaster
Exibir informações de um backup:
barman showbackup dbmaster <BACKUP_ID>
Listar arquivos armazenados no backup:
barman listfiles dbmaster <BACKUP_ID>
Apagando backup:
barman delete dbmaster <BACKUP_ID>
Amorim Weverton Rufino De / weverton.geek@gmail.com
BARMAN – Restore
Servidor dbmaster
1 Simule um desastre no servidor dbmaster:
1# service postgresql stop
2# rm rf /var/lib/postgresql/9.6/main
Servidor backup
2 Faça a recuperação do backup full com o usuário barman:
3$ barman recover dbmaster <BACKUP_ID>
/var/lib/postgresql/9.6/main remotessh
command="ssh postgres@dbmaster.dexter.com.br"
Servidor dbmaster
3 Inicie o PostgreSQL no servidor dbmaster:
151
Servidor backup
1 Edite o arquivo barman.conf
1# vim /etc/barman.conf
+streaming_conninfo=host=dbmaster.dexter.com.br
user=barman password=4linux dbname=postgres
+backup_method = postgres
+streaming_archiver = on
+slot_name = barman
Servidor dbmaster
2 Edite o arquivo postgresql.conf
3$ vim /etc/postgresql/9.6/main/postgresql.conf
+max_replication_slots = 2
+max_wal_senders = 2
152
Backup utilizando streaming é uma forma de backup que utiliza slot de replicação,
de forma que o servidor de backup recebe todas as transações do banco no momento
que elas são concluídas.
A principal vantagem é que temos um backup instantâneo de todas as transações
que ocorre no banco, sendo que em caso de crash, a perda de dados é quase
inexistente. Outra vantagem é que como o arquivamento de wal é realizado pelo
barman, podemos desativar o arquivamento do banco, reduzindo o uso do espaço em
disco no servidor de banco.
Em caso de queda na comunicação do servidor de backup com o servidor de
banco, o arquivamento é executado no banco, através do uso de slots, ao retornar a
comunicação, os arquivos de wal que estavam sendo arquivado no banco, são
transferidos para o backup via streaming e reciclados.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Servidor dbmaster:
3 Edite o arquivo pg_hba.conf e reinicie o banco:
1# vim /etc/postgresql/9.6/main/pg_hba.conf
2# host replication barman 192.168.200.80/32 md5
1# /etc/init.d/postgresql restart
2# su – postgres
3$ psql
4$ SELECT * FROM
pg_create_physical_replication_slot('barman');
5$ select * from pg_replication_slots;
153
Amorim Weverton Rufino De / weverton.geek@gmail.com
Servidor backup
5 Verifique a utilização do processo receive-wal:
1$ barman check dbmaster
2$ ps ef | grep postgres
barman 1291 1289 0 10:34 ? 00:00:00
/usr/lib/postgresql/9.6/bin/pg_receivexlog
dbname=dbname=replication
host=dbmaster.dexter.com.br password=4linux
replication=true user=barman
application_name=barman_receive_wal verbose no
loop nopassword –
directory=/var/lib/barman/backups/dbmaster/
streaming slot=barman
154
Amorim Weverton Rufino De / weverton.geek@gmail.com
Objetivos da Aula
Instalando o BARMAN
Arquivo de parâmetros;
Troca de chaves;
Validação e backup;
Restaurando backup;
Backup via streaming;
155
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Características e Instalação
Tunning Linux do MySQL
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Objetivos da Aula
157
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Ciclo Básico de Solução de Performance
158
Amorim Weverton Rufino De / weverton.geek@gmail.com
Amorim Weverton Rufino De / weverton.geek@gmail.com
Reconhecimento o Hardware
1 - Discos e Controladoras
Utilizar Storage;
Usar Raid 10;
2 - Memória RAM
ECC (detecção de erros);
Proporcional a utilização do Banco;
3 - CPU
Proporcional ao numero de conexões;
Maior clock possível;
4 - Rede
Segmentar Rede;
Utilizar Cabeamento certificado;
159
Discos e controladoras
Discos formam o recurso mais consumido pelos bancos de dados, e não
estamos falando apenas do espaço ocupado.
Eles são os componentes vitais de um SGBD. Quanto mais poderoso o seu
sistema de discos, melhor a performance do SGBD.
Discos de rotação mais rápida (10.000 ou 15.000 rpm) garantirão tempos de
acesso a dados mais rápidos. A utilização de RAID 1+0 (RAID 10) é a combinação
mais favorável para bancos de dados pois ele alia segurança e desempenho.
Sistemas de storage do tipo SAN – Storage Area Network utilizando fibras
ópticas são os mais indicados. Discos high-end com muito cache podem ser
necessários para aplicações OLTP mais pesadas. Multipath aumenta a banda
disponível em canais de fibra e aumenta a disponibilidade.
Múltiplos discos e RAID arrays separados para tabelas e índices muito
acessados são importantes. Separar os arquivos WAL (diretório pg_xlog) em um
grupo só para eles garantirá a melhor performance nas aplicações com muita escrita.
Outro ponto importante é escolher controladoras que possuam bateria, afim de
possibilitar o uso do seu cache de forma segura e eficaz.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Memória RAM
• ECC;
• Registrada;
• OLAP maior quantidade de RAM;
• OLTP menor quantidade de RAM;
• Mais conexões, mais memória.
Quanto mais RAM melhor. Para maior estabilidade, prefira memórias com
detecção e correção de erro (ECC) e com registradores (registered).
Aplicações OLAP (relatórios e estatísticas) com bancos de dados Data
Warehouse precisarão de muita memória enquanto bancos de dados OLTP (transações
rápidas) terão um consumo mais modesto. Muitas conexões exigirão muita memória.
Em aplicações OLAP, o ideal é que a memória RAM disponível consiga
armazenar as ordenações e operações com tabelas hashes, como agregações e
junções.
Processador
• Maior clock;
• 64bits;
• Grande número conexões, mais cores;
Comunicação Inter-processos}
Memória compartilhada
3# sysctl kernel.shmall
162
Alterando parâmetros:
É recomendável que os parâmetros sejam alterados no arquivo
“/etc/sysctl.conf” para que sejam verificados duranet a inicialização do Sistema
Operacional, além do arquivo é possível mudar sem reboot com os comandos:
# sysctl w kernel.shmmax=<valor>
# echo <valor> > /proc/sys/kernel/shmmax
Amorim Weverton Rufino De / weverton.geek@gmail.com
163
Semáforos
Outro recurso que pode ser precisar de ajuste são os semáforos, o que
normalmente ocorre quando se aumenta demasiadamente o número máximo de
conexões.
Parâmetro “vm.overcommit_memory”:
0 = Permite overcommit de memória (Linux default);
1 = Sempre faz o overcommit de memória;
2 = Não permite overcommit de memória;
Memory overcommit
Se desejado, pode-se garantir que o OOM killer não escolha o processo supervisor,
definindo em /proc/pid/oom_adj o valor -17 que significa OOM\_DISABLE. Esta medida é
complicada pois, a cada reinício do PostgreSQL, o PID do processo supervisor muda. Isto
também não impede que o OOM killer atue sobre os outros processos do PostgreSQL e
mesmo backends.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Conceitos de RAID
165
166
Sistema de arquivos
A escolha de um sistema de arquivos adequado, é fundamental para se obter
desempenho e confiabilidade em um SGBD. Nesta seção serão abordados seus
principais recursos, vantagens e desvantagens.
Journaling
Talvez esta seja a funcionalidade mais popular dos sistemas de arquivas, o que
de grosso modo trata-se de uma prevenção contra perda de dados que permite a sua
recuperação em caso de um crash.
Write Barriers
Este recurso, bem menos popular que journaling, é de grande importância para
uso com SGBD's, pois é ele que garante que os dados sejam fisicamente gravados
em disco após um fsync, é ele garante que o conteúdo do cache da controladora seja
despejado no disco fisicamente.
Sem os write barriers, após um fsync os dados são despejados do cache do
sistema operacional porem podem permanecer no cache da controladora e se um
crash ocorrer neste momento, os mesmo serão perdidos pois o cache da controladora
é baseado em memória volátil. O uso dos write barriers aumenta a confiabilidade
porem praticamente inutiliza todas as vantagens de desempenho de se possuir cache
na controladora, pois toda gravação com fsync vai precisar esperar pela escrita em
disco físico.
É possível desligar os writer barriers com segurança e aproveitar o
desempenho da escrita no cache quando se utiliza controladoras/storage que
possuem bateria, pois desta forma em caso crash a bateria mantêm o conteúdo do
cache da controladora durante horas ou dias dependendo do equipamento.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Importância do Journaling
1)Registrar Bloco;
2)Escrever no Bloco;
3)Escrever Metadados;
O journaling recupera o
dado caso ocorra um crash
em alguma dessas etapas.
167
Journaling
●Prevenção contra perda de dados em caso de crash;
e ou dados de arquivos;
●
Recuperação mais rápida e eficiente;
●Em caso de crash somente o journal precisa ser lido;
●Gera overhead;
●
Diversos tipos.
168
EXT2
O ext2 não possui journaling por isso a recuperação após crash é lenta e não
garante recuperação completa dos dados, porem por outro lado possui vantagem em
desempenho, já que não existe o overhead do journaling.
A sua utilização com o PostgreSQL não é mais recomendada devido ao risco
de perda de dados por não dispor de ``journaling''. Todavia, como o próprio
PostgreSQL dispõe de estratégias de recuperação, o uso de ext2 pode ser desejado
quando não há disponibilidade de opção mais performática.
EXT3
O ext3 é basicamente um ext2 com journaling, é possível facilmente
transformar um sistema de arquivos ext2 em ext3, são 3 modalidades de journaling:
●
writeback : Apenas mudanças de metadados são gravados no journal, arquivos
recuperados podem conter lixo no final do arquivo;
●ordered : Metadados são gravados no journal, arquivos recuperados podem conter
O writeback é o modo com menor overhead, por isso tem melhor desempenho
e pode ser utilizado de forma segura com pg_xlog pois o lixo que pode ocorrer no final
do arquivo é facilmente descartado pelos mecanismos do WAL. Já para os diretórios
de dados deve-se utilizar ordered ou journal.
O ext3 suporta write barriers, desde que não se utilize LVM ou RAID via
software, porem de forma ineficiente, pois toda chamada de fsync força o despejo do
cache como um todo e não somente do arquivo em questão como deveria ser.
Amorim Weverton Rufino De / weverton.geek@gmail.com
ext4
XFS
Desenvolvido pela SGI para o IRIX;
Pouco popular no Linux, porém o mais robusto para SGBDS;
Implementação melhor de journaling;
Write barrier funciona de forma correta;
O mais recomendado para o PostgreSQL;
O XFS é um sistema de arquivos originalmente desenvolvido pela SGI para o
IRIX, hoje ainda é pouco popular no Linux, porem é um dos mais robustos e de melhor
desempenho para bancos de dados.
O XFS trabalha melhor com journaling pois ao contrario do ext3 que foi adaptado
a partir ext2 para suportar journal o XFS já foi projetado inicialmente com esta ideia.
Outro ponto positivo do XFS é o write barrier trabalhar de forma correta, ou seja,
somente o necessário é despejado do cache.
O limite de tamanho do XFS esta na casa dos 8 exbibytes e pode trabalhar com
arquivo na casa dos milhões de terabytes.
Para desabilitar os write barriers (em caso de controladora/storage com bateria)
basta utilizar opção nobarrier durante a montagem.
Hoje o XFS é o sistema de arquivos de escolha inicial para se utilizar com o
PostgreSQL. Alguns DBAs experientes também têm usado ext4 com bons resultados,
principalmente quando há contrato padrão de suporte do sistema operacional Red Hat
Enterprise Linux, que oferece XFS como opcional e custo extra.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Separação do PG_XLOG
170
PostgreSQL é multiprocessos;
Muitas conexões:
Aumentam o consumo de CPU;
Aumentam o LOAD do CPU;
Geram overhead de troca de contextos de CPU;
Recomendações:
Limitar numero de conexões (max_connections);
Utilizar “Pooler de Conexões;
171
+ START=1
172
●
Executam muitas tarefas, de curto prazo;
● Tem muitos usuários simultâneos.
O PgBouncer pode ficar em uma máquina separada (mas nada impede que ele
esteja na mesma máquina). A quantidade de clientes (m) que se conectam ao pool é
muito maior do que o número de conexões (n) do pool para o servidor PostgreSQL.
atribuída ao cliente somente durante uma transação. Quando o PgBouncer nota que a
transação acabou, a conexão é colocada novamente no aglomerado (pool);
●Aglomeração por Comando (Statement pooling): é o método mais agressivo. Uma
Configurando o pgBouncer
Execute os comandos abaixo no servidor dbmaster:
174
Pgbouncer.ini
A configuração do PgBouncer consiste de dois arquivos: um arquivo de
configuração e um arquivo de autenticação.
O arquivo de configuração (geralmente chamado de pgbouncer.ini), possui o
formato ini que é um padrão de fato para arquivos de configuração (amplamente
utilizado na plataforma Windows).
O elemento básico é um parâmetro que possui o formato nome = valor.
Parâmetros podem ser agrupados em seções que são descritas por [seção]. O ponto
e vírgula indica um comentário até o fim da linha.
[databases]
A seção databases informa a string de conexão a ser utilizada pelo PgBouncer.
Nomes de bancos de dados podem conter [A-Za-z0-9_.-]. String de conexão pode
conter os seguintes parâmetros:
●dbname: nome do banco de dados do servidor PostgreSQL;
●
host: endereço IP do servidor PostgreSQL;
●port: porta TCP onde o servidor PostgreSQL está atendendo;
●
connect_query: consulta executada após a conexão ser estabelecida mas antes de
disponibilizar a conexão para os clientes;
●client_encoding: informa a codificação de caracteres a ser utilizada;
●
datestyle: informa o estilo de data a ser utilizado;
●timezone: informa a zona horária a ser utilizada.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Opções Gerais:
● listen_addr: endereço TCP/IP onde o servidor atenderá as conexões dos clientes;
●
listen_port: a porta TCP onde o servidor está atendendo;
● unix_socket_dir: o diretório do soquete de domínio Unix;
● logfile: caminho do arquivo de log;
● pidfile: caminho do arquivo que contém o PID;
● auth_type: tipo de autenticação suportada. Pode ser: trust, any, plain, crypt e md5;
●
pool_mode: especifica quando um conexão pode ser reutilizada por outros clientes.
São eles: session (conexão é reutilizada após o cliente desconectar), transaction
(conexão é reutilizada após uma transação terminar) e statement (conexão é
reutilizada após um comando ser executado);
● max_client_conn: número máximo de conexões cliente permitido. Ao aumentar este
número, o número de descritores de arquivos (vide ulimit) deve ser aumentado de
acordo. Teoricamente, o máximo utilizado é max_client_conn + (max_pool_size *
num_bds * num_usuários);
●
default_pool_size: quantas conexões são permitidas por usuário/banco de dados.
Pode ser modificado através de configuração por banco de dados;
● reserve_pool_size: quantas conexões adicionais (além de default_pool_size) são
permitidas por usuário/banco de dados. Pode ser modificado através de configuração
por banco de dados;
● reserve_pool_timeout: se o cliente não for atendido nesse tempo, o PgBouncer
permite que seja utilizada uma conexão reserva;
●
server_round_robin: o PgBouncer reutiliza as conexões utilizando o conceito LIFO
(acrônimo para expressão inglesa Last In, First Out, que significa último a entrar,
primeiro a sair), que refere-se a estrutura de dados do tipo pilha. Assim, poucas
conexões fazem a maioria do trabalho. Isto garante uma boa performance se você
possui somente um servidor servindo um banco de dados. Esta opção habilita a
carga uniforme a todas as conexões.
Opções de Log:
●
syslog: habilita o uso do syslog. Na plataforma Windows, o eventlog é utilizado;
●
syslog_facility: qual tipo de programa (facilidade) está enviando o log para o syslog;
● log_connections: registra conexões realizadas com sucesso;
● log_disconnections: registra desconexões informando o motivo;
●
log_pooler_errors: registra mensagens de erro que o PgBouncer envia para os
clientes;
Opções administrativas:
●
admin_users: usuários que tem permissão para efetuar o login no console do
PgBouncer e executar todos os comandos;
● stats_users: usuários que tem permissão para efetuar o login no console do
PgBouncer e executar comandos somente leitura, ou seja, todos os comandos
SHOW exceto SHOW FDS.
● server_reset_query: comando enviado ao servidor antes da conexão ser liberada a
outros clientes. Uma boa escolha para versões 8.2 ou inferiores é RESET ALL; SET
SESSION AUTHORIZATION DEFAULT;. Para versões 8.3 ou superiores, DISCARD
ALL; é suficiente;
Amorim Weverton Rufino De / weverton.geek@gmail.com
Configurando o pgBouncer
Execute os comandos abaixo no servidor dbmaster:
3 Crie um arquivo de autenticação com o usuário postgres:
1$ psql c "SELECT * FROM pg_shadow;" | awk F" "
'{ print $1,$13 }' | grep aluno >
/etc/pgbouncer/userlist.txt
4 Insira aspas no arquivo conforme exemplo:
2$vim /etc/pgbouncer/userlist.txt
"aluno" "md596b565550b58e3d2a4e3028186fd815a"
176
●
server_check_query: consulta simples (ex:, SELECT 1) para verificar se o servidor
ainda está respondendo;
●server_check_delay: timeout para verificar uma conexão liberada. O valor 0 (zero)
serão fechadas. 0 (zero) a conexão com servidor PostgreSQL será utilizada uma vez;
●server_idle_timeout: se a conexão com o servidor PostgreSQL está ociosa mais do
que o tempo de espera informado é porque existem muitas conexões no pool e esta
pode ser fechada;
●server_connect_timeout: tempo de espera para efetuar o login ao servidor antes da
de espera informado, ela será fechada. Este valor não deve ser menor do que o
tempo total de uma conexão;
●client_login_timeout: se o cliente se conectar e não efetuar o login no tempo
PgBouncer - Comandos
SHOW (monitoria)
STATS, SERVERS, CLIENTS, POOLS,LISTS
USERS, DATABASES, FDS, CONFIG
Comandos
PAUSE / RESUME
SUSPEND
SHUTDOWN
RELOAD
Execute os comandos abaixo no servidor dbmaster:
espera que todas as consultas terminem. O comando não retornará até que todas as
consultas terminem. Útil para ser executar um reinício no servidor de banco de dados;
●
SUSPEND: todos os buffers são escritos e o PgBouncer para de atender requisições.
O comando não retornará até que tudo seja feito. Útil para executar um reinício no
PgBouncer;
●
RESUME: voltar ao trabalho após executar os comandos PAUSE ou SUSPEND;
●SHUTDOWN: termina o processo do PgBouncer;
Exemplo utilizado:
O exemplo acima ilustra o uso dos comandos PAUSE e RESUME. Neste caso,
executamos o PAUSE para bloquear consultas de futuras conexões. Após todas as
consultas das conexões ativas terminarem, você pode fazer uma manutenção no
servidor PostgreSQL.
Para aceitar novas consultas novamente, executamos o comando RESUME.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Particionamento de Tabelas
Características:
179
que não deve-se usar regras se as cargas forem feitas com o comando COPY;
●
Habilitar o parâmetro constraint_exclusion no postgresql.conf, usando o valor
partition a partir da versão 8.4 ou on nas versões anteriores.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Exemplos de particionamento:
●
tipo = ’A’ OR tipo = ’E’ OR tipo = ’J’
● tipo = ’X’ OR tipo = ’Z’
Amorim Weverton Rufino De / weverton.geek@gmail.com
Particionamento – Validação
Execute os comandos abaixo no servidor dbmaster:
('dexter','1234567891','20150716');
181
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Tunning Linux
Recapitulando
182
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Características ee Tunning
Monitoramento InstalaçãoPostgreSQL
do MySQL
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Objetivos da Aula
Monitoramento Pontual;
Monitoramento Contínuo;
Benchmark com pgbench;
Tunning OLAP e OLTP;
Explain e Explain Analize;
184
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Monitoramento Pontual
Considerações:
Deve-se conhecer o Hardware;
Deve-se conhecer a arquitetura;
Ferramentas:
top – CPU, RAM, SWAP, etc;
free – Dados referente a memória RAM;
ps – lista de processos;
iostat – Estatísticas de IO e CPU;
vmstat – Memória, paginação, etc;
185
free
O comando free é muito popular em ambientes Unix. Mas ele pode ser mal interpretado
para administradores desavisados. Vejamos um exemplo do mesmo:
$ free m
A opção -m é usada para mostrar os valores em MB ao invés de bytes (pode-se usar -g
para GB também).
É importante frisar que a linha que devemos mais prestar atenção para saber o quanto
de memória usada e livre o sistema tem é a segunda! Esta linha desconta o uso de
buffers e cached memory, e indica o quanto realmente os processos estão consumindo.
Se levarmos em conta somente a primeira linha o sistema acima indica que temos
apenas 337 MB livres de memória, o que não corresponde a realidade.
É importante ressaltar que a memória compartilhada é computada como cache e
por isso acaba sendo descontada na segunda linha, então para se obter um resultado
mais adequado deve-se somar e subtrair a quantidade de shared buffers do totais
utilizado e livre respectivamente.
O Linux (e outros Unix) tem a tendência de usar a memória disponível para cache
de disco e buffers de rede. A coluna cached da primeira linha indica o quanto de cache
de disco o S.O. está alocando, e este cache é usado para evitar I/O de disco em leituras
e portanto muito importante para um banco de dados. A existência deste cache é um dos
motivos que não há necessidade de se alocar tanto shared buffer o possível no
PostgreSQL.
ps
Outra ferramenta muito usada pelos administradores de sistema, mas raramente
explorada em sua totalidade é o ps, capaz de mostrar os processos na memória e o
consumo de recursos dos mesmos.
O ps pode por exemplo ser usado para filtrar somente as informações pertinentes
do sistema com a opção o. O exemplo abaixo indica os processos que estão na
memória do PostgreSQL somente com o uso de CPU e memória.
$ ps o 'pid,s,%cpu,%mem,cmd' C postgres
Com o ps também é possível saber a quantidade de conexões abertas somente
mandando contar suas linhas e descontando os processos fixos.
# ps o 'pid,s,%cpu,%mem,cmd' C postgres | wc l
No exemplo acima é possível concluir que existe um conexão aberta, pois
descontando o número de processos fixos (6) mais o cabeçalho temos o número 1.
vmstat
Outro comando popular é o vmstat. Ele relata estatísticas sobre processos, memória,
paginação, CPU e I/O de uma forma resumida e prática.
$ vmstat 2
É importante ressaltar que a primeira coleta(primeira linha) deve ser descartada,
pois ela não representa a real situação do sistema. Diante disso, sempre é necessário
informar uma taxa de atualização das coletas, que neste caso foi de 2 segundos, pois
caso contrário ele apresentara somente a primeira coleta.
No uso do vmstat destaca-se as seguintes informações:
● Fluxo de uso de swap: Através das colunas si e so é possível saber a quantidade de
dados fluindo da memória para swap, ou vice-versa. É com estes indicadores que se
determina se o swap esta sendo efetivamente usado e atrapalhando no
desempenho.
● Número de trocas de contexto: Apresentado na coluna cs, este valor tende a subir
quando se aumenta o número de processos.
Amorim Weverton Rufino De / weverton.geek@gmail.com
iostat
É uma ferramenta de apresentação de estatísticas de I/O e CPU relacionada a I/O
extremamente útil para um DBA. Podemos especificar dispositivos ou partições a serem
monitorados.
Assim como o vmstat a primeira coleta deve ser descartada e por isso sempre é
necessário informar uma taxa de atualização.
O iostat pode apresentar suas informações de forma resumida ou detalhada quando
utilizada a opção -x.
$ iostat sda 2
No modo resumido destacam-se as seguintes informações:
●
Média de operações de IO por segundo}: É apresentado na coluna tps. É útil para
determinar se os discos estão chegando próximo ao seu limite de IOPS.
● Média da taxa de blocos lidos e gravados}: É apresentada nas colunas Blk_read/s e
Blk_wrtn/s' respectivamente. Este auxilia determinar qual tipo de operação pode estar
gerando carga.
Quando utilizado no modo detalhado traz informações mais especificas:
$ iostat x sda 2
Tamanho médio da fila: Apresentado na coluna avgqu-sz, é média no tamanho da fila
de IO no tempo mensurado.
Media de tempo de espera para concluir uma requisição: Apresentado na coluna
await, é a media de tempo gasto do inicio de uma requisição até receber o retorno do
dispositivo.
Media de tempo de serviço: Apresentado na coluna svctm, é media de tempo gasto a
partir da saída da requisição do S.O. até seu retorno, pode ser considerado como tempo
de resposta do dispositivo.
Porcentagem de utilização: Apresentado na coluna %util, traz uma aproximação do
uso do disco, quando atinge valores próximos a 100% pode-se dizer que o disco esta
saturado.
Apesar de ser útil para determinar problemas de desempenho em disco a métrica
de tempo de serviço não é mais confiável no Linux atualmente e será removido das
próximas versões do iostat.
iotop
Ferramenta similar ao top porem com informações de IO por processo, é útil para
identificar se um processo especifico esta causando carga excessiva de IO.
$ iotop
Amorim Weverton Rufino De / weverton.geek@gmail.com
Monitoramento Contínuo
Ferramentas completas
Zabbix;
Ferramenta SAR
Ferramenta básica de monitoria;
Eficiente e com relatórios em texto;
Monitora os principais itens de hardware;
Ferramenta KSAR
Converte o relatório em texto do sar;
Gera gráficos facilitando a visualização;
188
7# ps aux
8# iotop
9# sar A
189
Selecione “en_US.UTF8”
191
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Configurando o pgbench
Execute os comandos abaixo no servidor dbmaster:
● Ler o script de transação a partir de um arquivo. Isto que dizer que você também
pode montar os seus testes com tabelas diferentes e utilizar o pgbench para obter os
resultados. Múltiplos scripts podem ser utilizados; nesse caso, o pgbench escolhe um
script randomicamente toda vez que uma transação for iniciada;
●
Escolher o tipo de protocolo no qual enviará as consultas ao servidor. As opções são:
simple, extended e prepared;
●Executar exclusivamente transações somente leitura;
●
Fazer (ou não) a limpeza (VACUUM) das tabelas antes dos testes;
●Escolher o número de clientes simultâneos;
OLTP vs OLAP
OLTP – (Online Transacional Processing)
Muita Escrita;
Consultas Simples;
Modelo normalizado;
Mais volátil;
OLAP – (Online Analytical Processing)
Consultas Complexas;
Grandes massas de dados;
Modelo mais simples;
194
Menos volátil;
OLTP
OLAP
Tunning OLTP
Separar PG_XLOG;
Aglomerar Commits;
Mais Shared Buffers (40% da RAM);
Log Checkpoints;
195
WAL
Neste tipo de banco normalmente a escrita é intensa, o que faz com que
primeiro gargalo seja o WAL, por isso é fundamental que o ``pg_xlog'' esteja em
conjunto de discos separados e de alto desempenho e confiabilidade.
Em bancos OLTP, com muitas transações concorrentes, pode ser interessante
utilizar as opções de commit_siblings e commit_delay para aglomerar mais de uma
transações em único fsync, e desta forma amenizar a carga de IO gerada pela
gravação do WAL.
Os ajustes destes parâmetros são muito específicos de cada ambiente, por
isso, não se tem uma recomendação de número inicial.
Bancos com este perfil devem possuir uma área de shared buffers
suficientemente grande para que consiga armazenar o fluxo de dados a serem
escritos, afim de sempre ter páginas disponíveis e assim evitar que os backends
tenham necessidade de efetuar as gravações por si mesmos. Como recomendação
inicial pode-se dedicar em torno de 40% da memória ram para os shared buffers
(desde que não exceda faixa dos 4GB a 8GB).
Também deve-se evitar que ocorram checkpoints constantemente, o ideal é
aumentar o número segmentos para evitar que sua falta provoque um checkpoints e
desta forma possibilitando controlar exatamente a cada quanto tempo ele deve
ocorrer, e como deve ser espalhado. Como recomendação inicial pode-se começar
com pelo menos 15 segmentos.
Quando ativada a opção log_checkpoints, todos os checkpoints passam a ser
registrados em log, com esta informação é possível saber, quando e como estão
ocorrendo os checkpoints, o que é fundamental para realizar novos ajustes.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Separando pg_xlog
Execute os comandos abaixo no servidor dbmaster:
1 Existe um disco de 1GB no servidor, formate o disco:
1 # mkfs.ext4 /dev/sdb1
2 Crie o diretório /pg_xlog e monte o disco
2# mkdir /pg_xlog
3# vim /etc/fstab
/dev/sdb1 /pg_xlog ext4 defaults 0 2
4# mount a
5# chown R postgres /pg_xlog
8# rmdir /var/lib/postgresql/9.6/main/pg_xlog
9# ln s /pg_xlog /var/lib/postgresql/9.6/main/pg_xlog
10# service postgresql start
196
Tunning OLTP
Execute os comandos abaixo no servidor dbmaster:
197
commit_siblings
commit_delay
Amorim Weverton Rufino De / weverton.geek@gmail.com
Tunning OLAP
198
Uso de memória
hash tables.
●Resultados com dados ordenados.
Tunning OLAP
Execute os comandos abaixo no servidor dbmaster:
2 Reinicie o PostgreSQL
2# service postgresql restart
4 $ pgbench T 300 c 50 s 40 bench
199
Pgbouncer.ini
work_mem
A configuração do PgBouncer consiste de dois arquivos: um arquivo de
configuração
O valorepadrão
um arquivo
do work_mem
de autenticação.
é de 1MB, o que é muito pequeno, por isso esse
valor deve
O arquivo
ser aumentado,
de configuração
porem é(geralmente
necessário chamado
tomar o cuidado
de pgbouncer.ini),
para que o valor
possuinãoo
formato um
permita ini estouro
que é um da memória
padrão de física
fatodopara
servidor,
arquivos
levando
de configuração
em conta que(amplamente
este limite é
utilizado
por na plataforma
operação, e pode serWindows).
alocado múltiplas vezes de forma paralela em uma consulta
e em diversas
O elemento conexões.
básico é um parâmetro que possui o formato nome = valor.
Parâmetros
Para evitar
podemestouro
ser agrupados
de memoria
em seções
de físicaque
a seguinte
são descritas
formula
porpode
[seção].
ser utilizada
O ponto
e vírgula
(em indica
qualquer um de
perfil comentário
banco): até o fim da linha.
(shared_buffers + (2*max_connections*work_mem) + (autovacuum_max_workers *
[databases]
maintenance_work_mem) ) < Total de RAM
A seção Para databases
ajudar no informa
tuning adostring de conexão
work_mem a ser utilizada
é fundamental peloo PgBouncer.
habilitar registro de
Nomes de
arquivos temporários
bancos deem dados
log através
podemda conter
opção[A-Za-z0-9_.-].
log_temp_files.
String
Quando
de conexão
definida empode
0,
conter os
registra todas
seguintes
os arquivos
parâmetros:
temporários independente do tamanho.
dbname: nome do banco de dados do servidor PostgreSQL;
20160807 15:21:46 EDT STATEMENT: select * from
●
4 $ pgbench p6432 T 300 c 50 s 40 bench Ualuno
200
Pgbouncer.ini
Shared buffers
A configuração do PgBouncer consiste de dois arquivos: um arquivo de
configuração
Bancose OLAP,
um arquivo
não necessitam
de autenticação.
tanto de shared buffers quanto os OLTP, pois
eles seObeneficiam
arquivo dedoconfiguração
cache do sistema
(geralmente
de arquivos
chamado
parade
a leitura
pgbouncer.ini),
dos dados, possui
poremo
formato inideque
precisam mais
é ummemória
padrãopara
de fato
work_mem.
para arquivos
A recomendação
de configuração
inicial (amplamente
para shared
utilizadoneste
buffers na plataforma
perfil deWindows).
banco é que se utilize por volta de 10% da memória RAM
(desdeOque elemento
não excedabásico
faixaé dos
um4GB
parâmetro
a 8GB). que possui o formato nome = valor.
Parâmetros podem ser agrupados em seções que são descritas por [seção]. O ponto
ePlanejador
vírgula indica
de um comentário até o fim da linha.
consultas
[databases]
Para que que consultas complexas tenham um plano de busca ótima é
A seção databases
necessário informa tenha
que PostgreSQL a string de suficientes
dados conexão a bons
ser utilizada pelosua
para basear PgBouncer.
decisão.
Nomes
Um dadodefundamental
bancos de dados
para opodem
planejador
conter
de [A-Za-z0-9_.-].
consultas é quantidade
String de total
conexão
de cache
pode
conter os em
presente seguintes
todos níveis
parâmetros:
abaixo do PostgreSQL, seja cache do sistema de arquivos,
controladoras,
● dbname: nome storage
do banco
e afins\ldots
de dados do servidor PostgreSQL;
●
host: endereço IP do servidor PostgreSQL;
●port: porta TCP onde o servidor PostgreSQL está atendendo;
A soma de todos estes caches deve ser informado ao PostgreSQL através da
opção
● user: effective_cache_size.
usuário do servidor PostgreSQL;
●password: senha do usuário do servidor PostgreSQL;
●
connect_query: consulta executada após a conexão ser estabelecida mas antes de
disponibilizar a conexão para os clientes;
●client_encoding: informa a codificação de caracteres a ser utilizada;
●
datestyle: informa o estilo de data a ser utilizado;
●timezone: informa a zona horária a ser utilizada.
Amorim Weverton Rufino De / weverton.geek@gmail.com
201
PgBadger
●
Conexões por banco/cliente/usuários
1 Instale o pgbadger:
1# aptget install pgbadger
202
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
EXPLAIN
Plano de execução;
Estimativas;
EXPLAIN ANALYZE
Plano de Execução e estimativas;
Tempo Real;
A instrução SQL é executada;
203
●
EXPLAIN: Apenas exibe o plano de execução e suas estimativas, sem executar a
consulta.
●EXPLAIN ANALYZE: Exibe o plano de execução, suas estimativas e mostrando os
●
Numero estimado de linhas a ser retornado.
●Tamanho média estimado (bytes) das linhas.
Amorim Weverton Rufino De / weverton.geek@gmail.com
1 $ psql p6432 Ualuno bench
2 Execute o comando EXPLAIN conforme segue:
2pgbadger=# EXPLAIN
SELECT *
FROM pgbench_accounts
JOIN pgbench_branches ON
(pgbench_accounts.bid=pgbench_branches.bid)
WHERE aid<10;
3 Colete o conteúdo e coloque no site:
https://explain.depesz.com/
204
De acordo com o plano mostrado a etapa mais custosa seria o hash join, agora
vamos conferir se as estimativas estão corretas executando um EXPLAIN ANALYZE:
Como visto acima, a estimativa do hash join realmente é parte mais custosa
desta consulta, pois seu tempo foi o maior de todas etapas.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Recapitulando
Monitoramento Pontual;
Monitoramento Contínuo;
Benchmark com pgbench;
Tunning OLAP e OLTP;
Explain e Explain Analize;
205
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Características e Instalação
Replicação e Alta do MySQL
Disponibilidade
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Objetivos da Aula
207
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Streaming Replication
➢ Streaming Replication;
➢ 1 Master – X Slaves;
➢ Replicação física;
➢ Alta disponibilidade;
➢ HOT-STANDBY.
208
A replicação nativa do PostgreSQL é física, por isso, não é possível replicar somente
alguns objetos, ou seja, na replicação nativa somente é possível realizar a replicação
do um cluster como um todo. Por ser uma replicação física, também é necessário
que a versão e arquitetura do PostgreSQL sejam idênticas.
Streaming Replication
210
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
4 Reinicie o PostgreSQL.
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
2# vim /etc/postgresql/9.6/main/postgresql.conf
listen_addresses = '*'
wal_level = replica
max_wal_senders = 3
wal_keep_segments = 100
hot_standby = on
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
dbmaster p 5432 U replicacao
standby_mode = 'on'
primary_conninfo = 'host=dbmaster port=5432 user=replicacao
password=4linux application_name=dbstandby1'
trigger_file = '/tmp/psql.trigger'
Da mesmo forma que o backup PITR, para criar uma réplica é necessário efetuar um
backup base, como apresentado no capítulo anterior. Porém, para facilitar este
procedimento, existe a ferramenta pg_basebackup.
pg_basebackup D /var/lib/postgresql/9.4/slave P v h
192.168.200.50 p 5432 U replicacao
Criação do recovery.conf
standby_mode = 'on'
primary_conninfo='host=127.0.0.1 port=5433 user=teste
password=123456 application_name=slave
trigger_file = '/tmp/psql.trigger'
Cascading Replication
215
Cascading Replication
host replication replicacao 192.168.200.70/32 md5
archive_mode = on
archive_command = 'exit 0'
hot_standby = on
3 Reinicie o PostgreSQL:
3# systemctl restart postgresql
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
3# chown R postgres. /tbsdexter
4# chmod 700 /tbsdexter
5# systemctl stop postgresql9.6
6# rm rf /var/lib/pgsql/9.6/data/*
h dbstandby1 p 5432 U replicacao
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Configurando Standby2
primary_conninfo = 'host=dbstandby1 port=5432 user=replicacao
password=4linux application_name=dbstandby2'
3$ vim /var/lib/pgsql/9.6/data/postgresql.conf
listen_addresses = '*'
wal_level = replica Inicie o PostgreSQL “systemctl
3
hot_standby = on start postgresql-9.6”.
max_wal_senders = 3
wal_keep_segments = 100
Execute os comandos nos servidores:
hot_standby = on
dbstandby2 e usuário postgres.
218
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Tipos de Replicações
219
Ao decidir por utilizar a replicação síncrona, deve-se verificar a real necessidade, pois
seu uso afeta o desempenho do banco, devido a necessidade do master aguardar
pela efetivação no slave. O tempo de mínimo de uma transação será o tempo para
gravar os dados no master somado com o tempo gasto para trafegar na rede somado
com o tempo de gravação no slave.
synchronous_standby_names = 'dbstandby1'
É importante enfatizar que quando se utiliza a replicação síncrona, caso o slave pare, o
master também para, pois ficará indefinidamente aguardando pelo slave. Para evitar que
isso aconteça, deve-se ter um segundo slave que assumirá como síncrono caso o slave
primário pare.
Para promover um servidor slave a master, basta criar o arquivo de trigger definido no seu
recovery.conf.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Slot de Replicação
221
Replication Slots
O modelo de replicação por slots é uma das novidades no PostgreSQL 9.4. Slots de
replicação fornecem uma maneira automatizada para garantir que o Master não remova
segmentos do WAL até que tenham sido recebidas por todos os servidores Standby, e que o
servidor Master não remova linhas que poderiam causar um conflito de recuperação, mesmo
quando os servidores Standby são desligados.
Um cuidado a mais precisa ser tomado, pois caso o servidor slave fique muito tempo
indisponível, como os arquivos de WAL irão aumentar continuamente o espaço em disco,
ficará comprometido, causando uma parada do servidor Master.
Caso queira remover um slot depois de remover um servidor que estava utilizando a
replicação após a remoção do servidor, é necessário remover o slot com os comandos:
postgres=# SELECT * FROM pg_replication_slots ;
postgres=# select pg_drop_replication_slot('nome_do_slot');
Amorim Weverton Rufino De / weverton.geek@gmail.com
Slot de Replicação
Execute os comandos no servidor: dbmaster.
max_replication_slots = 3
3 Crie o slot utilizando a função e depois valide:
3=#SELECT * FROM
pg_create_physical_replication_slot('slot_standby1');
4=#select * from pg_replication_slots;
primary_slot_name = 'slot_standby1'
222
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
➢ Replicação assíncrona;
➢ Replicação síncrona;
➢ Replicação em cascata;
➢ Slots de replicação;
224
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
REPMGR (Replication
Características e InstalaçãoManager)
do MySQL
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Objetivos da Aula
226
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Cenário Proposto
227
Master
O arquivamento contínuo pode ser usado para criar uma configuração de cluster de
alta disponibilidade (HA) com um ou mais servidores de espera, prontos para assumir
as operações caso o servidor primário falhe. Um servidor primário funciona no modo
de arquivamento contínuo.
Standby
O servidor Standby (modo de espera) é criado para para assumir as operações caso
o servidor primário falhe. Enquanto o servidor primário funciona no modo de
arquivamento contínuo, cada servidor Standby opera em modo de recuperação
contínua, lendo os arquivos do WAL do primário.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Cenário Proposto
NOTA
228
Witness
O servidor testemunha deve conter uma cópia das tabelas de metadados repmgr,
mas não será configurado como um servidor em modo de espera (Standby). Em vez
disso, irá atualizar as cópias de metadados cada vez que ocorre um failover.
Pgpool
É uma ferramenta que pode ser usada tanto para gerenciamento da replicação, como
para segmentação de escrita e leitura. Esse aplicativo ficará instalado junto com o
servidor witness e poderá ser usado para conexão ao banco de dados.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Cenário Proposto
229
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Replication Manager
➢ Ferramenta Opensource;
➢ Gerencia a Replicação;
➢ Gerencia Failover;
➢ Monitora a Replicação
➢ Usa pg_basebackup;
➢ Tem suporte a slots de replicação;
➢ Suporta replicação em Cascata.
230
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
3$ createdb repmgr O repmgr
/usr/share/postgresql/9.6/contrib/repmgr_funcs.sql
Diretivas de configuração:
Ajustes de Segurança
Caso a replicação por Streaming esteja ativada em modo síncrono, é necessário comentar a
diretiva synchronous_standby_names.
É preciso configurar a autenticação no Postgres, liberando o acesso aos usuários repmgr
aos bancos repmgr e replication. Na quarta coluna estamos informando o IP da rede e sua
máscara.
Diretivas de Configuração:
➢shared_preload_libraries: Esta variável especifica uma ou mais bibliotecas compartilhadas a serem
pré-carregados na inicialização do servidor;
➢wal_level: Determina a quantidade de informação e é escrito para o WAL. O valor padrão é mínimo, o
que escreve apenas as informações necessárias para se recuperar de uma falha ou desligamento
imediato.
➢archive_mode: Quando o archive_mode está ativado, os segmentos do WAL concluídos são enviados
para armazenamento de arquivos, definindo como archive_command;
➢archive_command: Define o comando que será executado para arquivar um segmento de arquivo
WAL concluído;
➢max_wal_senders: Define o número máximo de conexões simultâneas a partir dos servidores de
espera (total de slaves + 1);
➢wal_keep_segments: É o número de segmentos extras a serem mantidos no pg_xlog do Master;
➢max_replication_slots: Especifica o número máximo de slots de replicação que o servidor pode
suportar;
➢hot_standby: Quando ativado transforma o nó em em um servidor de espera. Todas essas conexões
são estritamente somente leitura.
Amorim Weverton Rufino De / weverton.geek@gmail.com
4$ repmgr f /etc/repmgr/repmgr.conf verbose master register
5$ repmgrd f /etc/repmgr/repmgr.conf d &
Diretivas de configuração:
pg_bindir = /path/to/postgres/bin
Amorim Weverton Rufino De / weverton.geek@gmail.com
O nome do cluster deve ser o mesmo em todos os nós. O valor das diretivas node e
node_name deve ser exclusivo para cada nó.
Amorim Weverton Rufino De / weverton.geek@gmail.com
cluster=dexter
node=2
node_name=standby1
conninfo='host=dbstandby1 user=repmgr dbname=repmgr'
pg_bindir=/usr/lib/postgresql/9.6/bin
use_replication_slots=1
failover=automatic
promote_command='repmgr standby promote f /etc/repmgr/repmgr.conf'
follow_command='repmgr standby follow f /etc/repmgr/repmgr.conf'
loglevel=NOTICE
logfile='/var/log/postgresql/repmgr.log' Execute os
comandos no
servidor:
dbstandby1.
236
O suporte para failover requer uma extensão repmgr_func, que pode ser instalada
através do arquivo repmgr_funcs.sql.
Amorim Weverton Rufino De / weverton.geek@gmail.com
2# vim /etc/postgresql/9.6/main/postgresql.conf
shared_preload_libraries = 'repmgr_funcs'
Execute os
comandos no
servidor:
dbstandby1.
237
O suporte para failover requer uma extensão repmgr_func, que pode ser instalada
através do arquivo repmgr_funcs.sql.
Amorim Weverton Rufino De / weverton.geek@gmail.com
shared_preload_libraries = 'repmgr_funcs'
archive_mode = on
archive_command = 'exit 0'
max_replication_slots = 3
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
1 Inserir o repositório:
1# vim /etc/apt/sources.list
+ deb http://apt.postgresql.org/pub/repos/apt/ trustypgdg main
2# wget https://www.postgresql.org/media/keys/ACCC4CF8.asc
3# aptkey add ACCC4CF8.asc
240
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
2# mkdir /etc/repmgr
Execute os
2 Edite o repmgr.conf e altere o dono do diretório:
3# vim /etc/repmgr/repmgr.conf
comandos
no servidor:
cluster=dexter
witness.
node=4
node_name=witness
conninfo='host=witness user=repmgr dbname=repmgr port=5499'
pg_bindir=/usr/lib/postgresql/9.6/bin
loglevel=NOTICE
logfile='/var/log/postgresql/repmgr.log'
4# chown R postgres. /etc/repmgr/
241
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
1#rsync avz ~postgres/.ssh/* witness:~postgres/.ssh/
2 Edite o pg_hba.conf:
5# vim /etc/postgresql/9.6/main/pg_hba.conf
242
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
244
Amorim Weverton Rufino De / weverton.geek@gmail.com
D /var/lib/postgresql/9.6/main \
d repmgr U repmgr \
verbose copyexternalconfigfiles \
standby clone h dbmaster
2 Inicie o PostgreSQL com o usuário root:
2# systemctl start postgresql
D /var/lib/pgsql/9.6/data/ d repmgr U repmgr \
copyexternalconfigfiles=pgdata verbose standby clone h
dbmaster
2 Com o usuário root recupere os arquivos de conf: Execute os
2# cp /root/p*.conf /var/lib/pgsql/9.6/data/ comandos no
3# chown R postgres. /var/lib/pgsql/9.6/data servidor:
246 cluster show
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
promote configfile (f)
follow rsynconly (r)
switchover
disconect
manual
247
listen_addresses = '*'
Port = 5499
shared_preload_libraries = 'repmgr_funcs'
6$ repmgr d repmgr U repmgr h dbmaster verbose \
force D /var/lib/postgresql/9.6/main witness create
7$ repmgrd f /etc/repmgr/repmgr.conf d &
8$ repmgr cluster show
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
PGPOOL-II
➢ Ferramenta Opensource;
➢ Gerencia a Replicação;
➢ Load Balancer;
➢ Pooler de conexões.
249
O que é o Pg-poolII?
É um middleware que funciona entre os servidores do PostgreSQL e um cliente de banco de
dados PostgreSQL. É licenciado sob a licença BSD. Abaixo algumas de suas funções:
Pooler de Conexões
Pode gerenciar conexões com os servidores PostgreSQL e reutilizá-los sempre que uma nova
conexão com as mesmas propriedades que o pgcouncer ocorrer em modo de transação,
além de poder gerenciar vários servidores PostgreSQL.
Load Balancer
Quando a arquitetura utilizada possui réplicas, a execução do SELECT em qualquer servidor
irá devolver o mesmo resultado, enquanto as escritas são direcionadas sempre para o
servidor MASTER.
Limitando Conexões
Há um limite para o número máximo de conexões simultâneas com o PostgreSQL. As
conexões que ultrapassam o limite são rejeitadas. O pgpool-II também tem um limite para o
número máximo de conexões, mas conexões extras serão enfileiradas em vez de retornar um
erro imediatamente.
Transparência
Diz o protocolo de backend e frontend do PostgreSQL e transmite uma conexão entre eles.
Portanto, o pgpool-II é transparente para o servidor e o cliente.
Amorim Weverton Rufino De / weverton.geek@gmail.com
Instalando o PGPOOL 2
Instale os pacotes: Execute os comandos no servidor: witness.
1
1# aptget install postgresql9.6pgpool2 pgpool2 y
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Configurando o PGPOOL 2
Pegue os dados de autenticação com a consulta no banco master:
3
1$ postgres=# select rolname, rolpassword from pg_authid;
aluno:md596b565550b58e3d2a4e3028186fd815a
dexter:md5bd5a10d1473c21b2fd32a9ea540b49e2
3# tail 2 /etc/pgpool2/pcp.conf > /etc/pgpool2/pool_passwd
5$ createdb pgpool O pgpool
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
Configurando o PGPOOL 2
2# pgpool
3# su – postgres
4$ psql Ualuno h127.0.0.1 p5499
5=# SHOW pool_nodes;
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Amorim Weverton Rufino De / weverton.geek@gmail.com
REPMGR(Replication Manager)
253
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________