Requisito/Story/Issue (informe o requisito relacionado) :
DSERTSS3-2330
02. SITUAÇÃO/REQUISITO
Durante testes de carga na solução TOTVS Transmite, foi verificado que as paginações das grids, para todos os documentos, quebra por causa de uma exceção em código. Em análise, foi identificado
...
que quando uma ordenação é solicitada ao MongoDB ocorre um estouro de memória da área destinada a tal operação, pelo alto número de registros a tratar. Inclusive, foi possível reproduzir localmente o problema, através de script, confeccionado também pelo analista Johnny. Dado o cenário, foi solicitado que:
Executássemos o script para reprodução do cenário problema localmente;
Verificássemos a forma como a consulta atual ocorre;
Executássemos a mesma consulta diretamente no MongoDB.
A partir do que fosse levantado, propor solução para o cenário.
03. SOLUÇÃO
Após análise solicitada em cenário problema, foi constatado que em código e diretamente no banco, o resultado era o mesmo; ou seja, o estouro de memória ocorria de qualquer forma. Tendo isso em mente, o próximo passo foi consultar o comportamento do MongoDB com consultas que demandam ordenação e no artigo https://pavneetkaur27.medium.com/mongodb-best-practices-for-performing-sorting-e7001f1f503f, foi constatado que a priori, todas as operações de ordenação deste banco de dados ocorrem em memória, o que justifica a exceção recebida e evidencia o cenário problema. Neste mesmo artigo, foi identificado uma possível solução, a aplicação de índices compostos para auxiliar as operações de ordenação.
Partindo desta possibilidade, novos testes foram realizados e se constatou que de fato, utilizando-se índices compostos a exceção não ocorre, melhorando inclusive a performance das paginações. Munidos desta afirmativa, foi elaborada a seguinte solução para o cenário problema:
Aplicação de índice composto para auxilio de ordenação em todas as collections de documentos do sistema;
Esta aplicação ocorreu por meio de script rodado manual em bases de desenvolvimento, staging e produção;
Intervenção em código, para que os mesmos índices sejam criados de maneira automática para novos clientes, posteriores a aplicação do script manualmente executado nos ambientes.