Workshop PostgreSQL
Implementação, Administração e Tunning
Caso Importação SIASG x SIASGnet-DC
(ADABAS x PostgreSQL)
OBJETIVO
Compartilhar os resultados obtidos na demanda de
transposição dos dados legados do SIASG-SIDEC para
o SIASGnet-DC, discutindo questões sobre a utilização
do SGBD PostgreSQL no projeto.
Tópicos
Ambiente de Trabalho
Problemas
Solução
Tunning do SGBD
Tunning do Modelo
Tunning da Aplicação
> Processo de Importação
Implementação
> Administração do SGBD
Esquemas
Catálogo do Sistema
> Execução do Processo
> O DBA e o SGBD
> PostgreSQL (SGBD Livre)
> Ferramentas de apoio
PDI Pentaho
> Técnicas
Extração
Carga – Data Staging Area
Transformação
Carga – Etapa Final
> Processo de Importação
Individual
O DBA e o SGBD
> O DBA é responsável por:
> Implementar;
> Administrar;
> Cooperar para que o desempenho do SGBD seja aceitável.
> A SUPDE possui poucos casos de DBAs responsáveis por Administração e
Tunning de servidores de bancos de dados em ambientes produtivos.
> Entender essas matérias, mesmo que superficialmente, coopera com o
processo de implementação e a qualidade final do produto de software.
PostgreSQL (SGBD Livre)
Quem poderá nos ajudar!?
Algumas dúvidas (receios) iniciais:
>Suporte interno
- Reinventar a roda
- Fazer uma roda que não sirva em lugar nenhum
>Ambiente produtivo (suporte)
>Versão (8.1, 8.2, 8.3, 8.4, 9.0...)
>Treinamento
>Documentação : )
Ferramentas de apoio
Power Architect
Shell Script
Ferramentas de apoio: PDI Pentaho
Técnicas
A importação foi baseada em um processo ETL:
>Extração dos dados existentes no Grande Porte
>Transformação dos dados recebidos para que os mesmos
obedecessem o padrão do novo modelo.
>Carga em duas etapas:
- Carga dos dados em esquema temporário (
staging area
)
- Carga dos dados no modelo final
Arquivos TXT Transformação
Técnicas: Extração
SIDEC (DDM)
Arquivos de Marcação Fixa
Arquivos contendo 20, 80 e 180 GB.
01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100Técnicas: Carga – Primeira etapa
Arquivo de marcação fixa PostgreSQL (DDM)
Esquema Temporário PDI Pentaho 01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100 01100001100110011100011100011000111000011100
Técnicas: Carga – Primeira etapa
A utilização de um Esquema Temporário (Data Staging Area) foi útil
para:
> Verificar, classificar, validar e filtrar os dos dados;
> Tratamento preliminar de alguns dados;
> Conferência do resultado da execução da importação;
> Garantir que a regra de negócio extraída dos programas Natural foi
interpretada e aplicada corretamente;
> Agilidade das verificações.
Técnicas: Transformação
CarregarBase
()
atualizaSituacaoAvisoCCL() atualizaSituacaoAvisoCSL() atualizaSituacaoAvisoEvento() trataResultadoCompraVencDisp() trataResultadoCompraDescMaterial() trataResultadoCompraDescServico() carregaCompraOriginal() carregaSubrogacao() carregaVersaoCompra() carregaAviso() carregaAvisoCompra() carregaAvisoEvento() carregaEdital_ccl() geraAnexoItemLegado() carregaItensVersoes() vinculaBeneficioItemLicitacao() carregaLocalEntrega() replicaItensParaVersaoSemItem() atualizaQuantidadeItensVersoes() carregaPedidoDispensaEletronica() carregaItemPedidoDispensaEletronica() atualizaQuantidadeItensPde() atualizaValorTotalItemPde() AtualizaValorTotalItemCsl() carregaGrupoPrecoGlobal() carregaGruposVersoes() carregaGrupoPrecoGlobalItemLicitacao() vinculaGrupoBeneficioTipoiii() atualizaPesquisaMercadoConsistente() carregaGruposVersoesIntermediarias() ... SIDEC (DDM) Esquema TemporárioTécnicas: Carga Final
SIDEC
Esquema Temporário Divulgação de ComprasEsquema Definitivo
Processo de Importação Individual
Carga de compras ou grupo de compras individuais.
> CarregarCompra(<chave da compra>)
> RecarregarCompra(<chave da compra>)
Processo utilizado em dois momentos:
> Testes específicos da aplicação
Processo de Importação Completa
Carga dos dados de todas as compras existentes no
esquema auxiliar.
> criarbase.sh
> carregar_ddm.sh
> carregar_ddm_erro.sh
> carregar_siasgnet.sh
> carregar_siasgnet_dc.sh
PDI + SHELL PSQL + SHELLInfraestrutura: Ambiente de Trabalho
Servidor 1
2 CPUs
4 GB Memória.
100 GB de HD
Servidor 2
1 CPU
3 GB Memória.
350 GB de HD
(disco lento)
Servidor 3
4 CPUs
8 GB Memória.
150 GB de HD
Primeiro ambiente Segundo AmbienteCarga do esquema Siasgnet em 2 min.
Infraestrutura: Ambiente de Trabalho
Sistemas Gerenciadores de Bancos de Dados são grandes
consumidores:
> Memória
> IO
> Processamento
OBS.:
Recursos Insuficientes
podem fazer com que você
melhore a qualidade de suas instruções e transações.
Infraestrutura:
Equipamentos X configurações
“Bons equipamentos” com “configurações inadequadas”
ocasionam alguns equívocos:
> Má impressão sobre a capacidade do SGBD
> Má impressão do funcionamento da aplicação
> Investimento em hardware desnecessário
OBS.:
Configuração Incorreta
pode fazer com que você
melhore a qualidade de suas instruções e transações.
Infraestrutura: Solução Tunning do SGBD
Servidor:
2 CPUs / 4 GB Memória. / 100 GB de HD
Principais características da demanda:
- Grande volume de inserts
- Tratamento de grande massa de dados
shared_buffer work_mem maintenance_work_mem wal_buffers fsync checkpoint_segments autovacuum 1 GB 32 MB 100 MB 2 MB OFF 10 ON Padrão Customizado 24 MB 1 MB 16 MB 64 kb ON 3 ON Parâmetro De 25% a 40% (alocação de blocos em m.) Order, merge, distinct...
Vacuum, create, alter...
Memória para LOG - possível recuperação Sincronismo entre WAL e Disco (Desenv!!!) Número máximo de arquivos de LOG
Execução automática do vaccum
Aplicação
Infraestrutura: Solução Tunning do Processo
Compra CCL CSL Versão Item Evento Aviso ... Compra CCL CSL Versão Item Evento Aviso ...Carga Individual Carga Completa
Os índices devem existir previamente.
Infraestrutura: Solução Tunning do Processo
Processo de Importação: Implementação
Administração do consumo de recursos do servidor.
Script Auxiliar (.sql) Begin; … Commit; Gerar bloco de instruções Executar blocos de instruções > Segmentação de etapas > Otimização da execução Config. ... ... ... Script Principal (.sh)
Processo de Importação: Implementação
Quanto menor a transação:
> menor será o consumo de recurso
> mais rápido será a execução
> * resultado menos acoplado
Quanto maior a transação:
> menor número de processos adicionais
> maior chance de acoplação
> * maior consumo de recurso
> * maior tempo de execução
> * maior complexidade no controle
> * maior complexidade na refação
> Siasgnet > ddm
Processo de Importação: Implementação
Carga completa 796.619 Compras Carga individual 200 compras 0,025 % > Excluir a compra > Verificar o erro > Tratar o original > Recarregar a compra Efetuar a carga completa e tratar erros individualmente (recarregar).Processo de Importação: Implementação
As funções foram escritas utilizando PL/PGSQL.
Percepções da linguagem:
> Recursividade
> Sobrecarga
> Cursores
> Tratamento de erros / Controle de Exceção
> SQL nativo da linguagem
> Fácil aprendizagem
> Ampla documentação
Administração do SGBD: Esquemas
Esquemas
dbd_42010_siasgnet
siasgnet siasgnet_dc siasgnet_sp siasgnet_irp ddm publicAdministração do SGBD: Catálogo do Sistema
pg_constraint pg_attribute
pg_namespace pg_class
Qualquer informação do SGBD pode ser adquirida através do catálogo. Esses dados podem ser importantes para automatizar e facilitar tarefas.
Execução do Processo
> O processo contemplou uma janela de tempo de 3 dias (final de semana). Tarefas envolvidas:
Extração Grande Porte...
07:00:00
Transferência dos arquivos...
02:53:00
Carga do esquema ddm...06:35:00
Carga do esquema siasgnet...00:02:44
Carga do esquema siasgnet_dc....22:00:00
TEMPO TOTAL:...
38:30:44
Execução do Processo
Onde efetuar a execução final?
Extração
PRODUÇÃO
Servidor
Aplic. Prod. BD prod.Servidor
Servidor 1
(Espaço HD) (disco rápido)Servidor 2 Qware Executar Executar Backup Restore 1 2 3 4 2 3 4 5 6
Execução do Processo
Ambiente de
DESENVOLVIMENTO PRODUÇÃOAmbiente de
SUPCD (BSA) SUPTI (CTA) 38 horas Suporte local
Total Acesso ao ambiente
30 horas
Suporte via SUPCD Acesso:
- leitura (via aplicação)
- alterações via solicitação / email
Execução do Processo
Ambiente de
DESENVOLVIMENTO PRODUÇÃOAmbiente de
SUPCD (BSA) SUPTI (CTA) 38 horas + 1 h (backup) Suporte local
Total Acesso ao ambiente
30 horas
Suporte via SUPCD Acesso:
- leitura (via aplicação)
- alterações via solicitação / email
Em desenvolvimento!
Principal motivação: fator surpresa.
Controle do Processo
GRUPO PROCESSO INÍCIO FIM TEMPO
1 CARGA: unidade_gestora 25/7 10:51 25/7 10:52 00:01:00
1 CARGA: compra_com_licitacao 25/7 10:52 25/7 10:58 00:06:04
1 CARGA: compra_sem_licitacao 25/7 10:58 25/7 11:18 00:20:29
1 CARGA: resultado_compra 25/7 11:18 25/7 15:07 03:49:09
2 tabela_cidades para Municipio 26/7 10:14 26/7 10:14 00:00:00
3 Compras originais 26/7 10:17 26/7 11:51 01:34:12
3 Subrogacao 26/7 11:51 26/7 11:51 00:00:00
3 Versoes das compras 26/7 11:52 26/7 12:14 00:22:49
...
O processo precisaria ser executado em uma determinada janela de
tempo. Isso motivou algumas questões:
> Qual o tempo para efetuar a carga completa?
> Qual o tempo para efetuar a carga de determinada etapa?
> Como podemos saber qual etapa do processo está sendo executada? > Quais etapas já foram concluídas?
> O que podemos otimizar?
Grupo 1: ddm
Números pós Implantação*
Importação do legado:
796.619 compras
6.421.550 itens
Compras novas (2 meses após implantação):
57.831 compras
498.897 itens
Média de 1.279 compras em dias úteis Pico de 1.617 compras em um único dia
Atualmente (08/2013 - BD com 64 GB):
Média de 850 compras por dia
Pico de 3.371 compras em um único dia
1.358.708 compras registradas até 01/08/2013 11.241.332 itens registrados até 01/08/2013