Título da Apresentação O Ambiente IntegraçãoSPED Palestrante: EDSON IE 00/00/0000
O SPED O SPED (SISTEMA PÚBLICO DE ESCRITURAÇÃO DIGITAL), foi instituído pelo Decreto nº 6.022, de 22 de janeiro de 2007, e está sob responsabilidade do SERPRO.
O SPED O Projeto NF-e tem como objetivo a implantação de um modelo nacional de documento fiscal eletrônico que venha substituir a sistemática atual de emissão do documento fiscal em papel
O SPED Motivações: redução de custos com impressão, armazenagem e aquisição de papel redução de erros de escrituração redução de custos de envio de documentos fiscais
O SPED Nota Fiscal Eletrônica (NFe) Escrituração Digital Contábil (ECD) Escrituração Fiscal Digital (EFD)
IntegraçãoSPED O sistema IntegraçãoSPED tem a função de extrair informações sobre notas fiscais eletrônicas (NFe) e escriturações fiscais digitais (EFD) e gerenciar o processo de transformação dos dados para atender aos requisitos do data warehouse do sistema SPED (DW-SPED).
IntegraçãoSPED A aplicação IntegracaoSPED foi concebida para realizar o processo de extração, transformação e carga (ETL) dos documentos eletrônicos contidos no sistema SPED.
IntegraçãoSPED Promove a integração dos vários temas de documentos eletrônicos que compõem o sistema SPED, com capacidade de gerar insumos de cunho gerencial, estudos administrativos tributários, análises de auditoria fiscal, dentre outros.
IntegraçãoSPED O desenvolvimento tecnológico do Sped é feito na Regional do Serpro em Belo Horizonte. O IntegraçãoSPED foi implementado utilizando o framework Demoiselle, desenvolvido pelo SERPRO. Foi desenvolvido de forma a funcionar nos servidores de aplicação Apache TomCat.
IntegraçãoSPED Seguindo as diretrizes estabelecidas no SERPRO de uso de plataformas tecnológicas com padrões abertos e software livre, iniciou-se a implantação, no ambiente SPED, de novas tecnologias.
Modo operacional (crédito: M. Carrijo)
A adoção no uso de dois SGBD Postgres se deu ao observar que o processo de extração e agregação quando ativados simultaneamente degradavam o desempenho dos processos e comprometia todo os recursos de máquina.
Servidor de Extração - utilizado para armazenar as informações das NFe e das EFD. Servidor de Agregação - utilizado para gerar as informações consolidadas, de forma temporária, a partir dos dados contidos no servidor de Extração.
STG1 COPY dblink STG2
Hardware inicial IBM Power Plataforma RISC 64 bits
Software Red Hat Enterprise Linux PPC PostgreSQL 8.4
Volume de dados São armazenados cerca de 180 milhões de NFe por mês. Recebimento de 2500 EFDs por hora. Uma única EFD quando lida e gravada no Postgres pode gerar um número superior a 30 milhões de registros.
Volume de dados Existem partições de tabelas de dados com valores superiores a 1.000.000.000 de registros A base de dados ocupa entre 20TB e 28TB de dados.
Particionamento Particionamento horizontal de tabelas Particionamento de tabelas baseado em características dos registros (data range, ID, etc.) Permite dividir tabelas factuais (ou dimensões) Podemos colocar partições em tablespaces diferentes
Particionamento O particionamento de tabelas deve usar critérios que facilitem a pesquisa dos dados e permitam a exclusão ou limpeza da partição, evitando qualquer tipo de vínculo que possa comprometer a base de dados.
Particionamento No caso da NF-e, foi adotada a divisão ano/mês, ou seja, para cada mês do ano existirá uma tabela específica.
Particionamento Modelo simplificado do particionamento (crédito: M. Carrijo)
Particionamento No arquivo postgresql.conf: constraint_exclusion = partition
Distribuição dos dados Criação de Tablespaces: TableSpaces de dados Não Voláteis; TableSpaces de Indices; TableSpaces de dados Voláteis; TableSpaces de Indices Voláteis.
Distribuição dos dados Tablespaces em discos diferentes melhora o gerenciamento do espaço em disco facilita o expurgo de dados antigos.
Hibernate Não permitir que frameworks especializados em persistências de dados, como, por exemplo, o Hibernate, possa fazer uso de consultas automatizadas em tabelas de dados com elevado número de registros
Prepared Statments Adotar o uso de consultas ou instruções SQL de inserção de forma pré-compilada, através do uso de Prepared Statments, para o maior número possível de processos repetitivos
Relacionamentos As tabelas que compõem o STG1 não possuem relacionamento entre si, ou seja, não existe o uso de restrições ou CONSTRAINTS por meio de chaves estrangeiras entre as tabelas.
AUTOVACUUM autovacuum = on Configurações individuais de autovacuum por tabela Fillfactor também configurado por tabela
Controle de concorrência A forma de atuação do bloqueio pessimista é amplamente conhecido através do uso da sintaxe SELECT FOR UPDATE.
Migração Um único servidor para extração e agregação arquitetura x86 128GB RAM 32 cores
Migração Foi planejado então a unificação dos dois bancos em um único. Elimina-se transferência de dados de um servidor a outro. Upgrade para PostgreSQL 9.2
Migração O PostgreSQL foi compilado a partir dos fontes./configure --with-perl --with-python --with-segsize=4 --with-blocksize=32
Migração Transferência dos dados não é possível copiar os datafiles (arquiteturas diferentes). pg_dump não era viável
Migração Transferência dos dados: psql -h servidor_antigo -c COPY (SELECT...) BINARY psql -c COPY tabela1 from STDIN BINARY
Migração Alteração da estrutura de várias tabelas. Processos longos de agregação foram divididos em processos menores. Apenas pequenas modificações nas aplicações Maior parte do trabalho consistiu de alteração em stored procedures no banco.
Migração Unlogged tables Ext3 XFS Criação de índices condicionais Index-only scans
Checkpoint checkpoint_segments= 1200 checkpoint_timeout = 5min Checkpoints ocorrem, em média, a cada 4 ou 5 minutos
Shared buffers shared_buffers = 4GB Valores maiores não garantem melhor desempenho, pelo contrário.
Shared buffers work_mem Valor default baixo Para consultas maiores, é ajustado o valor de work_mem para a sessão.
Homologação O sistema novo ficou trabalhando em paralelo com o antigo e os resultados foram sendo comparados.
Homologação Após todos os procedimentos serem certificados no sistema novo, o antigo foi desativado.
Backup Backup inicial full Backups incrementais Gravação em pool de disco Arquivamento de logs de transação
Próximos passos Nota Fiscal Consumidor Integração com mais sistemas Aumento da retenção dos dados no PostgreSQL
Dúvidas?? edson.ie@serpro.gov.br