Estou com problema de performance em minha aplicação, quando utilizo tabelas com mais de 30.000 registros. Esta levando +/- 2 minutos para carregar o o datatable. Estou utilizando JSf 2 com mysql. Até 15.000 registro a performance é muito boa. Alguma dica ? Abaixo minha query e o .ini do meu mysql (estou avaliando para alterar para aumentar o consumo de memoria).
publicList<Participante>getAllParticipantes(intidEmpresa){
returngetList(Participante.class,"select particip "+"from Participante particip, Empresa emp "+"where particip.empresa = emp and emp.id = ?1 and "+"(particip.deletado != 'S' or particip.deletado is null) ",idEmpresa);}
[client]port=3306[mysql]default-character-set=latin1[mysqld]port=3306basedir="C:/Program Files (x86)/MySQL/MySQL Server 5.1/"datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"character-set-server=latin1default-storage-engine=INNODBsql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"max_connections=100query_cache_size=0table_cache=256tmp_table_size=35Mthread_cache_size=8myisam_max_sort_file_size=100Gmyisam_sort_buffer_size=69Mkey_buffer_size=55Mread_buffer_size=64Kread_rnd_buffer_size=256Ksort_buffer_size=256Kinnodb_additional_mem_pool_size=3Minnodb_flush_log_at_trx_commit=1innodb_log_buffer_size=2Minnodb_buffer_pool_size=107Minnodb_log_file_size=54Minnodb_thread_concurrency=10
Esta lenta a execução da query (em um client mysql por ex.) ou para a aplicação executar e carregar os objetos?
C
cristianoassis
Opá Mikhas, para carregar os objetos. A demora é somente na primeira carga, depois que a lista esta preenchida a performance é tranquila com os 30.000 registros.
Obrigado.
M
Mikhas
Bem, não sei a natureza do seu sistema, mas talvez você possa fazer um pre-caching da entidade Participante quando seu sistema subir. Alguma configuração de caching na sua aplicação também pode ajudar.
Isso considerando que se vc executar um sql equivalente, a performance será satisfatória.
R
rock
cristianoassis, carregar tudo isto para a memória pode ser pesado mesmo. Já verificou o tempo que a consulta está levando?
:idea: minha sugestão é fazer paginação dos resultados.
C
cristianoassis
Legal,
Verifiquei que existe o componente datatable lazymodel do primefaces, que parece que vai me atender. So não sei ainda como implementar.
Obrigado.
H
Hebert_Coelho
cristianoassis:
Legal,
Verifiquei que existe o componente datatable lazymodel do primefaces, que parece que vai me atender. So não sei ainda como implementar.
Uma dúvida, eu consigo implementar essa mesma solução para o
p:selectOneMenu
? Pois nesse também preciso carregar os +/- 30.000
E
ErickRAR
Cara, acho que ninguém procuraria algo em um selectOneMenu com 30mil registros. Já pensou em usar o autoComplete do primefaces?
C
cristianoassis
Rs…Entendi, vou testar.
Obrigado
C
cristianoassis
Como devo passar por parâmetros os atributos “setFirstResult” e setMaxResults" na query abaixo ?
publicList<Participante>getAllParticipantes(intidEmpresa){returngetList(Participante.class,"select particip "+"from Participante particip, Empresa emp "+"where particip.empresa = emp and emp.id = ?1 and "+"(particip.deletado != 'S' or particip.deletado is null) ",idEmpresa);
}
Consegui implementar a solução numa boa. Ficou super rápido a carga no “p:dataTable”. O único problema esta sendo quando seleciono a linha para editar ou remover o registro. Fica super lento. Alguém tem alguma dica ?
<p:dataTableid="tbl"var="item"value="#{participanteFace.participantes}"selection="#{participanteFace.selectedLinha}"selectionMode="single"paginator="true"rows="10"paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"rowsPerPageTemplate="5,10,15"emptyMessage="Não há registros a exibir"rowStyleClass="#{empty rowIx or rowIx mod 2 ne 0 ? 'even-row' : 'odd-row'}"rowIndexVar="rowIx"style="font-size: 11px; background-color: lightblue"><f:facetname="header">Listadeparticipantes</f:facet><p:columnsortBy="#{item.codigo}"filterBy="#{item.codigo}"><f:facetname="header"><h:outputTextvalue="Codigo"/></f:facet><h:outputTextvalue="#{item.codigo}"/></p:column><p:columnsortBy="#{item.nomefantasia}"filterBy="#{item.nomefantasia}"><f:facetname="header"><h:outputTextvalue="Nome Fantasia"/></f:facet><h:outputTextvalue="#{item.nomefantasia}"/></p:column><p:columnsortBy="#{item.razaosocial}"filterBy="#{item.razaosocial}"><f:facetname="header"><h:outputTextvalue="Razão Social"/></f:facet><h:outputTextvalue="#{item.razaosocial}"/></p:column><p:columnsortBy="#{item.matriz.nomefantasia}"filterBy="#{item.matriz.nomefantasia}"><f:facetname="header"><h:outputTextvalue="Matriz"/></f:facet><h:outputTextvalue="#{item.matriz.nomefantasia}"/></p:column><p:columnsortBy="#{item.tipo}"filterBy="#{item.tipo}"><f:facetname="header"><h:outputTextvalue="Tipo"/></f:facet><h:outputTextvalue="#{item.tipo}"/></p:column><p:columnstyle="width:90px"><f:facetname="header"><h:outputTextvalue="Ação"/></f:facet><h:commandLinktitle="Editar registro"action="#{participanteFace.doEditParticipante()}"id="bt_editar"><p:graphicImagetitle="Editar registro"value="#{pageContext.servletContext.contextPath}/resources/imagens/editar.png"width="20"height="20"alt="Editar registro"/><f:setPropertyActionListenertarget="#{participanteFace.selectedLinha}"value="#{item}"/></h:commandLink> <h:commandLinktitle="Consultar registro"action="#{participanteFace.doViewParticipante()}"id="bt_view"><p:graphicImagetitle="Consultar registro"value="#{pageContext.servletContext.contextPath}/resources/imagens/detalhar.png"width="20"height="20"alt="Consultar registro"/><f:setPropertyActionListenertarget="#{participanteFace.selectedLinha}"value="#{item}"/></h:commandLink> <h:commandLinktitle="Remover registro"action="#{participanteFace.doRemoveParticipante()}"id="bt_excluir"onclick="return confirm('Confirme eliminação ?');"><p:graphicImagetitle="Remover registro"value="#{pageContext.servletContext.contextPath}/resources/imagens/excluir.png"width="20"height="20"alt="Remover registro"/><f:setPropertyActionListenertarget="#{participanteFace.selectedLinha}"value="#{item}"/></h:commandLink></p:column></p:dataTable>
Obrigado !
C
cristianoassis
Resolvido! O problema estava em outra lista também com muitos dados. Substitui para lazyload e ficou ótimo!