O que é e como utilizar ODP

De Wiki Locaweb
Ir para: navegação, pesquisa

Introdução

Em planos de Hospedagem e Revenda Windows, a Locaweb oferece a ferramenta ODP (Otimizador de Desempenho de Programas), que tem por finalidade oferecer dicas para a otimização de scripts desenvolvidos em ASP.
Esse aplicativo encontra pontos que muitas vezes passam despercebidos pelo programador, mas que podem melhorar o desempenho do seu site se forem otimizados.

O que faz o ODP?

O ODP faz indicações como:

  • Utilizar um driver conexão atualizado para o banco de dados;
  • Destruir objetos instaciados na memória; [Set nomedoobjeto = Nothing]
  • Fechar conexão com o banco de dados após a consulta/update/etc [nomedaconexao.Close()]
  • Consultas no banco de dados utilizando "SELECT *" [no lugar do "SELECT * FROM tabela", utilize "SELECT coluna1, coluna2 FROM tabela"];
  • Entre outras.


Acessando o Gerenciador de ODP

Para acessar o Gerenciador de ODP, siga as instruções abaixo (clique para expandir):

Mais clear.png Cliente de Planos de hospedagem:

Instruções Acesse o Painel de Controle da Locaweb e entre com seu login e senha;
Instruções Em Hospedagem de sites, clique em Gerenciar Site;
Instruções No menu à esquerda, clique em Ferramentas e, depois, em Otimizador de desempenho de programas;
Instruções Selecione a pasta a qual deseja executar o ODP;
Instruções Clique no ícone Odp0003.jpg Execução do ODP, do diretório que contém os scripts ASP a serem analisados pelo ODP.

ODP Locaweb

Mais clear.png Cliente de Planos de Revenda:

Instruções Acesse o Painel de Controle da Locaweb e entre com seu login e senha;
Instruções Em Revenda, clique em Gerenciar
Instruções No menu à esquerda, clique em Ferramentas e, depois, em Otimizador de desempenho de programas;
Instruções Selecione a pasta a qual deseja executar o ODP;
Instruções Clique no ícone Odp0003.jpg Execução do ODP, do diretório que contém os scripts ASP a serem analisados pelo ODP.

ODP Locaweb

Mais clear.png Cliente de Serviços Corporativos:

Instruções Acesse o Painel de Controle da Locaweb e entre com seu login e senha;
Instruções Em CLOUD COMPUTING ou SERVIDORES DEDICADOS, clique em Expandir.png Expandir Serviço/Recurso, localizado à esquerda do servidor onde deseja acessar o serviço.
Right-arrow-32.png Em Hospedagem Inclusa, clique em Administrar idc.jpg Administrar Serviço/Recurso;
Instruções No menu à esquerda, clique em Ferramentas e, depois, em Otimizador de desempenho de programas;
Instruções Selecione a pasta a qual deseja executar o ODP;
Instruções Clique no ícone Odp0003.jpg Execução do ODP, do diretório que contém os scripts ASP a serem analisados pelo ODP.

ODP Locaweb


Você pode deixar o ODP rodar a verificação no diretório escolhido e depois voltar a painel que estará disponível a verificação executada no diretório.

Como melhorar o desempenho de seu site com scripts em ASP

Seguem abaixo indicações para otimizações em seus scripts ASP em nosso servidor. Estas indicações são disponibilizadas através do ODP (Otimizador de Desempenho de Programas), que pode ser acessado pelo Painel de Controle, no link "Aplicativos".

Clique para expandir:

Mais clear.png Nao se deve usar Server.Mappath com o caminho absoluto

Prejudica: O Server.Mappath mapeia um caminho virtual então não é recomendado a utilização do mesmo indicando o caminho físico dentro de sua sintaxe, já que o resultado do mapeamento será este mesmo caminho.

Solução: Corrigir esses erros para uma sintaxe correta, como no exemplo abaixo:


<% 
Server.MapPath("test.asp") 
 
Server.MapPath("diretorio/test.asp") 
 
Server.MapPath("../diretorio/test.asp") 
%>


Mais clear.png Conexao - nome_da_variavel - aberta novamente com o mesmo nome. Por favor cheque se está correto

Prejudica: Não é necessário criar por mais de uma vez conexões com o mesmo nome, já que possivelmente esta conexão está fazendo o acesso a mesma base de dados. O problema é o desperdício de recursos de servidor, prejudicando a performance do seu site.

