Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ranniere Silva

Páginas extremamente lentas

Recommended Posts

Boa Tarde a todos.

 

Eu já tentei de tudo mas não conseguir achar o erro de porque minhas páginas estão tão lentas.

 

Minha máquina é um Vista que tem o IIs 7 instalado e eu tenho páginas desenvolvidas em asp, minhas conexões com banco estão corretas e o sistema é relativamente simples.

Mas se tento abrir alguma página nele ele fica lento a bessa, apenas as páginas, o micro fica tranquilo mas o acesso as páginas fica muito lento. Eu tenho um menu que quando você clica no link ele busca as informações do BD para gerar esse menu e esse processo é o mais demorado de todos.

 

Já estou sem ideias e nem sei o que fazer...

Antes no iis 6 rotada de boa...

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá uma olhada nestes itens e verifique se o IIS esta configurado corretamente

 

Cursores de Recordset

 

O tipo e a localização do cursor do recordset podem mudar drasticamente a performance da sua aplicação ASP.

 

A propriedade CursorLocation determina onde ficará o controle do cursor: Client ou Server. Sempre que possível utilize o cursor Server, se for necessário utilizar cursor Client, garanta que poucos registros serão retornados. O cursor Client traz todo o recordeset para a memória, e no caso de aplicação Web, fica na memória do Web-Server, um cursor Client com muitos registros em uma página que tem muitos acessos simultâneos pode gerar graves conseqüências.

 

A propriedade CursorType determina o tipo de cursor a ser usado: ForwardOnly, KeySet, Dynamic, Static. Em 90% dos casos o cursor ideal é o ForwardOnly pois é o cursor que tem menos recursos e menos custo. Evite atualizar, inserir e deletar registros através de cursores, prefira stored procedures ou instruções SQL.

 

 

 

Alternação entre códigos ASP e HTML '<% %>'

 

Evite ficar alternando entre códigos ASP e HTML <% %>, a alternação entre códigos afeta diretamente a performance da página.

Abaixo segue exemplo de como melhorar a performance de suas páginas retirando a alternação entre códigos:

 

Código de baixa performance:

 

 

<%Do Until rsLinks.EOF %> 
'<a href="<%=rsLinks("URL")%>"><%=rsLinks("NomeSite") %></a> 
'<%rsLinks.MoveNext%> 
'<%Loop%>

Código de alta performance:

 

 

 

<%Do Until rsLinks.EOF 
'Response.Write "<a href=""" & rsLinks("URL") & """>" & rsLinks("NomeSite") & "</a>" 
'rsLinks.MoveNext 
'Loop%>

 

Uso de funções / Variáveis de módulo

 

Nunca escreva grandes trechos de códigos diretamente nas páginas, no formato conhecido como código lingüíça. Use sempre Subs ou Functions para estruturar seu código. Um código bem estruturado facilita a manutenção e evita o uso desnecessário de recursos.

Limite-se ao uso de If ou Select Case e chamadas de funções diretamente na página.

Declare as variáveis dentro das funções ou subs, desta maneira menos recursos serão gastos. Em alguns casos são necessárias algumas variáveis de módulo para uso em várias funções, limite-se a variáveis de tipo simples (inteiras, strings, boleanas e etc), nunca declare variáveis do tipo Recordset fora de funções (em módulo).

 

 

Conversões Explicitas (Tipos de variáveis)

 

As linguagens de script não possuem tipos de variáveis declarados, para garantir a segurança e estabilidade de aplicação utilize sempre conversões ao atribuir valor às variáveis. Exemplo:

'intCdAssunto = CInt(Request.QueryString("CdAssunto"))

 

Includes

 

O uso de includes é muito útil e recomendado. Porém você precisa saber como os includes funcionam para utilizá-los de forma correta.

O Web-Server (IIS) substitui as chamadas dos includes pelos seus respectivos códigos antes de qualquer outra ação. Portanto a página ASP só será processada após todos os includes serem substituídos. Abaixo algumas dicas para o uso dos includes:

 

Não utilize includes de forma indiscriminada, pois quanto mais includes existirem em suas páginas mais tempo elas irão demorar para serem processadas.

Utilize os includes para uso de funções comuns.

Não utilize includes para estruturar o site, se uma página possuir um If ou um Select Case para escolher qual include utilizar, então, está na hora de você pensar em transformá-la em duas ou mais páginas distintas.

