Repository: interlegis/sapl

Issue:
Acesso lento à tela de pesquisa de Documentos administrativos
A partir da release 3.1.102, a tela de pesquisa de documentos administrativos está demorando demais para ser acessada. E a cada nova busca, na opção "Fazer Nova Pesquisa", a demora se repete.


Discussion:
Nenhum commit depois da versão 3.1.102 sequer toca em nada referente a documentos administrativos. :thinking: 

1. qual a versão que vcs estão usando? 
2. Execute o comando `sudo docker stats` na máquina host dos containers e poste aqui a saída;
3. Entre dentro do container do sapl (sapl_sapl_1) e dê um cat no arquivo start.sh. Verifique se essa linha aqui https://github.com/interlegis/sapl/blob/3.1.x/start.sh#L52 também está comentada no arquivo de mesmo nome dentro do container.
4. Ainda dentro do container faça um cat no arquivo settings.py e veja se está linha aqui https://github.com/interlegis/sapl/blob/3.1.x/sapl/settings.py#L100 também está igual;

Por fim, teria alguma forma de fazermos SSH daqui para o host dessa máquina onde estão os containeres?


Acho que a questão envolve alterações entre os releases 3.1.101 e 3.1.102, porque voltei para o 3.1.101 e passou a funcionar melhor.

1. estávamos usando a versão 3.1.104, mas voltamos ao 3.1.101;

2. sudo docker stats (com 3.1.104 e acessando pesquisa aos Documentos Administrativos):
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT    MEM %               NET I/O             BLOCK I/O           PIDS
22557a26dc3c        sapl31_sapl_1       99.62%              443.7MiB / 1.95GiB   22.23%              7.36MB / 1.18MB     28.7kB / 4.1kB      7
5def5b79021c        sapl31_sapldb_1     0.02%               27.89MiB / 1.95GiB   1.40%               45.9MB / 189MB      141MB / 2.79GB      8

3. A linha em questão está comentada; não executa o rebuild_index.
Quantos documentos administrativos vcs possuem?

Poderia disponibilizar um dump da tua base de dados para testarmos aqui?
Temos cerca de 22000 doc administrativos.
Só o dump do banco é suficiente ou achas que precisa também os arquivos do volume do Docker? Os arquivos é possível, mas a base tem em torno de 15G, e precisaríamos preparar um modo de disponibilizar isso para download.
Preciso somente do dump de banco. Essa pesquisa não vai nos documentos no file system.

Fiz testes hoje a tarde e as pesquisas de Agudo retornam em 10ms na versão 3.1.104, mas é uma parcela ínfima do que vcs tem aí. Eu encontrei um commit posterior ao 3.1.101 que pode ter afetado o desempenho da consulta, mas preciso usar mais dados e tentar reproduzir por aqui.

Resolving patch:
diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py
--- a/sapl/protocoloadm/views.py
+++ b/sapl/protocoloadm/views.py
@@ -550,9 +550,16 @@ def get_filterset_kwargs(self, filterset_class):
 
         qs = self.get_queryset()
 
+        qs = qs.prefetch_related("documentoacessorioadministrativo_set",
+                                 "tramitacaoadministrativo_set",
+                                 "tipo",
+                                 "tramitacaoadministrativo_set__status",
+                                 "tramitacaoadministrativo_set__unidade_tramitacao_local",
+                                 "tramitacaoadministrativo_set__unidade_tramitacao_destino")
+
         if status_tramitacao and unidade_destino:
             lista = filtra_tramitacao_adm_destino_and_status(status_tramitacao,
-                                                         unidade_destino)
+                                                             unidade_destino)
             qs = qs.filter(id__in=lista).distinct()
 
         elif status_tramitacao:
@@ -566,11 +573,6 @@ def get_filterset_kwargs(self, filterset_class):
         if 'o' in self.request.GET and not self.request.GET['o']:
             qs = qs.order_by('-ano', '-numero')
 
-        qs = qs.prefetch_related("documentoacessorioadministrativo_set",
-                                 "tramitacaoadministrativo_set",
-                                 "tramitacaoadministrativo_set__status",
-                                 "tramitacaoadministrativo_set__unidade_tramitacao_local",
-                                 "tramitacaoadministrativo_set__unidade_tramitacao_destino")
 
         kwargs.update({
             'queryset': qs,
@@ -607,10 +609,10 @@ def get(self, request, *args, **kwargs):
 
         self.filterset.form.fields['o'].label = _('Ordenação')
 
+        length = self.object_list.count()
         context = self.get_context_data(filter=self.filterset,
-                                        object_list=self.object_list,
                                         filter_url=url,
-                                        numero_res=len(self.object_list)
+                                        numero_res=length
                                         )
 
         context['show_results'] = show_results_filter_set(


Test patch: