Biblioteca 1.45.0.0

De MSTECH wiki
Revisão de 17h24min de 19 de julho de 2016 por Daniel.alves (Discussão | contribs) (Análise do teste)

Ir para: navegação, pesquisa

Sistemas Verificados

  • Biblioteca, versão 1.45.0.0

Verificação de Segurança

Em verificação.


Verificação de Desempenho

Observação do teste

Para a execução dos testes foram utilizados:

  • 1 Servidor de banco de dados.
  • 2 Servidores web.
  • 2 Test Agent

Durante os testes foi observada a necessidade da execução de uma bateria de testes funcionais no sistema, devido a bugs encontrados na construção do cenários de testes, sendo que alguns deles impediam a utilização do sistema.

A equipe responsável atualmente pelo projeto atualizou o ambiente de teste e o de demonstração, devido aos mesmos estarem com versões legadas.

Análise do teste

O sistema realiza um série que requisições que ficam salvas no log do ARR, consumindo assim uma grande quantidade do disco, chegando a utilizar mais de 50% do disco com menos de 550 usuários. Devido a quantidade de resquest, em geral muitos gets para um post, resultam em um arquivo muito grande não possibilitando a leitura do mesmo.

A média de fila em disco entra-se dentro do aconselhado. O tempo médio de resposta das requisições manteve-se no limite estabelecido, exceto ao ser utilizado por 350 usuários e o request para incluir um novo exemplar.

Durante os testes ocorreram erros na 'ddlBiblioteca', tblAuxiliar, deadlock nas movimentações e timeout. O timeout ocorre durante as movimentações do sistema e na tela de reserva, os requests relacionados a mesma não ficam presos em loop no ARR e nos servidores web. Devido a quantidade de erros não foi possível continuar a realizar os teste.

Abaixo seguem alguns dos logs de erros:

  • Deadlock
Exception Type: System.Data.SqlClient.SqlException
Exception: Transaction (Process ID 207) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Source: .Net SqlClient Data Provider
Stack Trace: 
  at MSTech.Data.Common.TalkDBTransaction.setError(Exception err)
  at MSTech.Data.Common.TalkDBTransaction.QuerySelect(DbCommand cmd)
  at MSTech.Data.Common.QuerySelect.Execute()
  at MSTech.Biblioteca.DAL.BIB_MovimentacaoDAO.GetSelectDataSuspensaoByLeitor(Guid pes_id, Int32 bib_id, Int32 valorParametro, Int32& totalRecords) in d:\b\Biblioteca\Biblioteca_Main.Minor\src\Biblioteca\Main\Src\MSTech.GestaoEscolar.DAL\BIB_MovimentacaoDAO.cs:line 854
  at MSTech.Biblioteca.BLL.BIB_MovimentacaoBO.GetSelectDataSuspensaoByLeitor(Guid pes_id, Int32 bib_id) in d:\b\Biblioteca\Biblioteca_Main.Minor\src\Biblioteca\Main\Src\MSTech.GestaoEscolar.BLL\BIB_MovimentacaoBO.cs:line 1946
  at Movimentacao_Devolucao_Cadastro.CarregaGrid() in d:\b\Biblioteca\Biblioteca_Main.Minor\src\Biblioteca\Main\Src\Biblioteca\Movimentacao\Devolucao\Cadastro.aspx.cs:line 792
  at Movimentacao_Devolucao_Cadastro.UCComboBiblioteca__IndexChanged() in d:\b\Biblioteca\Biblioteca_Main.Minor\src\Biblioteca\Main\Src\Biblioteca\Movimentacao\Devolucao\Cadastro.aspx.cs:line 1497
\r\n


  • Erro dllBiblioteca
Exception Type: System.ArgumentOutOfRangeException
Exception: 'ddlBiblioteca' has a SelectedValue which is invalid because it does not exist in the list of items.
Parameter name: value
Source: System.Web
Stack Trace: 
  at System.Web.UI.WebControls.ListControl.set_SelectedValue(String value)
  at Movimentacao_Devolucao_Cadastro._RetornaMatricula(Guid pes_id) in d:\b\Biblioteca\Biblioteca_Main.Minor\src\Biblioteca\Main\Src\Biblioteca\Movimentacao\Devolucao\Cadastro.aspx.cs:line 1556
\r\n


  • Erro tblAuxiliar