Nunca utilize duas chamadas do mesmo include na mesma página, se for necessário utilizá-lo duas ou mais vezes, transforme-o em uma função, declare o include no topo da página e efetue a chamada da função quantas vezes forem necessárias.

Evite o uso de includes dentro de includes, isso gera muita confusão no código.

 

Request

 

Evite o uso do Request("atributo"), sempre que possível utilize a coleção à qual você deseja efetuar o Request (Request.Form, Request.QueryString, Request.Cookies). O uso do Request deixa a página mais lenta.

 

Sessions

 

As variáveis de Session são muito úteis, porém perigosas. Uma variável Session ocupa espaço diretamente na memória RAM do servidor.

Recomenda-se armazenar em Session apenas o informações do tipo Id do usuário e controles de acesso, as demais informações devem ser armazenadas em Cookies

 

Você pode desabilitar o controle de Sessão em páginas que não necessitam, isso economiza recursos. Para desabilitar o controle de Sessão utilize o comando abaixo:

'<%@ EnableSessionState=False %>'

 

 

Leitura/Atribuição de Coleções (Request, Session, Application, Recordset, etc...)

A leitura e atribuição de valores à coleções é um processo lento, se sua página efetua repetidas leituras ou atribuições à coleções (Request.Form("parametro"), Request.QueryString("parametro"), Session("variavel"), Application("variavel") ou RecordSet("campo")) atribua o valor a uma variável e sempre que necessário utilize a variável.

 

Tratamento de Erro

 

O tratamento de erro em ASP é um grande problema, mas existe uma ótima solução para resolver a deficiência do ASP.

O On Error Resume Next é o único tratamento possível, porém se for usado de forma errada ele torna-se péssimo.

 

Veja o exemplo abaixo do uso do On Error Resume Next:

 

<% 
'On Error Resume Next


'Call SuaFuncao()

'If Err.Number <> 0 Then

'Call LogarErros() 
'End If


'On Error Goto 0


'Sub SuaFuncao() 
... 
'End Sub


'Sub LogarErro() 
'Response.Write "Ocorreu um erro inesperado (" & Err.number & " - " & err.Description & ")"
'Response.End
''SEU CÓDIGO PARA LOGAR EM BANCO DE DADOS, EVENT VIEWER, EMAIL, ETC... 
'End Sub 
'%>
Option Explicit

 

Alternação entre códigos ASP e HTML '<% %>'

Uso de funções / Variáveis de módulo

Sessions

Leitura/Atribuição de Coleções (Request, Session, Application, Recordset, etc..)

Conversões Explicitas (Tipos de variáveis)

Includes

Request

Cursores de Recordset

Tratamento de Erro

 

Option Explicit

Utilize sempre a opção Option Explicit em suas páginas ASP.

Utilizando Option Explicit, além de melhorar a performance das páginas você detectará erros de digitação imediatamente, evitando horas de depuração de código para descobrir que o problema era uma variável com alguma letra trocada.

 

Variavel de objeto - nome_da_variavel - utilizada em Session/Application

Armazenar um objeto ADO numa variável Session/Application, manterá um objeto criado aberto continuamente por cerca de 20 minutos fazendo com que a performance se seu site ou aplicação caia, principalmente com o aumento de acessos simultâneos.Para isso crie os objetos diretamente no script que irá utiliza-lo e destrua o mesmo assim que a utilização for concluída.

 

Nao utilizar VBScript.Encode

Mesmo sendo possível a utilização do Windows Script Encoder a utilziação deste poderar gerar um pico no processamento dentro dos nossos servidores.Certifique-se que realmente é necessário seu uso. Geralmente a utilização desta encriptação é utilizada em funções críticas, onde contenha dados como os de usuario e senha de banco de dados.

 

Mais de 5 Recordsets abertos na mesma pagina

Instanciar vários recordsets em um mesmo script irá causar além de lentidão a possibilidade de derrubar nossos servidores, dependendo da query, da base de dados utilziada e do tamanho que esta base possui.Verifique se todos os Recorsets criados são realmente necessários. Uma alternativa é de utilizar o mesmo recordset criado para uma mesma base fechando-o e reabrindo-o com uma nova query e destruí-lo quando a utilização do mesmo não for mais necessária.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Todas as páginas ficam lentas? Você já testou em outro servidor?

 