Solução: Conexões OLEDB permitem que você feche a conexão e reabra a mesma antes de destruí-la. Sugerimos ao invés de criar a conexão, fecha-la, abrí-la e depois refazer todo este processo. Faça isso somente com uma única conexão como no exemplo a seguir:

<% 
ConnString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\vhosts\SEU_DOMINIO_COMPLETO\private\banco_access.mdb;" 
Set Conexao = Server.CreateObject("ADODB.Connection") 
Conexao.Open ConnString 
Set Registros = Server.CreateObject("ADODB.Recordset") 
Registros.Open "Clientes", Conexao 
 
Código ASP 
 
Registros.Close 
Conexao.close 
 
Código ASP 
 
Conexão.Open 
Registros.open "nova_query", Conexao 
 
Código ASP 
 
Registro.close 
Conexao.close 
Set Registros=nothing 
Set Conexao=nothing 
%>

Isso também é válido para os Recordsets utilizados em seu script e minimiza a quantidade de conexõs e recordsets utilizados !

Mais clear.png Objeto nao foi destruido ao fim do arquivo !! - Variavel - nome_da_variável

Prejudica: Assim como conexões, os objetos ADO criados em seu script devem ser fechados e destruídos para que eles não fiquem dentro do servidor. Isso além de gerar queda na performance poderá impedir que você faça o download de sua base de dados (MS ACCESS) já que existirá um recordset ativo em que esta base irá entender que está ativa ou então deixar um outro objeto ADO existente dentro do servidor, que não será mais utilizado.

Solução: Fechar e destruir os objetos criados assim que os mesmos terminarem de ser utilizados.

Mais clear.png Utilizacao de On Error Goto ou On Error Resume Next. Programacao nao aconselhada. Checar se e realmente necessario ! - Variavel - nome_da_variável

Prejudica: O uso deste tratamento de erro pode dar enorme queda na performance das páginas. Um exemplo é se for utilizado em um script onde é aberta uma conexão que dá erro por algum motivo e usando o On Error para tratar o script, este vai para o próximo passo, ignorando o erro mas caso uma conexão ou recordset já esteja aberto, estes irão prosseguir com o processamento prejudicando o servidor.

Solução: Sempre será alertado em seu ODP a utilização desta prática de programação. Sugerimos utiliza-la somente quando realmente não houver uma outra alternativa e criar uma condição onde assim que identificado o erro todos os objetos e conexões sejam destruídos.

<% 
On Error Resume Next 
 
Código ASP 
 
If err.number <> 0 Then 
 
Fecha e destrói todos os objetos e conexões que foram criados 
 
End if 
%>

Atenção ! - O sucesso desta solução dependerá da lógica desenvolvida. O ideal é não utilizar esta forma de tratamento de erro.

Mais clear.png Uso de objeto para Upload. Recomendamos o SaFileUp.

Prejudica: Outros componentes para Upload de arquivo não são recomendados, pois utilizam muitos recursos do servidor.

Solução: O SaFileUp apresenta um bom desempenho para upload de arquivos. Veja um exemplo através do link http://ajuda.locaweb.com.br/pt-br/Safileup

Mais clear.png Mais de 5 Recordsets abertos na mesma pagina ! Verifique se e necessário

Prejudica: 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.

Solução: Verificar 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.

Mais clear.png Script /home/httpd/vhosts/SEU_DOMINIO_COMPLETO/httpdocs/script.asp com Timeout elevado ( > 60) - 10000 !!

Prejudica: Nossos servidores possuem o timeout configurado para 30 segundos, tempo suficiente para execução da maioria das tarefas. Um tempo superior a este irá gerar fila de scripts ASP dentro do web server, causando instabilidades em todo o servidor mas ao declarar o timeout em seu script, este prevalecerá em relação a configuração estabelecida dentro do IIS.

Solução: Rever as queries e a diagramação da programação desenvolvida, inclusive para uploads e não declarar um valor superior a 30 segundos em seu script. Caso realmente seja necessário um tempo maior é um indício de que sua aplicação necessitará de mais recursos de servidor do que um de ambiente compartilhado proporciona.

Mais clear.png Uso indevido de Driver de Conexao ao Banco de dados !! Deve-se usar OLEDB !!

Prejudica: Scripts desenvolvidos em ASP devem utilizar conexões do tipo OLEDB ao invés de ODBC / DSN. A conexão OLEDB gerencia automaticamente os processo de conexões em sua programação aproveitando as conexões abertas em sua aplicação e isso também ocorre ao fechá-la . Desta forma, o acesso a banco de dados estará otimizado, evitando o excesso de aberturas e fechamentos de conexão que ocorreria no código ASP utilizando conexão via ODBC / DSN.

Solução: Veja exemplos de conexão nesta página.

Mais clear.png Banco de Dados Access

Prejudica: A alguns anos atrás, quando a Microsoft identificou a possibilidade de utilizar o MS Access como banco de dados on-line -- até então ele era utilizado apenas localmente -- o adaptou para rodar on-line. Com o passar do tempo as linguagens de programação foram ficando cada vez mais pesadas e o banco de dados Access já não comportava tanta informação, gerando erros de comunicação, corrompendo o banco e gerando sobrecargas nos servidores.

Uma base de dados Access leva um tempo excessivo para processar suas queries, mesmo que apenas uma consulta simples, prejudicando o desempenho de seu site e do servidor onde ele se encontra hospedado. Essas sobrecargas podem derrubar um site ou todos da Revenda.

Solução: Sugerimos migrar o banco de dados para um mais robusto, como o MSQ SQL ou MySQL, por exemplo. Assim você evitará problemas e oferecerá mais qualidade e desempenho aos seus clientes.

Mais clear.png Conexao nao foi fechada !! - Variavel - nome_da_variável

Prejudica: Criar conexões e não fecha-las e destruí-las após serem utilizadas acarretará nova perda de performance em seu site. Isso ocorre porque seu banco de dados "entenderá" que novas ações ocorrerão e ficará aguardando as instruções de seu script, que não ocorrerá, já que o mesmo terminou suas tarefas. Com acessos simultâneos isso tende a aumentar essa lentidão, já que várias conexões serão abertas por novos usuários e irão somar-se junto com as que já estão abertas, que o script não destruiu.

Solução: Fechar e Destruir todas as conexões que não serão mais utilizadas após o término da execução do script utilizado.

Mais clear.png Nao utilizar VBScript.Encode !! Consumo excessivo de recursos

Prejudica: 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.

Solução: 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 clear.png Objeto Dictionary nao teve itens removidos !! - Variavel - nome_da_variavel

Prejudica: O Objeto Scripting.Dictionary armazena os valores adicionados a ele na memória do servidor e caso as mesmas não sejam destruidas irá permancer ocupando lugar na memória do servidor, mesmo não estando em uso.

Solução: Uma solução é ao invés de armazenar essas informações em um Scripting.Dictionary, transmitir esses dados através de campos "hidden" através de um formulário. Desta forma evita-se o processamento do servidor e você conseguirá enviar esses valores de uma página para outra.

Mais clear.png Arquivo - /home/httpd/vhosts/SEU_DOMINIO_COMPLETO/httpdocs/nome_do_arquivo.txt - e maior que 1 Mb !!

Prejudica: Desenvolver páginas dinâmicas que façam consultas a arquivos com essas extensões com uma tamanho superior a 1MB irá gerar fila de scripts, além de poder levar a um pico de processamento por parte do servidor causando uma queda significativa na performance do mesmo.

Sugestão: Para armazenamento de dados utilize uma base onde você poderá maximizar o desempenho através de queries para uma filtragem mais rápida. Caso seu arquivo .htm ou .html possua mais do que 1MB divida-o em várias páginas ligando-as através de um link ou menu de navegação.

Mais clear.png Variavel de objeto - nome_da_variavel - utilizada em Session/Application !!

Prejudica: 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

Solução: Crie os objetos diretamente no script que irá utiliza-lo e destrua o mesmo assim que a utilização for concluída.

Mais clear.png SQL se conectando fora da rede - Isso pode causar serias penalizações de performance

Prejudica: O Problema com a utilização de uma base MS SQL externa a rede da Locaweb poderá deixar seu site fora com a queda ou instabilidades do mesmo, nos forçando a desativar temporariamente o serviço ASP do seu site para não gerar fila de scripts. Essa fila ocorrerá porque seu script aguardará o retorno das informações do banco de dados levando o próximo script a ser interpretado pelo web server a aguardar o processamento do seu que não ocorrerá, causando instabilidades em todo o servidor onde se encontra sua hospedagem.

Solução: Utilizar uma base que esteja sob monitoração 24 horas da Locaweb, já que caso ocorra um problema técnico poderemos encontrar alternativas para que o servidor onde se encontra sua hospedagem não venha a cair ou apresentar lentidão e instabilidades.


Atenção: Os códigos mencionados acima são somente exemplos. Caso haja dúvidas quanto sua utilização, sugerimos que verifique juntamente a um desenvolvedor de sua confiança.


Veja também