Exception Type: System.Data.SqlClient.SqlException
Exception: Cannot drop the table '#tblAuxiliar', because it does not exist or you do not have permission.
Source: .Net SqlClient Data Provider
Stack Trace: 
  at MSTech.Data.Common.TalkDBTransaction.setError(Exception err)
  at MSTech.Data.Common.TalkDBTransaction.QuerySelect(DbCommand cmd)
  at MSTech.Data.Common.QuerySelect.Execute()
  at MSTech.Biblioteca.DAL.BIB_MovimentacaoDAO.GetSelectDataSuspensaoByLeitor_lista(Guid pes_id, Int32 bib_id, Int32 valorParametro, Int32& totalRecords) in d:\b\Biblioteca\Biblioteca_Main.Minor\src\Biblioteca\Main\Src\MSTech.GestaoEscolar.DAL\BIB_MovimentacaoDAO.cs:line 2294
  at MSTech.Biblioteca.BLL.BIB_MovimentacaoBO.GetSelectDataSuspensaoByLeitor_lista(Guid pes_id, Int32 bib_id, Guid ent_id) in d:\b\Biblioteca\Biblioteca_Main.Minor\src\Biblioteca\Main\Src\MSTech.GestaoEscolar.BLL\BIB_MovimentacaoBO.cs:line 1980
  at MSTech.Biblioteca.BLL.BIB_MovimentacaoBO.usuarioSuspensoBiblioteca(Int32 bib_id, Guid pes_id, DateTime data, Guid ent_id) in d:\b\Biblioteca\Biblioteca_Main.Minor\src\Biblioteca\Main\Src\MSTech.GestaoEscolar.BLL\BIB_MovimentacaoBO.cs:line 1921
  at Movimentacao_Devolucao_Cadastro.validaSuspensaoAutomatica(Int32 bib_id, Guid pes_id) in d:\b\Biblioteca\Biblioteca_Main.Minor\src\Biblioteca\Main\Src\Biblioteca\Movimentacao\Devolucao\Cadastro.aspx.cs:line 1656
  at Movimentacao_Devolucao_Cadastro.CarregaGrid() in d:\b\Biblioteca\Biblioteca_Main.Minor\src\Biblioteca\Main\Src\Biblioteca\Movimentacao\Devolucao\Cadastro.aspx.cs:line 861
  at Movimentacao_Devolucao_Cadastro.UCComboBiblioteca__IndexChanged() in d:\b\Biblioteca\Biblioteca_Main.Minor\src\Biblioteca\Main\Src\Biblioteca\Movimentacao\Devolucao\Cadastro.aspx.cs:line 1497
\r\n


  • Timeout
Inner Exception Type: System.ComponentModel.Win32Exception
Inner Exception: The wait operation timed out
Inner Source: 
Exception Type: System.Data.SqlClient.SqlException
Exception: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
Source: .Net SqlClient Data Provider
Stack Trace: 
  at MSTech.Data.Common.TalkDBTransaction.setError(Exception err)
  at MSTech.Data.Common.TalkDBTransaction.QuerySelect(DbCommand cmd)
  at MSTech.Data.Common.QuerySelect.Execute()
  at MSTech.Biblioteca.DAL.BIB_ListaReservaDAO.Busca_ReservasAcervo(Int32 bib_id, String ace_titulo, Int16 ace_tipoBusca, String exm_tombo, DateTime data, Byte lre_situacao, Int32& totalRecords) in d:\b\Biblioteca\Biblioteca_Main.Minor\src\Biblioteca\Main\Src\MSTech.GestaoEscolar.DAL\BIB_ListaReservaDAO.cs:line 371
  at MSTech.Biblioteca.BLL.BIB_ListaReservaBO.Busca_ReservasAcervo(Int32 bib_id, Int16 ace_tipoBusca, String ace_titulo, String exm_tombo, DateTime data, Byte lre_situacao) in d:\b\Biblioteca\Biblioteca_Main.Minor\src\Biblioteca\Main\Src\MSTech.GestaoEscolar.BLL\BIB_ListaReservaBO.cs:line 165
  at Movimentacao_Devolucao_Cadastro.Salvar() in d:\b\Biblioteca\Biblioteca_Main.Minor\src\Biblioteca\Main\Src\Biblioteca\Movimentacao\Devolucao\Cadastro.aspx.cs:line 590
