Se caso a lentidão ocorrer apenas com a utilização das procedures, devera inicialmente solicitar ao seu analista DBA, que efetue um acompanhamento do processamento da rotina, com a coleta do Profiler no banco de dados, afim de identificar se existe a possibilidade de criação de indices adicionais durante a coleta do profiler bem como solicitar que o mesmo valide as questão do ITEM 3 do boletim seguinte: É extremamente importante que seja avaliado os pontos pelo analista DBA, e encaminhado os dados de analise dos indices aplicaveis, e qual a manutenção realizada. Framework - Linha Protheus - Lentidão no Protheus 12
3. Manutenção 3.1. Fragmentação de Tabelas, SQL Server Verifique se há tabelas e index do banco de dados que estão desfragmentadas. A fragmentação das tabelas diminui a performance do banco de dados e da aplicação. Efetue a desfragmentação das tabelas e tablespaces do banco de dados da aplicação, com o objetivo de melhorar as operações de DML e DQL no banco de dados e aumentar a performance das rotinas do Protheus.
Um dos grandes problemas que temos com relação a performance é devido a fragmentação de nossos índices. Com o grande número de inserções, alterações e exclusões que ocorrem em nossas tabelas, os índices se fragmentam cada vez mais, ocasionando uma lentidão na manipulação dos dados desses índices.
Verifique se há índices pertencentes às tabelas da aplicação que estão fragmentados, pois quando estes índices estão fragmentados, diminui a performance da aplicação e do banco de dados. Neste caso realize o Rebuild dos índices das tabelas da aplicação.
3.2. Estatísticas do SQL Server: Verifique se as estatísticas das tabelas do banco de dados do Protheus estão atualizadas, pois com as estatísticas desatualizadas causa impacto na performance da aplicação. Caso esteja desatualizado, colete as estatísticas do schema e do dicionário de dados do banco de dados, com o objetivo de melhorar a performance.
Dois parâmetros existentes em bases SQL Server podem trazer efeitos de melhor experiência do Protheus:
Auto Update Statistics – configurada como True, as estatísticas de índice são automaticamente atualizadas.
Auto Create Statistics – configurada como True, as estatísticas de índice são automaticamente criadas, sempre que você criar um índice, na execução de cada instrução o SQL Server cria um conjunto de estatísticas sobre os dados contidos dentro do índice.
O otimizador de consulta utiliza essas estatísticas para determinar se ele deve ou não utilizar o índice para ajudar a processar a consulta, no caso do Protheus sabendo onde está alocado o dado o retorno será mais rápido.
Efetuar a manutenção da base de dados, realizando a reindexação e ou reconstrução de índices e atualização de estatísticas além de monitorar o espaço para crescimentos dos arquivos de dados e arquivos de log do banco de dados. Verifique também a consistência física e lógica da base de dados. Estes procedimentos são de responsabilidade do DBA da empresa, caso não possua DBA a equipe de consultoria da TOTVS poderá ser acionada para esta avaliação.
3.3. Coleta de Estatística do Oracle: O DataBase Oracle precisa de uma boa estatística para tomar as melhores decisões que puder quanto ao caminho de acesso mais apropriado. Sem nenhuma estatística, o DataBase deve fazer suposições sobre quais são os melhores caminhos de acesso ao dado. Em muitos casos, conduz o DataBase a escolher caminhos menos performáticos. As estatísticas que são reunidas incluem estatísticas sobre tabelas, número de linhas, número de blocos, estatísticas sobre colunas, número de valores distintos, número de NULLs e distribuição de dados, estatísticas sobre índex, número de blocos, tamanho do index, fator cluster, e estatísticas sobre desempenho de Sistema. Há dois métodos utilizados para a coleta de estatísticas: o comando analyze e o pacote fornecido dbms_stats.
O Método dbms_stats é o mais utilizado para calcular estatísticas para o database, porém em versões futuras, o pacote dbms_stats será a única maneira de calcular estatísticas. Vale ressaltar que o método dbms_stats é o que recomendamos o seu uso, através dos scripts abaixo:
Método gather_schema_stats O gather_schema_stats calcula as estatísticas para todos os objetos em um dado esquema. As estatísticas podem ser colocadas no dicionário de dados ou na tabela de estatísticas de um usuário.
Recomendamos o uso do script abaixo.
Recomendamos o uso da coleta de estatística do dicionário do database e do owner que se encontra os dados do Protheus.
exec sys.dbms_stats.gather_dictionary_stats (comp_id => null, estimate_percent => null, method_opt => 'FOR ALL COLUMNS size AUTO', degree => 2, cascade => TRUE,no_invalidate => true);
execsys.dbms_stats.gather_schema_stats('PROTHEUS',CASCADE=>TRUE,METHOD_OPT=>'FOR ALL INDEXED COLUMNS');
Links Uteis: Como gerar o Trace para monitor a performance de Stored Procedures SQL Server Como gerar o Trace para monitor a performance de Stored Procedures Oracle (TKPROF) |