Existe a possibilidade ser problema com o drive de conexão com o banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça um teste com um bd novo e uma consulta simples...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opaa obrigado pelas dicas...

já estou trabalhando com boa parte delas o que falta é apenas configurar os tipos de cursores, vou tentar fazer isso agora.

 

O estranho é que essa mesma aplicação em um XP ou Server 2003 funciona de boa, com ótimo tempo de resposta.

E o meu IIS7 está configurado de forma correta a não ser que exista alguma coisa BEM especifica para configurar, mas o básico para funcionamento já está configurado.

 

Eu também testei utilizando outro banco de dados, access, e a lentidão é a mesma.

 

E na verdade a lentidão está quando eu tenho alguma tarefa com o banco, mas não são todas, isso que é mais confuso.

Apenas algumas estão causando tal lentidão.

 

Vou testar o CusorType...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá...

Pois bem verifiquei todas as dicas acima e deixei o meu sistema conforme especificado, mas ainda assim continua lento.

Não houve mudanças.

 

Será que pode ser alguma configuração do BD?

 

Se o problema for no driver de comunicação com o banco, como devo proceder para ajustar ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Suas páginas possuem On Error Resume Next? Se possuírem, remova e faça o teste.

 

Qual banco de dados está utilizando? Se possível, poste o código de uma das páginas que está com problemas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique Tb a conexão com o bd junto com as consultas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, Bom dia pessoal!

Acabei de "descobrir" qual é o problema, na verdade onde está, é no bd mesmo.

 

O estranho é que o SQL Server de 20 mil que comprei está mais lento que a versão express que é de graça.

 

Eu sempre trabalhei com o SQL Express desde a versão MSDE 2000 e nunca tive esse tipo de problema.

Mudamos o processo de softwares da empresa e tivemos acesso a versão full do SQL e não pensei duas vezes, já instalei e configurei ele corretamente. Só que ele está muito lento comparado ao Express, lento eu digo ter que esperar 1 minuto para abrir um menu na web que vem desse bd, impossível de trabalhar.

 

E como sempre acontece a última tentativa resolveu, eu, por desencargo de conciência, fiz uma copia do BD que tá na versão full para a versão Express mudei minha linha de conexão e não deu outra o sistema voltou a rodar tranquilamente como eu já era acostumado.

 

Agora fica a dúvida, pois meus bancos de dados são exatamente iguais, nome, local, tamanho, tudo! E na versão full fica lento a bessa.

 

Existe alguma informação sobre isso? Eu já verifiquei toda a configuração dos dois para comparar e estão iguais, tirando a parte de autenticação, no full eu tenho senha setada do usuário SA no express não! Será que pode ser isso? Pelo meu sistema ser o Vista Premium? Algo relacionado ao UAC?

 

 

ENFIM, Obrigado a ajuda de todos! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

hargon, vlw por mover ^^

 

Ranniere, a versao Full do SQL roda bem mais processos internos que o express.

Ambos estao no mesmo servidor? O SQL Full esta com os services packs instalados? Para saber, rode esta linha de comando abaixo e retorne por favor:

 

SELECT SERVERPROPERTY('servername') As "Nome do Servidor",
SERVERPROPERTY('productversion') As Versão,
SERVERPROPERTY ('productlevel') As "Service Pack", 
SERVERPROPERTY ('edition') As Edição,
@@Version As "Sistema Operacional"

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

hargon, vlw por mover ^^

 

Ranniere, a versao Full do SQL roda bem mais processos internos que o express.

Ambos estao no mesmo servidor? O SQL Full esta com os services packs instalados? Para saber, rode esta linha de comando abaixo e retorne por favor:

 

SELECT SERVERPROPERTY('servername') As "Nome do Servidor",
SERVERPROPERTY('productversion') As Versão,
SERVERPROPERTY ('productlevel') As "Service Pack", 
SERVERPROPERTY ('edition') As Edição,
@@Version As "Sistema Operacional"

Abçs

 

Segue as informações solicitadas:

RANNIERE-NT 9.00.4035.00 SP3 Developer Edition Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59 Copyright © 1988-2005 Microsoft Corporation Developer Edition on Windows NT 6.0 (Build 6001: Service Pack 1)

 

 

 

E sim todos os services packs estão instalados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.