\r\n


TOP 10 querrys mais lentas

Consulta

 1 55565	2	2016-07-14 17:23:16.703	2016-07-14 17:22:12.800	55931	Biblioteca	SELECT  DISTINCT 
 2 				A.ace_titulo
 3 				, A.ace_subTitulo
 4 				, dbo.FN_ConcatenaTuplas_ClassificacaoLiteraria(A.ace_id) AS cll_nome
 5 				, aut_nomePadrao
 6 				, aut_nome
 7 				, edt.edt_nome
 8 				, tpo.tor_nome
 9 				, a.ace_id
10 				, O.obr_volume
11 				, A.ace_isbnIssn
12 				, A.ace_cdd
13 				, A.ace_phaCutter
14 				, O.obr_edicao
15 				, O.obr_anoEdicao
16 				, aut.oat_descricao
17 				, A.ace_linkDominio
18 		FROM    BIB_Acervo A WITH ( NOLOCK )
19 				INNER JOIN BIB_Exemplar E WITH ( NOLOCK ) ON A.ace_id = E.ace_id
20                 INNER JOIN BIB_ExemplarLocalizacao EL WITH ( NOLOCK ) ON A.ace_id = EL.ace_id AND E.exm_id = EL.exm_id
21 				INNER JOIN BIB_Biblioteca bib WITH ( NOLOCK ) ON bib.bib_id = EL.bib_id 
22 				INNER JOIN Synonym_SYS_UnidadeAdministrativa uad WITH(NOLOCK) ON uad.uad_id = BIB.uad_id AND uad.ent_id = BIB.ent_id 
23                 INNER JOIN BIB_ObraAutor oa WITH (NOLOCK) ON A.ace_id = oa.ace_id
24                 INNER JOIN BIB_Obra O WITH (NOLOCK) ON A.ace_id = O.ace_id
25 				INNER JOIN BIB_TipoObra tpo WITH ( NOLOCK ) ON A.tor_id = tpo.tor_id                
26                 INNER JOIN BIB_ObraClassificacao CLO WITH (NOLOCK) ON A.ace_id = CLO.ace_id
27                 INNER JOIN BIB_ClassificacaoLiteraria cl WITH (NOLOCK) ON cl.cll_id = CLO.cll_id
28 				               
29                 LEFT JOIN BIB_Editora edt WITH(NOLOCK) ON A.edt_id = edt.edt_id
30                 LEFT JOIN BIB_GrupoAssunto ga WITH (NOLOCK) on A.gra_id = ga.gra_id                
31 				LEFT JOIN BIB_GeneroAssunto gs WITH (NOLOCK) ON cl.cll_id = gs.cll_id AND (gs.gnr_situacao = 1 OR gs.gnr_situacao IS NULL)
32                 LEFT JOIN INT_ObraAutor aut WITH (NOLOCK) ON a.ace_id = aut.ace_id                
33         WHERE 
34 				((A.ace_situacao = 1 OR A.ace_situacao = 5)
35 				AND E.exm_situacao NOT IN ( 3, 4)
36 				AND E.ace_id IS NOT NULL
37 				AND (edt.edt_situacao = 1 OR edt.edt_situacao IS NULL)
38 				AND (tor_situacao = 1 OR tor_situacao IS NULL) 
39 				AND (ga.gra_situacao = 1 OR ga.gra_situacao IS NULL)
40 				AND (cl.cll_situacao = 1 OR cl.cll_situacao IS NULL)
41 				AND (bib.bib_situacao <> 3  AND uad.uad_situacao <> 3))
42 				--AND (gs.gnr_situacao = 1 OR gs.gnr_situacao IS NULL))
43 				AND (
44 				A.ace_titulo LIKE '%' + @texto + '%' COLLATE Latin1_General_CI_AI --ignora acentuacao
45 				OR A.ace_isbnIssn LIKE '%' + @texto + '%' COLLATE Latin1_General_CI_AI --ignora acentuacao
46                 OR edt.edt_nome LIKE '%' + @texto + '%' COLLATE Latin1_General_CI_AI --ignora acentuacao
47                 OR O.obr_anoEdicao LIKE '%' + @texto + '%' COLLATE Latin1_General_CI_AI --ignora acentuacao 
48                 OR O.obr_serieColecao LIKE '%' + @texto + '%' COLLATE Latin1_General_CI_AI --ignora acentuacao
49                 OR ga.gra_nome LIKE '%' + @texto + '%' COLLATE Latin1_General_CI_AI --ignora acentuacao
50                 OR cl.cll_nome LIKE '%' + @texto + '%' COLLATE Latin1_General_CI_AI --ignora acentuacao
51                 OR gs.gnr_nome LIKE '%' + @texto + '%' COLLATE Latin1_General_CI_AI --ignora acentuacao 
52                 OR aut.aut_nomePadrao LIKE '%' + @texto + '%' COLLATE Latin1_General_CI_AI --ignora acentuacao
53 				OR aut.aut_nome LIKE '%' + @texto + '%' COLLATE Latin1_General_CI_AI --ignora acentuacao
54 				)
55 				AND 
56 				(
57 					EL.bib_id IN
58 								(
59 									SELECT bib_id
60 									FROM BIB_ParametroBiblioteca pb
61 									WHERE pbi_permitiConsultaExterna = 0 -- permite consulta do acervo
62 								) 
63 					OR EL.bib_id IS NULL
64 				)
65         ORDER BY

Cenários de uso

Cenário de uso #1 - Login
Ação realizada Think Time (segundos)
1 - Acessar tela de login 3
1 - Realizar login 7
1 - Selecionar sistema Transporte Escolar 5


Cenário de uso #2 - Cadastro de título (Fluxo 1)
Ação realizada Think Time (segundos)
2 - Acessar tela de consulta de título 4
2 - Clicar em "Incluir título" 3
2 - Preencher campo "Autor" 4
2 - Preencher campo "Grupo de assunto" 3
2 - Preencher campo "Assunto" 3
2 - Preencher campo "Gênero do assunto" 3
2 - Preencher campo "Editora" 3
2 - Marcar checkbox "Não possui ISBN" 2
2 - Salvar cadastro 7
2 - Acessar tela de consulta de exemplar 4
2 - Clicar em "Incluir exemplar" 3
2 - Pesquisar título 6
2 - Selecionar título 4
2 - Preencher campo "Qtde. de tombo" 4
2 - Salvar cadastro 7
2 - Logout 5


Cenário de uso #3 - Cadastro de título (Fluxo 2)
Ação realizada Think Time (segundos)
3 - Acessar tela de consulta de título 4
3 - Clicar em "Incluir título" 3
3 - Preencher "Tipo" 3
3 - Preencher campo "Autor" 4
3 - Preencher campo "Grupo de assunto" 3
3 - Preencher campo "Assunto" 3
3 - Preencher campo "Gênero do assunto" 3
3 - Preencher campo "Editora" 3
3 - Marcar checkbox "Não possui ISBN" 2
3 - Salvar cadastro e gerar exemplar 7
3 - Preencher campo "Qtde. de tombo" 4
3 - Salvar cadastro 7
3 - Logout 5


Cenário de uso #4 - Cadastro de exemplar
Ação realizada Think Time (segundos)
4 - Acessar tela de consulta de exemplares 3
4 - Clicar em "Incluir exemplares" 3
4 - Pesquisar título 5
4 - Selecionar título 3
4 - Preencher campo "Qtde. de tombos" 4
4 - Salvar cadastro 7
4 - Logout 5


Cenário de uso #5 - Cadastro de memória documental
Ação realizada Think Time (segundos)
5 - Acessar tela de consulta de memória documental 4
5 - Clicar em "Incluir memória técnica documental" 4
5 - Preencher campo "Tipo de acervo" 5
5 - Preencher campo "Idioma" 5
5 - Preencher campo "Autor" 5
5 - Preencher campo "Tipo de anexo" 5
5 - Salvar cadastro 7
5 - Logout 5


Cenário de uso #6 - Cadastro de leitor munícipe
Ação realizada Think Time (segundos)
6 - Acessar tela de consulta de leitor 4
6 - Clicar em "Incluir leitor" 4
6 - Preencher campo "Categoria de leitores" 3
6 - Preencher campo "CPF" 10
6 - Preencher campo "CEP" 9
6 - Salvar cadastro 12
6 - Logout 5


