Mudanças entre as edições de "Approxima 1.0.0.74"
(Criou página com '== Sistemas Verificados == *Approxima, versão 1.0.0.74 *CoreSSO, versão 2.0.5.0 *CoreEdu, versão 0.0.0.4 *Approxima API, versão 1.0.0.74 == Verificação de Segurança...') |
(→Resultado dos testes) |
||
(12 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 5: | Linha 5: | ||
*CoreEdu, versão 0.0.0.4 | *CoreEdu, versão 0.0.0.4 | ||
*Approxima API, versão 1.0.0.74 | *Approxima API, versão 1.0.0.74 | ||
− | |||
== Verificação de Segurança == | == Verificação de Segurança == | ||
Linha 23: | Linha 22: | ||
Além disso, foram encontrados alguns bugs na aplicação. Segue listagem abaixo: | Além disso, foram encontrados alguns bugs na aplicação. Segue listagem abaixo: | ||
− | + | # Não possui validação caso o usuário que esteja acessando pelo core não for uma pessoa no Approxima. | |
− | + | # Na home ("TimeLine") ao clicar em "Carregar itens" nada acontece quando o usuário logado é um aluno. | |
− | + | # Exitem imagens que não existem na pasta mas são chamadas para aplicação (as mesmas foram adicionadas apenas no ambiente de teste): | |
− | + | #* /App_Themes/Approxima/style/iconfont/materialIcons/MaterialIcons-Regular.woff2 | |
− | + | #* /Default/images/logos/213_logoImagemMenu.png | |
− | + | #* /Default/images/logos/logo-area-aluno.png | |
− | + | # Ao clicar em "Nova enquete" o texto do botão cancelar está em caixa alta diferente do texto exibido em "Enviar". | |
− | + | # Ao tentar cadastrar um comunicado preenchendo os campos e clicando em "Enviar" a página demora para redirecionar para as mensagens, dando a impressão da tela não estar funcionando. | |
− | + | # Ao acessar a tela de criação de enquete e na seção de informação da enquete abrir o calendário e clicar na data previamente exibida e clicar fora do calendário a data fica em branco e nenhuma mensagem de validação é exibida. | |
Foi encontrado um erro intermitente no logout do sistema, o mesmo é salvo como erro "An item with the same key has already been added.", no log de erro os mesmos apontaram para: | Foi encontrado um erro intermitente no logout do sistema, o mesmo é salvo como erro "An item with the same key has already been added.", no log de erro os mesmos apontaram para: | ||
Linha 38: | Linha 37: | ||
=== Análise do teste === | === Análise do teste === | ||
− | A utilização do redis possibilitou utilizar a aplicação com uma quantidade de erros inferior de erros de login, além da perda de sessão. | + | A utilização do redis possibilitou utilizar a aplicação com uma quantidade de erros inferior de erros de login, além da perda de sessão. Foi observada uma melhora na performance no sistema como: |
− | + | # Menor utilização de hardware. | |
− | + | # Melhoras no tempo de resposta. | |
− | + | # Quantidade maior de usuário logados simultâneos. | |
− | Durante a execução dos testes foram encontrados problemas na aplicação | + | Durante a execução dos testes foram encontrados problemas (não relacionados ao uso do redis) na aplicação, segue listagem abaixo: |
− | + | # Não foi possível balancear a carga entre os dois servidores. | |
− | + | # Problemas de conexão da API com o banco de dados, que são os erros salvos como “The network path was not found”. | |
− | + | # Problemas de timeout. | |
− | + | # Problemas de aborto de thread (devido a própria propriedade de timeout do APS.Net, que não tem a resposta do servidor dentro do tempo esperado, nessa situação pode dar timeout ou o abortar a thread). | |
− | + | # Encontrados alguns problemas no envio do request, salvos como “An error ocurred while sendind the request.”. | |
− | + | # Processo W3wp.exe consome 100% da cpu. | |
Os erros listados acima ocorrem já com 50 usuários simultâneos (carga de usuários inicial do teste), com a utilização ou não do redis. Podemos dizer que a aplicação, do modo que está hoje no meu ambiente, suportaria uma carga superior a 50 usuários e inferior a 100. | Os erros listados acima ocorrem já com 50 usuários simultâneos (carga de usuários inicial do teste), com a utilização ou não do redis. Podemos dizer que a aplicação, do modo que está hoje no meu ambiente, suportaria uma carga superior a 50 usuários e inferior a 100. | ||
+ | |||
+ | === TOP 10 Queries mais lentas === | ||
+ | |||
+ | * Item 01 | ||
+ | <syntaxhighlight lang="sql" line="1" > | ||
+ | update t set | ||
+ | appKey = p.AppKey | ||
+ | from | ||
+ | @personTable t | ||
+ | inner join Profile p on p.PersonId = t.personId | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | * Item 02 | ||
+ | <syntaxhighlight lang="sql" line="1" > | ||
+ | MERGE INTO EventPerson _target | ||
+ | USING | ||
+ | ( | ||
+ | SELECT | ||
+ | EventId | ||
+ | , PersonId | ||
+ | FROM | ||
+ | @personTable | ||
+ | ) AS _source | ||
+ | ON (_source.EventId = _target.EventId | ||
+ | AND _source.PersonId = _target.PersonId) | ||
+ | WHEN NOT MATCHED THEN | ||
+ | INSERT | ||
+ | ( | ||
+ | EventId, | ||
+ | PersonId, | ||
+ | [Read] | ||
+ | ) | ||
+ | VALUES | ||
+ | ( | ||
+ | _source.EventId, | ||
+ | _source.PersonId, | ||
+ | 0 | ||
+ | ) | ||
+ | WHEN NOT MATCHED BY SOURCE AND _target.EventId = @eventId THEN | ||
+ | DELETE; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | * Item 03 | ||
+ | <syntaxhighlight lang="sql" line="1" > | ||
+ | MERGE INTO SurveyPerson _target | ||
+ | USING | ||
+ | ( | ||
+ | SELECT | ||
+ | SurveyId | ||
+ | , PersonId | ||
+ | FROM | ||
+ | @personTable | ||
+ | ) AS _source | ||
+ | ON (_source.SurveyId = _target.SurveyId | ||
+ | AND _source.PersonId = _target.PersonId) | ||
+ | WHEN NOT MATCHED THEN | ||
+ | INSERT | ||
+ | ( | ||
+ | SurveyId, | ||
+ | PersonId, | ||
+ | Answered, | ||
+ | Viewed | ||
+ | ) | ||
+ | VALUES | ||
+ | ( | ||
+ | _source.SurveyId, | ||
+ | _source.PersonId, | ||
+ | 0, | ||
+ | 0 | ||
+ | ) | ||
+ | WHEN NOT MATCHED BY SOURCE AND _target.SurveyId = @surveyId THEN | ||
+ | DELETE; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | * Item 04 | ||
+ | <syntaxhighlight lang="sql" line="1" > | ||
+ | INSERT INTO @personTable (personId) | ||
+ | SELECT x FROM dbo.FNC_CONVERT_VARCHAR_IN_TABLE(@ids, ',') | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | * Item 05 | ||
+ | <syntaxhighlight lang="sql" line="1" > | ||
+ | WITH split(i,j) AS | ||
+ | ( | ||
+ | SELECT i = CAST(1 AS BIGINT), j = CHARINDEX(@separador, @string + @separador) | ||
+ | UNION ALL | ||
+ | SELECT i = j + 1, j = CHARINDEX(@separador, @string + @separador, j + 1) FROM split WHERE CHARINDEX(@separador, @string + @separador, j + 1) <> 0 | ||
+ | ) | ||
+ | INSERT @tabela (x) | ||
+ | SELECT RTRIM(LTRIM(SUBSTRING(@string,i,j-i))) FROM split OPTION (maxrecursion 10000) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | * Item 06 | ||
+ | <syntaxhighlight lang="sql" line="1" > | ||
+ | INSERT INTO @personTable (PersonId, EventId) | ||
+ | SELECT DISTINCT | ||
+ | gp.PersonId | ||
+ | , @eventId | ||
+ | FROM | ||
+ | GroupPerson gp | ||
+ | INNER JOIN @groupTable gt | ||
+ | ON gt.GroupId = gp.GroupId | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | * Item 07 | ||
+ | <syntaxhighlight lang="sql" line="1" > | ||
+ | select distinct | ||
+ | p.AppKey | ||
+ | from | ||
+ | Profile p | ||
+ | inner join @ids i on i.Id = p.PersonId | ||
+ | where | ||
+ | isnull(p.AppKey, '') != '' | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | * Item 08 | ||
+ | <syntaxhighlight lang="sql" line="1" > | ||
+ | INSERT INTO @personTable (PersonId, SurveyId) | ||
+ | SELECT DISTINCT | ||
+ | gp.PersonId | ||
+ | , @surveyId | ||
+ | FROM | ||
+ | GroupPerson gp | ||
+ | INNER JOIN @groupTable gt | ||
+ | ON gt.GroupId = gp.GroupId | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | * Item 09 | ||
+ | <syntaxhighlight lang="sql" line="1" > | ||
+ | MERGE INTO EventGroup _target | ||
+ | USING | ||
+ | ( | ||
+ | SELECT | ||
+ | EventId | ||
+ | , GroupId | ||
+ | FROM | ||
+ | @groupTable | ||
+ | ) AS _source | ||
+ | ON (_source.EventId = _target.EventId | ||
+ | AND _source.GroupId = _target.GroupId) | ||
+ | WHEN NOT MATCHED THEN | ||
+ | INSERT | ||
+ | ( | ||
+ | EventId, | ||
+ | GroupId | ||
+ | ) | ||
+ | VALUES | ||
+ | ( | ||
+ | _source.EventId, | ||
+ | _source.GroupId | ||
+ | ) | ||
+ | WHEN NOT MATCHED BY SOURCE AND _target.EventId = @eventId THEN | ||
+ | DELETE; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | * Item 10 | ||
+ | <syntaxhighlight lang="sql" line="1" > | ||
+ | SELECT | ||
+ | DISTINCT | ||
+ | gp.PersonId | ||
+ | FROM | ||
+ | dbo.GroupPerson gp | ||
+ | INNER JOIN @groupTable gt ON gt.Id = gp.GroupId | ||
+ | </syntaxhighlight> | ||
=== Cenários de uso === | === Cenários de uso === | ||
Linha 65: | Linha 228: | ||
|- | |- | ||
|} | |} | ||
− | |||
Linha 85: | Linha 247: | ||
|- | |- | ||
|} | |} | ||
− | |||
Linha 107: | Linha 268: | ||
|- | |- | ||
|} | |} | ||
− | |||
Linha 127: | Linha 287: | ||
|- | |- | ||
|} | |} | ||
− | |||
− | |||
Linha 142: | Linha 300: | ||
=== Resultado dos testes === | === Resultado dos testes === | ||
− | + | Nesta seção serão apresentados os resultados obtidos da execução dos testes. Para identificação foram utilizadas as letras "R" e "A", sendo a primeira para identificar os resultados obtidos com a utilização do redis e a segunda para configuração com ASP.NET. | |
+ | |||
+ | *'''Processador e disco''' | ||
+ | |||
+ | : Contador: Percentagem de tempo ocioso. | ||
+ | : Descrição: Este contador fornece quanto tempo o disco permaneceu em estado de repouso, ou seja, todos os pedidos do sistema operacional para o disco ter sido concluída e há zero de pedidos pendentes. Este contador varia de 100 (ou seja, sempre ocioso) para 0 (ou seja, sempre ocupado). | ||
+ | : Limite recomendado: Abaixo de 75 %. | ||
+ | : Análise: Grande parte do tempo encontra-se ocioso. | ||
+ | |||
+ | :::::: [[Arquivo:Approxima TempoOcioso 2016-09-26.png]] | ||
+ | |||
+ | : Contador: Percentagem de espaço livre. | ||
+ | : Descrição: Mostra a porcentagem do espaço total utilizável no disco lógico selecionado. | ||
+ | : Limite recomendado: Acima de 25%. | ||
+ | : Análise: Aplicação está dentro do recomendado. | ||
+ | |||
+ | :::::: [[Arquivo:Approxima EspacoLivre 2016-09-26.png]] | ||
+ | |||
+ | : Tempo total do processador. | ||
+ | : Descrição: Mede a utilização da CPU de cada processador. | ||
+ | : Limite recomendado: Não exceder 80% por mais de 10 minutos ao longo do período de teste. | ||
+ | : Análise: A aplicação em vários momentos durante a execução do teste chegou a utilizar 100% de processamento no processo W3wp.exe no servidor web que utilizava para o teste. | ||
+ | |||
+ | :::::: [[Arquivo:2016-09-26 Approxima TotalProcessador.png]] | ||
+ | |||
+ | : Contador: Mudança de contexto. | ||
+ | : Descrição: A mudança de contexto ocorre quando o kernel muda o processador de um segmento para outro, por exemplo, quando um segmento com uma prioridade maior do que o segmento em execução torna-se pronto. | ||
+ | : Limite recomendado: O valor ideal recomendado é de no máximo 10000 por CPU. | ||
+ | : Análise: A aplicação encontra-se acima do recomendado. | ||
+ | |||
+ | :::::: [[Arquivo:2016-08-10 Almoxarifado MudancaContexto.png]] | ||
+ | |||
+ | |||
+ | *'''Memória''' | ||
+ | |||
+ | : Contador: Páginas/segundo. | ||
+ | : Descrição: Mede o número de páginas por segundo que são paginadas fora da memória RAM para a memória virtual. | ||
+ | : Limite recomendado: Se o número for alto indica falhas graves. O limite normalmente é de 20 páginas/s | ||
+ | : Análise: A aplicação apresentou diferentes tempos para o ARR, SQL e servidores Web. No ARR ficou dentro do recomendado, no SQL por sua vez, apenas com a utilização do redis e com até 100 usuários simultâneos a aplicação ficou dentro do recomendado. Nos demais casos a média do tempo de página/s foi superior ao recomendado. Indicam um delay no sistema utilizado. | ||
+ | |||
+ | :::::: [[Arquivo:2016-09-26 Approxima PaginaS.png]] | ||
+ | |||
+ | : Contador: % Memória virtual comprometida. | ||
+ | : Descrição: Indica a percentagem da memória comprometida utilizada dentro do limite dado pela soma da memória RAM e Page File. | ||
+ | : Limite recomendado: Abaixo de 75% e que não tenha grande variação no indicador. | ||
+ | : Análise: Com a utilização do redis a aplicação encontra-se dentro do recomendado. Quando utiliza o ASP.NET é possível visualizar uma variação no indicador. | ||
+ | |||
+ | :::::: [[Arquivo:2016-09-26 Approxima MemoriaVirtualComprometida.png]] | ||
+ | |||
+ | |||
+ | : Contador: Memória disponível em MBytes. | ||
+ | : Descrição: Indica quantidade de memória disponível para alocação em MBytes. | ||
+ | : Limite recomendado: Se o valor for inferior a 20/25 por cento de RAM instalada é uma indicação de memória insuficiente. Menos de 100 MB é uma indicação de que o sistema é muito carente de memória e paginação. | ||
+ | : Análise: Os servidores web aproximam-se bastante dos limites recomendados. | ||
+ | |||
+ | :::::: [[Arquivo:2016-09-26 Approxima MemoriaDisponivel.png]] | ||
+ | |||
+ | |||
+ | *'''Network''' | ||
+ | |||
+ | : Contador: 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: O tráfego na rede ocorre devido a possibilidade de conexão e sem perda de sessão durante os testes. Sem o uso do redis não é possível realizar uma quantidade de login satisfatória para que tenha tráfego na rede. | ||
+ | |||
+ | :::::: [[Arquivo:2016-09-26 Approxima InterfaceRede.png]] | ||
+ | |||
+ | : Contador: Falhas de conexão (TCP) | ||
+ | : Descrição: Este é o número bruto de conexões TCP que falharam desde que o servidor foi iniciado. Uma falha normalmente indica uma perda de dados em lugar no processo. A perda pode ocorrer em muitos locais. Esta poderia ser uma indicação de um outro dispositivo que está sendo para baixo, ou problemas com a configuração do lado do cliente do software. | ||
+ | : Limite recomendado: Quanto menor melhor. | ||
+ | : Análise: Grande ocorrência de falhas nos servidores webs a partir de 100 usuários simultâneos conectados. | ||
+ | |||
+ | :::::: [[Arquivo:2016-09-26 1Approxima ConexoesFalhas.png]] | ||
+ | |||
+ | |||
+ | *'''SQL''' | ||
+ | |||
+ | : Contador: Expectativa de vida da página. | ||
+ | : Descrição: Indica o número em segundos que uma página vai ficar na área de buffers, sem referências. | ||
+ | : Limite recomendado: Quanto menor melhor. | ||
+ | : Análise: Com a utilização do redis o sistema possui quantitativo satisfatório. | ||
+ | |||
+ | :::::: [[Arquivo:2016-09-26 Approxima ExpectativaDeVida.png]] | ||
+ | |||
+ | |||
+ | *'''WEB''' | ||
+ | |||
+ | : Contador: Requests/sec. | ||
+ | : Descrição: Mostra o número de requisições por segundo que seu site está atendendo. Na maioria das aplicações este número é relativamente baixo não passando de 5 ou 10 já que pra que este contador seja incrementado é necessário que as requests sejam executadas exatamente no mesmo segundo. Isto geralmente acontece em duas situações: você tem vários usuários acessando sua aplicação ao mesmo tempo ou caso suas requisições demorem muito pra terminar a execução. | ||
+ | : Limite recomendado: O número é relativamente baixo não passando de 5 ou 10. | ||
+ | : Análise: Com a utilização do redis o sistema possui quantitativo satisfatório. | ||
+ | |||
+ | :::::: [[Arquivo:2016-09-26 Approxima RequestSec.png]] | ||
+ | |||
+ | |||
+ | *'''IIS''' | ||
+ | |||
+ | : Contador: Current Applicantion Pool Uptime. | ||
+ | : Descrição: Permite que você veja se o pedido tiver sido reiniciado ou não. | ||
+ | : Limite recomendado: Quanto menor melhor. | ||
+ | : Análise: Com a utilização do redis com até 100 usuários simultâneos conectados o sistema possui quantitativo satisfatório. | ||
+ | |||
+ | ::::::::: [[Arquivo:2016-09-26 Approxima CurrentApplicationPoolUptime.png]] | ||
+ | |||
+ | |||
+ | *'''Redis''' | ||
+ | |||
+ | : Descrição: Dados do redis disponibilizados pela equipe do DevOps para comparativos. | ||
+ | : Usuários simultâneos: 50 usuários. | ||
+ | |||
+ | [[Arquivo:2016-09-26 Approxima Redis50.png]] | ||
+ | |||
+ | |||
+ | : Descrição: Dados do redis disponibilizados pela equipe do DevOps para comparativos. | ||
+ | : Usuários simultâneos: 100 usuários. | ||
+ | |||
+ | [[Arquivo:2016-09-26 Approxima Redis100.png]] | ||
+ | |||
+ | |||
+ | : Descrição: Dados do redis disponibilizados pela equipe do DevOps para comparativos. | ||
+ | : Usuários simultâneos: 150 usuários. | ||
+ | |||
+ | [[Arquivo:2016-09-26 Approxima Redis150.png]] | ||
+ | |||
+ | |||
+ | *'''JMeter''' | ||
+ | |||
+ | : Descrição: Quantidade total de samplers. | ||
+ | |||
+ | :::::: [[Arquivo:2016-09-26 Approxima Sampler.png]] | ||
+ | |||
+ | |||
+ | : Descrição: Quantidade total de samplers. | ||
+ | |||
+ | :::::: [[Arquivo:2016-09-26 Approxima TempoDeResposta.png]] | ||
+ | |||
+ | |||
+ | : Descrição: Porcentagem de erro total. | ||
+ | |||
+ | :::::: [[Arquivo:2016-09-26 Approxima PorcentagemErro.png]] | ||
+ | |||
+ | |||
+ | : Descrição: Vazão. | ||
+ | |||
+ | :::::: [[Arquivo:2016-09-26 Approxima Vazao.png]] |
Edição atual tal como às 17h13min de 21 de novembro de 2016
Índice
Sistemas Verificados
- Approxima, versão 1.0.0.74
- CoreSSO, versão 2.0.5.0
- CoreEdu, versão 0.0.0.4
- Approxima API, versão 1.0.0.74
Verificação de Segurança
Em verificação.
Verificação de Desempenho
Observações sobre o teste
O teste foi realizado para verificar a diferença/impacto da utilização do redis junto a aplicação. Para a realização dos testes foram utilizado:
- 1 Servidor SQL.
- 2 Servidores Web.
- 1 Test controller.
- 1 Test agent.
Durante a gravação dos cenários foram observadas diferenças no funcionamento da aplicação no ambiente de produção e o ambiente de teste. No ambiente de teste foi possível realizar redirecionamento e navegação do site sem utilização do usuário.
Além disso, foram encontrados alguns bugs na aplicação. Segue listagem abaixo:
- Não possui validação caso o usuário que esteja acessando pelo core não for uma pessoa no Approxima.
- Na home ("TimeLine") ao clicar em "Carregar itens" nada acontece quando o usuário logado é um aluno.
- Exitem imagens que não existem na pasta mas são chamadas para aplicação (as mesmas foram adicionadas apenas no ambiente de teste):
- /App_Themes/Approxima/style/iconfont/materialIcons/MaterialIcons-Regular.woff2
- /Default/images/logos/213_logoImagemMenu.png
- /Default/images/logos/logo-area-aluno.png
- Ao clicar em "Nova enquete" o texto do botão cancelar está em caixa alta diferente do texto exibido em "Enviar".
- Ao tentar cadastrar um comunicado preenchendo os campos e clicando em "Enviar" a página demora para redirecionar para as mensagens, dando a impressão da tela não estar funcionando.
- Ao acessar a tela de criação de enquete e na seção de informação da enquete abrir o calendário e clicar na data previamente exibida e clicar fora do calendário a data fica em branco e nenhuma mensagem de validação é exibida.
Foi encontrado um erro intermitente no logout do sistema, o mesmo é salvo como erro "An item with the same key has already been added.", no log de erro os mesmos apontaram para:
- MSTech.CoreSSO.Web.WebProject.Logout.CreateSAMLResponse() in d:\b\MSTech SSO\CoreSSO_Main.Revision\src\MSTechSSO\Main\src\MSTech.CoreSSO.Web.WebProject\Logout.cs:line 244
- MSTech.CoreSSO.Web.WebProject.Logout.ProcessRequest(HttpContext context) in d:\b\MSTech SSO\CoreSSO_Main.Revision\src\MSTech SSO\Main\src\MSTech.CoreSSO.Web.WebProject\Logout.cs:line 72
Análise do teste
A utilização do redis possibilitou utilizar a aplicação com uma quantidade de erros inferior de erros de login, além da perda de sessão. Foi observada uma melhora na performance no sistema como:
- Menor utilização de hardware.
- Melhoras no tempo de resposta.
- Quantidade maior de usuário logados simultâneos.
Durante a execução dos testes foram encontrados problemas (não relacionados ao uso do redis) na aplicação, segue listagem abaixo:
- Não foi possível balancear a carga entre os dois servidores.
- Problemas de conexão da API com o banco de dados, que são os erros salvos como “The network path was not found”.
- Problemas de timeout.
- Problemas de aborto de thread (devido a própria propriedade de timeout do APS.Net, que não tem a resposta do servidor dentro do tempo esperado, nessa situação pode dar timeout ou o abortar a thread).
- Encontrados alguns problemas no envio do request, salvos como “An error ocurred while sendind the request.”.
- Processo W3wp.exe consome 100% da cpu.
Os erros listados acima ocorrem já com 50 usuários simultâneos (carga de usuários inicial do teste), com a utilização ou não do redis. Podemos dizer que a aplicação, do modo que está hoje no meu ambiente, suportaria uma carga superior a 50 usuários e inferior a 100.
TOP 10 Queries mais lentas
- Item 01
1 update t set
2 appKey = p.AppKey
3 from
4 @personTable t
5 inner join Profile p on p.PersonId = t.personId
- Item 02
1 MERGE INTO EventPerson _target
2 USING
3 (
4 SELECT
5 EventId
6 , PersonId
7 FROM
8 @personTable
9 ) AS _source
10 ON (_source.EventId = _target.EventId
11 AND _source.PersonId = _target.PersonId)
12 WHEN NOT MATCHED THEN
13 INSERT
14 (
15 EventId,
16 PersonId,
17 [Read]
18 )
19 VALUES
20 (
21 _source.EventId,
22 _source.PersonId,
23 0
24 )
25 WHEN NOT MATCHED BY SOURCE AND _target.EventId = @eventId THEN
26 DELETE;
- Item 03
1 MERGE INTO SurveyPerson _target
2 USING
3 (
4 SELECT
5 SurveyId
6 , PersonId
7 FROM
8 @personTable
9 ) AS _source
10 ON (_source.SurveyId = _target.SurveyId
11 AND _source.PersonId = _target.PersonId)
12 WHEN NOT MATCHED THEN
13 INSERT
14 (
15 SurveyId,
16 PersonId,
17 Answered,
18 Viewed
19 )
20 VALUES
21 (
22 _source.SurveyId,
23 _source.PersonId,
24 0,
25 0
26 )
27 WHEN NOT MATCHED BY SOURCE AND _target.SurveyId = @surveyId THEN
28 DELETE;
- Item 04
1 INSERT INTO @personTable (personId)
2 SELECT x FROM dbo.FNC_CONVERT_VARCHAR_IN_TABLE(@ids, ',')
- Item 05
1 WITH split(i,j) AS
2 (
3 SELECT i = CAST(1 AS BIGINT), j = CHARINDEX(@separador, @string + @separador)
4 UNION ALL
5 SELECT i = j + 1, j = CHARINDEX(@separador, @string + @separador, j + 1) FROM split WHERE CHARINDEX(@separador, @string + @separador, j + 1) <> 0
6 )
7 INSERT @tabela (x)
8 SELECT RTRIM(LTRIM(SUBSTRING(@string,i,j-i))) FROM split OPTION (maxrecursion 10000)
- Item 06
1 INSERT INTO @personTable (PersonId, EventId)
2 SELECT DISTINCT
3 gp.PersonId
4 , @eventId
5 FROM
6 GroupPerson gp
7 INNER JOIN @groupTable gt
8 ON gt.GroupId = gp.GroupId
- Item 07
1 select distinct
2 p.AppKey
3 from
4 Profile p
5 inner join @ids i on i.Id = p.PersonId
6 where
7 isnull(p.AppKey, '') != ''
- Item 08
1 INSERT INTO @personTable (PersonId, SurveyId)
2 SELECT DISTINCT
3 gp.PersonId
4 , @surveyId
5 FROM
6 GroupPerson gp
7 INNER JOIN @groupTable gt
8 ON gt.GroupId = gp.GroupId
- Item 09
1 MERGE INTO EventGroup _target
2 USING
3 (
4 SELECT
5 EventId
6 , GroupId
7 FROM
8 @groupTable
9 ) AS _source
10 ON (_source.EventId = _target.EventId
11 AND _source.GroupId = _target.GroupId)
12 WHEN NOT MATCHED THEN
13 INSERT
14 (
15 EventId,
16 GroupId
17 )
18 VALUES
19 (
20 _source.EventId,
21 _source.GroupId
22 )
23 WHEN NOT MATCHED BY SOURCE AND _target.EventId = @eventId THEN
24 DELETE;
- Item 10
1 SELECT
2 DISTINCT
3 gp.PersonId
4 FROM
5 dbo.GroupPerson gp
6 INNER JOIN @groupTable gt ON gt.Id = gp.GroupId
Cenários de uso
Cenário de uso #1 - Login | |||||
---|---|---|---|---|---|
Ação realizada | Think Time: Atraso constante (segundos) | Think Time: Desvio (segundos) | |||
1 - Acessar tela de login | 5 | 1 | |||
1 - Realizar login | 7 | 1 |
Cenário de uso #2 - Aluno | |||||
---|---|---|---|---|---|
Ação realizada | Think Time: Atraso constante (segundos) | Think Time: Desvio (segundos) | |||
2 - Clicar em "Novo evento" | 5 | 1 | |||
2 - Salvar evento | 15 | 2 | |||
2 - Acessar enquete | 5 | 1 | |||
2 - Enviar resposta | 15 | 3 | |||
2 - Acessar home | 5 | 1 |
Cenário de uso #3 - Professor | |||||
---|---|---|---|---|---|
Ação realizada | Think Time: Atraso constante (segundos) | Think Time: Desvio (segundos) | |||
3 - Home | 1 | 1 | |||
3 - Clicar em "Novo evento" | 15 | 1 | |||
3 - Salvar evento | 15 | 2 | |||
3 - Acessar enquete | 5 | 1 | |||
3 - Enviar resposta | 15 | 3 | |||
3 - Acessar home | 5 | 1 |
Cenário de uso #4 - Responsável | |||||
---|---|---|---|---|---|
Ação realizada | Think Time: Atraso constante (segundos) | Think Time: Desvio (segundos) | |||
4 - Clicar em "Novo evento" | 15 | 1 | |||
4 - Salvar evento | 15 | 2 | |||
4 - Acessar enquete | 5 | 1 | |||
4 - Enviar resposta | 15 | 3 | |||
4 - Acessar home | 5 | 1 |
Cenário de uso #5 - Logout | |||||
---|---|---|---|---|---|
Ação realizada | Think Time: Atraso constante (segundos) | Think Time: Desvio (segundos) | |||
4 - Clicar em "Sair" | 5 | 1 |
Resultado dos testes
Nesta seção serão apresentados os resultados obtidos da execução dos testes. Para identificação foram utilizadas as letras "R" e "A", sendo a primeira para identificar os resultados obtidos com a utilização do redis e a segunda para configuração com ASP.NET.
- Processador e disco
- Contador: Percentagem de tempo ocioso.
- Descrição: Este contador fornece quanto tempo o disco permaneceu em estado de repouso, ou seja, todos os pedidos do sistema operacional para o disco ter sido concluída e há zero de pedidos pendentes. Este contador varia de 100 (ou seja, sempre ocioso) para 0 (ou seja, sempre ocupado).
- Limite recomendado: Abaixo de 75 %.
- Análise: Grande parte do tempo encontra-se ocioso.
- Contador: Percentagem de espaço livre.
- Descrição: Mostra a porcentagem do espaço total utilizável no disco lógico selecionado.
- Limite recomendado: Acima de 25%.
- Análise: Aplicação está dentro do recomendado.
- Tempo total do processador.
- Descrição: Mede a utilização da CPU de cada processador.
- Limite recomendado: Não exceder 80% por mais de 10 minutos ao longo do período de teste.
- Análise: A aplicação em vários momentos durante a execução do teste chegou a utilizar 100% de processamento no processo W3wp.exe no servidor web que utilizava para o teste.
- Contador: Mudança de contexto.
- Descrição: A mudança de contexto ocorre quando o kernel muda o processador de um segmento para outro, por exemplo, quando um segmento com uma prioridade maior do que o segmento em execução torna-se pronto.
- Limite recomendado: O valor ideal recomendado é de no máximo 10000 por CPU.
- Análise: A aplicação encontra-se acima do recomendado.
- Memória
- Contador: Páginas/segundo.
- Descrição: Mede o número de páginas por segundo que são paginadas fora da memória RAM para a memória virtual.
- Limite recomendado: Se o número for alto indica falhas graves. O limite normalmente é de 20 páginas/s
- Análise: A aplicação apresentou diferentes tempos para o ARR, SQL e servidores Web. No ARR ficou dentro do recomendado, no SQL por sua vez, apenas com a utilização do redis e com até 100 usuários simultâneos a aplicação ficou dentro do recomendado. Nos demais casos a média do tempo de página/s foi superior ao recomendado. Indicam um delay no sistema utilizado.
- Contador: % Memória virtual comprometida.
- Descrição: Indica a percentagem da memória comprometida utilizada dentro do limite dado pela soma da memória RAM e Page File.
- Limite recomendado: Abaixo de 75% e que não tenha grande variação no indicador.
- Análise: Com a utilização do redis a aplicação encontra-se dentro do recomendado. Quando utiliza o ASP.NET é possível visualizar uma variação no indicador.
- Contador: Memória disponível em MBytes.
- Descrição: Indica quantidade de memória disponível para alocação em MBytes.
- Limite recomendado: Se o valor for inferior a 20/25 por cento de RAM instalada é uma indicação de memória insuficiente. Menos de 100 MB é uma indicação de que o sistema é muito carente de memória e paginação.
- Análise: Os servidores web aproximam-se bastante dos limites recomendados.
- Network
- Contador: 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: O tráfego na rede ocorre devido a possibilidade de conexão e sem perda de sessão durante os testes. Sem o uso do redis não é possível realizar uma quantidade de login satisfatória para que tenha tráfego na rede.
- Contador: Falhas de conexão (TCP)
- Descrição: Este é o número bruto de conexões TCP que falharam desde que o servidor foi iniciado. Uma falha normalmente indica uma perda de dados em lugar no processo. A perda pode ocorrer em muitos locais. Esta poderia ser uma indicação de um outro dispositivo que está sendo para baixo, ou problemas com a configuração do lado do cliente do software.
- Limite recomendado: Quanto menor melhor.
- Análise: Grande ocorrência de falhas nos servidores webs a partir de 100 usuários simultâneos conectados.
- SQL
- Contador: Expectativa de vida da página.
- Descrição: Indica o número em segundos que uma página vai ficar na área de buffers, sem referências.
- Limite recomendado: Quanto menor melhor.
- Análise: Com a utilização do redis o sistema possui quantitativo satisfatório.
- WEB
- Contador: Requests/sec.
- Descrição: Mostra o número de requisições por segundo que seu site está atendendo. Na maioria das aplicações este número é relativamente baixo não passando de 5 ou 10 já que pra que este contador seja incrementado é necessário que as requests sejam executadas exatamente no mesmo segundo. Isto geralmente acontece em duas situações: você tem vários usuários acessando sua aplicação ao mesmo tempo ou caso suas requisições demorem muito pra terminar a execução.
- Limite recomendado: O número é relativamente baixo não passando de 5 ou 10.
- Análise: Com a utilização do redis o sistema possui quantitativo satisfatório.
- IIS
- Contador: Current Applicantion Pool Uptime.
- Descrição: Permite que você veja se o pedido tiver sido reiniciado ou não.
- Limite recomendado: Quanto menor melhor.
- Análise: Com a utilização do redis com até 100 usuários simultâneos conectados o sistema possui quantitativo satisfatório.
- Redis
- Descrição: Dados do redis disponibilizados pela equipe do DevOps para comparativos.
- Usuários simultâneos: 50 usuários.
- Descrição: Dados do redis disponibilizados pela equipe do DevOps para comparativos.
- Usuários simultâneos: 100 usuários.
- Descrição: Dados do redis disponibilizados pela equipe do DevOps para comparativos.
- Usuários simultâneos: 150 usuários.
- JMeter
- Descrição: Quantidade total de samplers.
- Descrição: Quantidade total de samplers.
- Descrição: Porcentagem de erro total.
- Descrição: Vazão.