Biblioteca 1.45.0.0
Índice
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.
- 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.
- 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.
- 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.
- 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.
- 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.