TOTVS Protheus - Analisando e eliminando sujeira do banco de dados Protheus
No ERP Protheus assim como em qualquer outra aplicação, podem existir processos automáticos que ao serem executados criam diversos tipos de objetos no banco de dados, como por exemplo tabelas temporárias, stored procedures temporárias, geração de registros de logs etc. Isso é algo absolutamente normal, desde que o sistema faça de forma automática a limpeza daquilo que é considerado temporário. Mas nem sempre é assim, podem haver falhas ou não, e por diversas razões esses objetos temporários podem estar se acumulando em sua base de dados.
Neste artigo iremos analisar quatro situações que podem estar consumindo espaço desnecessária em seu banco de dados, e dependendo do ponto de vista do leitor isso pode ser considerado sujeira ou talvez não.
Analisando as tabelas temporárias SP
Vamos começar consultando as tabelas de catálogo do SQL Server através do script da lista 1 e verificar quais tabelas não possuem uma nomenclatura padrão (TTTEEE). Iremos buscar pelas tabelas que tem a sigla SP, que armazenam dados temporários e que são carregados a partir da execução de stored procedure padrão do ERP Protheus.
-- Analisando espaço em disco consumido pelas tabelas temporárias SP
select
tab.name as Tabela,
par.rows as 'Quantidade de Linhas',
SUM(alu.total_pages) * 8 / 1000 AS 'Espaco em MB'
from sys.schemas as sch, sys.tables as tab, sys.indexes ind,
sys.partitions as par ,sys.allocation_units as alu
where
sch.schema_id = tab.schema_id
and tab.object_id = ind.object_id
and sch.schema_id = 1 -- dbo
and ind.object_id = par.object_id
and ind.index_id = par.index_id
and par.partition_id = alu.container_id
and LEN(tab.name) > 6 AND tab.name LIKE '%SP'
group by tab.name, par.rows
order by 'Espaco em MB' desc, Tabela
LISTA 1 Script para verificar quantidade de linhas e consumo de espaço
Veja a seguir que localizamos 33 tabelas temporárias.
Tabela Linhas Espaco em MB
-------------------- -------------------- --------------------
TRW010_SP 681825 1104
TRB01SP 159160 145
TRB40SP 2660 5
TRW400_SP 1857 3
TRB010_SP 0 1
TRW060_SP 383 1
TRA010_SP 0 0
TRA01SP 0 0
TRA40SP 0 0
TRA900_SP 0 0
TRB900_SP 0 0
TRC010_SP 0 0
TRC01SP 0 0
TRC400_SP 0 0
TRC40SP 0 0
TRD010_SP 11 0
TRD01SP 11 0
TRD40SP 1 0
TRD900_SP 0 0
TRJ010_SP 0 0
TRJ400_SP 0 0
TRK010_SP 0 0
TRK400_SP 0 0
TRT010_SP 0 0
TRT01SP 0 0
TRT40SP 0 0
TRT900_SP 0 0
TRW900_SP 0 0
TRW910_SP 0 0
TRX010_SP 308 0
TRX01SP 734 0
TRX40SP 96 0
TRX900_SP 0 0
(33 rows affected)
LISTA 2 Resultado com a lista de tabelas temporárias SPA primeira tabela da lista 2, a TRW010_SP, chama bastante atenção pois no prazo de aproximadamente 8 meses já tem acumulado mais de 1GB de dados temporárias. Quase parecido com período de gestação, não é mesmo? rsrs
Observe logo abaixo os scripts das listas 3 e 4. Eles mostram que por algum motivo não houve a limpeza de forma automática, pelo menos até o momento em que escrevo este artigo. Inclusive a versão do Protheus utilizada neste teste foi a 12.1.25.
-- Verificando período inicial e final dos dados temporários
SELECT MIN(CT2_DATA) MenorData, MAX(CT2_DATA) MaiorData FROM TRW010_SP
LISTA 3 Script verificando o período dos dados acumulados
MenorData MaiorData
--------- ---------
20200201 20201027
(1 row affected)
LISTA 4 Resultado mostrando o período existente - de 01/02/20 até 27/10/20
Em resumo tabela TRW010_SP é usada por uma stored procedure quando ocorre as atualizações nos saldos contábeis, por isso ela carrega o conteúdo da tabela CT2.
E a tabela TRB01SP é atualizada a cada execução do recálculo do custo médio, ela mostra como os produtos foram ordenados ao executar a rotina.
O resultado dessa primeira análise nos mostra um pouco mais de 1GB de espaço usado para guardar apenas dados temporários. Vale ressaltar que esses dados são referente a um período de apenas 8 meses. Imagine o resultado caso nunca tenha executado um processo limpeza. No próximo tópico vamos analisar outras tabelas.
Analisando as tabelas temporárias H_ e H010_
Aqui temos mais um conjunto de tabelas temporárias que são gerados por rotinas do módulo estoque (H) e fiscal (H010), mas nem sempre são limpadas de forma automática. No entanto observei que os dados não se acumulam, diferente da situação mostrada anteriormente. O total de espaço acumulado por estes dados não foi nada significativo, porém ficam apenas poluindo o banco, caso queira considerar assim.
Tabela Linhas Espaco em MB
-------------------- -------------------- --------------------
H_2018123101_01 1 0
H_2018123101_03 60 0
H_2018123101_08 1 0
H_2018123101_09 70 0
H_2018123101_12 54 0
H_2018123101_13 40 0
H_2018123101_14 18 0
H_2019123101_01 1 0
H_2019123101_03 61 0
H_2019123101_08 150 0
H_2019123101_09 79 0
H_2019123101_12 50 0
H_2019123101_13 39 0
H_2019123101_14 19 0
H010_SC016200 142 0
H010_SC065010 54 0
H010_SC742720 40 0
H010_SC755320 142 0
H010_SC759910 427 0
H010_SC808630 60 0
H010_SC814970 94 0
H010_SC815760 1 0
H010_SC816640 1 0
H010_SCARVKR0 1 0
H010_SCAUM110 70 0
H010_SCBATT30 39 0
H010_SCBATWG0 39 0
H010_SCBBAMM0 132 0
H010_SCBBBJ50 132 0
H010_SCBBDDS0 61 0
H010_SCBBZCR0 50 0
H010_SCBHCGQ0 19 0
H010_SCBHEZP0 79 0
H010_SCBIKUV0 421 0
(34 rows affected)
LISTA 5: Tabelas temporárias H e H010_
As tabelas com a nomenclatura H010_ podem ser um problema pois a cada execução é gerado uma nova tabela que vai se acumulando no banco.
Analisando a tabela CTK
A tabela CTK é bastante conhecida e também documentada no TDN. Essa tabela armazena dados de forma redundante quando a rotina de contabilização é executada.
A tabela oficial que armazena os dados de contabilização é a CT2. No entanto quando o usuário executa a rotina de contabilização, o sistema gera uma cópia inicial de cada registro na tabela CTK (Contra prova) e depois envia para CT2.
A tabela CT2 é uma das maiores tabelas do banco de dados Protheus pelo fato consolidar todas as movimentações contábeis (vendas, compras, estoque, financeiro, folha e etc.) de uma organização.
Se a sua tabela CT2 possui por exemplo 400GB, então simplesmente multiplique por dois. Na verdade você possui é 800GB.
Segundo a própria TOTVS os registros da tabela CTK podem ser totalmente excluídos após efetivação dos lançamentos conforme informado neste link.
Portanto deve-se analisar se realmente é necessário manter os dados na CTK.
Analisando tabelas com registros D_E_L_E_T_ = '*'
Já parou para analisar quantos registros deletados você tem na CT2? É sempre importante analisar também este ponto e verificar primeiramente se é realmente necessário manter o histórico de registros deletados. Se sua empresa utiliza para fins de auditoria ou algum tipo de análise estatística, então não a nada o que se fazer.
Entretanto é importante determinar quais tabelas podem passar por um processo de limpeza dos registros d_e_l_e_t_ = '*', pois nem todas as tabelas podem fazer sentido manter esses registros.
A quem diz que em banco de dados nada pode ser excluído. Mas imagine que o usuário configurou um lançamento padrão (LP) e após contabilizar 10 lançamentos de forma automática descobriu que o histórico estava errado, em seguida alterou a LP, excluiu os lançamentos e refez os lançamentos com o histórico correto. Nesse cenário o sistema manteve 20 registros, porém 10 registros com o status de excluído. Aí vem a pergunta, até que ponto deve-se manter esses registros e por que? Novamente a reposta é simples, depende, pois não existe certo e nem errado.
Na verdade vai depender do seu cenário, se é necessário então mantenha os dados, caso contrário pode-se criar rotinas automáticas em seu SGBD para fazer a limpeza deixando por exemplo apenas os últimos 3 meses.
Considerações
Um dos objetivos aqui foi apenas abordar questões referente ao armazenamento de dados temporários gerados por rotinas padrões do ERP Protheus. Vimos que algumas tabelas em um curto espaço de tempo superam a marca de 1GB de espaço em disco e essa situação varia de empresa para empresa.
De forma geral a eliminação de dados temporários pode significar uma redução considerável de espaço. Mas cada empresa pode tratar essas questões de forma diferente.
O título deste artigo pode parecer polêmico, entretanto foi analisado apenas alguns detalhes sobre o assunto e conforme já mencionei não existe certo ou errado. O importante é analisar e questionar determinadas situações e compreender os motivos, muitas vezes você esta guardando dados temporários devido a erros de software. Por essa razão considero importante este tipo de análise.
Deixe seu comentário e até a próxima!
Comentários
Postar um comentário