Cenário de uso #7 - Realizar empréstimo
Ação realizada Think Time (segundos)
7 - Acessar tela de consulta de leitores 4
7 - Pesquisar leitor 6
7 - Selecionar leitor 3
7 - Preencher campo "Biblioteca" 8
7 - Clicar no ícone de pesquisa de título 3
7 - Pesquisar título 15
7 - Selecionar título 4
7 - Clicar em "Confirmar" 3
7 - Salvar movimentação 10
7 - Logout 5


Cenário de uso #8 - Realizar devolução
Ação realizada Think Time (segundos)
8 - Acessar tela de consulta de devolução 4
8 - Pesquisar leitor 8
8 - Selecionar leitor 4
8 - Preencher campo "Biblioteca" 8
8 - Marcar checkbox "Selecionar todas as devoluções" 3
8 - Salvar movimentação 10
8 - Logout 5


Cenário de uso #9 - Realizar renovação
Ação realizada Think Time (segundos)
9 - Acessar tela de renovação 4
9 - Pesquisar leitor 8
9 - Selecionar leitor 5
9 - Preencher campo "Biblioteca" 8
9 - Selecionar opção "Renovação" 4
9 - Salvar movimentação 10
9 - Logout 5


Cenário de uso #10 - Realizar reserva
Ação realizada Think Time (segundos)
10 - Acessar tela de reserva 4
10 - Pesquisar leitor 8
10 - Selecionar leitor 5
10 - Preencher campo "Biblioteca" 8
10 - Clicar no ícone de pesquisa 4
10 - Pesquisar exemplar 12
10 - Selecionar exemplar 5
10 - Confirmar seleção 3
10 - Salvar reserva 10
10 - Logout 5


Cenário de uso #11 - Consulta externa
Ação realizada Think Time (segundos)
11 - Acessar tela de consulta externa 4
11 - Pesquisar título 10
11 - Logout 5

Resultado dos testes

Nesta seção serão apresentados os resultados obtidos da execução dos testes.

  • Porcentagem de tempo do processador
Descrição: Mede a saturação do processador e mostra a quantidade de tempo despendida para processar as threads por todas as CPUs.
Limite recomendado: Abaixo de 75 %.
Análise: A aplicação demonstrou desempenho esperado até atingir 550 usuários simultâneos, onde apenas o servidor WEB01 sofre um pico e os demais servidores não utilizam tanto processamento. Este comportamento esta relacionado a quantidade de erros gerados pela aplicação.
2016-07-19 Biblioteca TempoProcessador.png


  • Porcentagem de memória utilizada
Descrição: Indica a porcentagem de memória utilizada para uso dos processos.
Limite recomendado: Abaixo de 75 %.
Análise: Em dois momentos o WEB01 sofreu uma queda na utilização da memória. Os demais servidores mantiveram-se estáveis quanto a utilização de memória.
2016-07-19 Biblioteca MemoriaUtilizada.png


  • Kbytes totais pela interface de rede
Descrição: Indica quantos Kbytes foram enviados e recebidos a cada segundo pela interface de rede.
Limite recomendado: Menor que 5 Mbytes para uma rede de 100Mbps, menor que 50 Mbytes para uma rede de 1000 Mbps. (Quanto menor melhor).
Análise: Foi observado que quanto maior a quantidade de erros de dll salvas menor a quantidade de Kbytes enviados e recebidos.
2016-07-19 Biblioteca InterfaceDeRede.png


  • Tempo médio de resposta das requisições
Descrição: Indica o tempo médio de resposta das requisições.
Limite recomendado: 5 segundos.
Análise: A partir de 300 usuários simultâneos até 400 usuários ocorre uma alta no tempo de resposta da aplicação, tendo um pico com 350 usuários simultâneos.
2016-07-19 Biblioteca TempoDeResposta.png
2016-07-19 Bibliote TempoDeResposta Leg1.png
2016-07-19 Bibliote TempoDeResposta Leg2.png


  • Tempo de vazão
Descrição: Indica a quantidade total de request por segundo.
Limite recomendado: Quanto maior melhor.
Análise: A aplicação teve apenas um desvio quando utilizada por 350 usuários.
2016-07-19 Biblioteca Vazao.png


  • Porcentagem de erro
Descrição: Indica a porcentagem de erro.
Limite recomendado: Quanto menor melhor.
Análise: A aplicação possui erros funcionais que não retornam mensagem na tela para o usuário, os mesmos são apenas salvos em logs de erros.
2016-07-19 Biblioteca Erros.png