Ir para conteúdo

Arquivado

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

José Peixoto

Plano de execução no oracle

Recommended Posts

Olá a todos!

 

Eu gostaria de saber como funciona um plano de execução no Oracle e se isso é comumente usado nas empresas hoje.

Eu procurei materiais na internet e não achei nada claro, porque estou tentando otimizar umas consultas.

 

Obrigado desde já.

 

Abraço!

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O material na WEB é amplo até demais , comece lendo o básico

 

Tabela explain_plain 

Gerar o plano de execução

Uso de HINTS

Coleta de estatísticas 

Uso de índices

 

Programas como SqlDevelopers e similares já tem funções prontas que geram o plano de execução.

 

Pessoalmente acho boa prática executar e analisar o plano para sqls que serão executados de forma recorrente no ambiente em que serão executadas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por JullySL
      Olá, criei um projeto em asp.net mvc 5 com sites multiplos para o cliente escolher o seu modelo de layout.
      Porém estou com um problema de "processamento" ao meu ver e gostaria de otimizar isso.
      Todo método do meu controller estou precisando chamar uma ViewModel nela ele Lê o cliente e todas informações do web site do cliente, gostaria de saber se isso é realmente necessário ou tem uma forma melhor de ser feito? Vou postar um exemplo:
       
      ViewModel:
              public HomeViewModel(string website)
              {
                  var uow = new UnitOfWork();
                  var contratante = uow.ClienteRepositorio.Buscar(c => c.WebSite == website);
                  Tema = contratante.Registro;
                  IdCliente = cliente.Id;
                  MetaKeywords = "teste metakey";
                  MetaDescription = " teste metaDescription";
                  FavIcon = "caminhodafoto";
                  [demais campos]
              }
       
      Controller
      1º método
              public ActionResult Index()
              {
                  var dominio = Tema.TemaAtual();
                  homeViewModel = LerDominio(dominio);

                  return View("~/Views/Tema/"+homeViewModel.Tema+"/Home/Index.cshtml", homeViewModel);
              }

      2º método
      public ActionResult Servicos()
              {
                  var dominio = Tema.TemaAtual();
                  homeViewModel = LerDominio(dominio);
                  return View("~/Views/Tema/"+homeViewModel.Tema+"/Home/Servicos.cshtml");
              }
      Agradeço a ajuda de vcs
    • Por Guilherme Luiz
      Olá pessoal,
       
      Tenho a seguinte consulta
        $queryList  = "SELECT     sms.id        as id,     sms.mobile    as mobile,     sms.ddi       as ddi,     sms.send_date as dataEnvio,     sms.dlr_date  as dataDlr,     sms.status    as status,     sms.substatus as descricao,     sms.route     as rota,     sms.cost      as tarifa,     sms.currency  as moeda,     w.flag        as flag,     w.country     as pais,     ctt.nome      as nome     FROM sms_mt   as sms     INNER JOIN worldwide as w ON w.ddi = sms.ddi     LEFT JOIN (SELECT concat(ddi,mobile) as mobile, nome as nome FROM phonebook WHERE user_id='{$userID}') as ctt on ctt.mobile = sms.mobile     WHERE sms.user_id='{$userID}' and sms.campaing_id='{$x['id']}'     UNION ALL     SELECT     sms.id        as id,     sms.mobile    as mobile,     sms.ddi       as ddi,     sms.dlr_date  as dataEnvio,     sms.dlr_date  as dataDlr,     sms.status    as status,     sms.substatus as descricao,     sms.route     as rota,     sms.cost      as tarifa,     sms.currency  as moeda,     w.flag        as flag,     w.country     as pais,     ctt.nome      as nome     FROM sms_mo   as sms     INNER JOIN worldwide as w ON w.ddi = sms.ddi     LEFT JOIN (SELECT concat(ddi,mobile) as mobile, nome as nome FROM phonebook WHERE user_id='{$userID}') as ctt on ctt.mobile = sms.mobile     WHERE sms.user_id='{$userID}' and sms.campaing_id='{$x['id']}' and sms.billed=1     ORDER BY dataEnvio DESC";     $sqlList = mysqli_query($connect_sql,$queryList);     while($list = @mysqli_fetch_assoc($sqlList)){       $stats[] = [         "id"        => (int)$list['id'],         "mobile"    => $list['mobile'],         "flag"      => "/includes/images/flags/{$list['flag']}.png",         "ddi"       => $list['ddi'],         "pais"      => $list['pais'],         "nome"      => ((empty($list['nome'])) ? null : $list['nome']),         "dataEnvio" => date("d/m/y H:i:s A", strtotime($list['dataEnvio'])),         "dataDlr"   => date("d/m/y H:i:s A", strtotime($list['dataDlr'])),         "status"    => $list['status'],         "desc"      => $list['descricao'],         "rota"      => $list['rota'],         "tarifa"    => $list['tarifa'],         "moeda"     => $list['moeda']       ];     } Onde eu tenho a seguinte estrutura de tabelas
       
      sms_mt

       
      sms_mo

       
      Com a consulta que estou utilizando, eu estou tendo problemas de atraso na resposta.
      Para consultas com mais de 3.000 registros, minha aplicação demora mais de 2 minutos para trazer tais resultados. o que eu acho muito tempo.
      Se eu faço uma pesquisa de mais de 20k de linhas, a aplicação demora mais de 8 minutos...
       
      Essa consulta eu puxo sem paginação porque a faço através do PHP + AngularJs que aplica a paginação com base no objeto json total recebido do banco de dados.
       
      Como posso otimizar essa query ou a tabela para ter melhor performance?
      Todas as colunas com a chavinha cinza de indice, estão agrupadas num indice indez unico.
    • Por ndias
      Alguém pode me ajudar?
       
      Tenho a seguinte query:
      select cc.CampoConhecimento, COUNT(distinct(cc.idCv)) as Total, count(CASE WHEN cc.NivelConhecimento = 1 OR cc.NivelConhecimento = 0 OR cc.NivelConhecimento IS NULL THEN 'Basico' ELSE NULL END) as Basico, count(CASE WHEN cc.NivelConhecimento = 2 THEN 'Intermediario' ELSE NULL END) as Intermediario, count(CASE WHEN cc.NivelConhecimento = 3 THEN 'Avancado' ELSE NULL END) as Avancado from tblCurriculoConhecimento cc inner join tblCadastro_Curriculo_Incompleto cv on cv.IdCV = cc.idCV where cv.Ativo = 'S' and (cv.Sexo = 'M' or cv.Sexo = 'F') and cv.Excluido = 'N' and ((YEAR(CURDATE())-RIGHT(REPLACE(cv.DtNascimento, '/', ''),4) >= 16 or (datediff(YEAR(ifnull(date(cv.DataUpdate),date(cv.DataCadastro))),CURDATE()) + YEAR(CURDATE())-RIGHT(REPLACE(cv.DtNascimento, '/', ''),4)) >= 16) and (YEAR(CURDATE())-RIGHT(REPLACE(cv.DtNascimento, '/', ''),4) <= 97 or (datediff(YEAR(ifnull(date(cv.DataUpdate),date(cv.DataCadastro))),CURDATE()) + YEAR(CURDATE())-RIGHT(REPLACE(cv.DtNascimento, '/', ''),4)) <= 97)) group by cc.CampoConhecimento order by cc.CampoConhecimento asc; Que em 40s me retorna isso:
      Access 53593 42482 8937 2174 ASP 13271 12963 241 67 AutoCad 20740 15637 3335 1768 C 15261 13903 1093 265 CMais 15666 14284 1118 264 Cobol 12826 12670 109 47 CorelDraw 22418 18069 3192 1157 CSS 33043 27538 4350 1155 Dbase 13049 12839 167 43 Delphi 13226 12901 248 77 Dreamweaver 16216 14578 1223 415 Excel 110420 50002 43771 16647 Flash 17492 15713 1370 409 HTML 50819 38377 9210 3232 Java 15566 14204 1092 270 JavaScript 37677 31640 4869 1168 Linux 19782 17101 2141 540 Macintosh 15491 14245 854 392 MSSQLServer 32612 28300 3625 687 MySQL 32499 27919 3786 794 Net 13734 13095 472 167 Oracle 13711 13240 400 71 Outlook 31534 17714 8555 5265 Photoshop 25695 19547 4478 1670 PHP 14189 13439 594 156 PowerPoint 108758 46837 41646 20277 Sharepoint 12803 12657 102 44 Windows 34045 16383 10059 7603 Word 112999 39167 45279 28554 Para esse resultado eu criei os índices:
      ALTER TABLE tblCurriculoConhecimento ADD INDEX (idCV,CampoConhecimento,NivelConhecimento); ALTER TABLE tblCurriculoConhecimento ADD INDEX (CampoConhecimento,idCV); ALTER TABLE tblCadastro_Curriculo_Incompleto ADD INDEX (Sexo,Ativo,Excluido,DtNascimento,DataUpdate,DataCadastro,Estado,Cidade,TipoDeficiencia,Instituicao,Curso,Dia,Ano,Nome,CPF,Email); O cv.IdCV é um PRMARY KEY. Eu adicionei no INDEX campos a mais em relação a esta consulta, porque em certos momentos eles serão usados. O EXPLAIN tá me retornando isso:
      1 SIMPLE cv index PRIMARY Sexo 1335 null 203349 Using where; Using index; Using temporary; Using filesort 1 SIMPLE cc ref idCV idCV 5 cv.IdCV 4 Using where; Using index Eu queria saber aonde estou errando. Porque minha index "Sexo" não está sendo usada corretamente. E como posso melhorar isso.
       
      Por favor.
       
      Obrigado,
    • Por Gemenson Miranda
      Olá pessoal, estou com problemas com URL amigáveis, no servidor local está tudo ok, funciona perfeitamente, sem problemas, mas quando passei todos os arquivos para o servidor da minha hospedagem da sempre erro (The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.) nas páginas onde a URL amigável atua, já tentei alterar as permissões dos arquivos no servidor, coloquei uma TAG <base href="http://meusite.com.br/">, já fiz de tudo que achei que poderia ta causando erros, abaixo o código do meu .htaccess, quem puder me ajudar a identificar o erro agradeço!
      RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^list/(.*)/(.*)$ list.php?page=$1&var=$2 RewriteRule ^list/(.*)$ list.php?page=$1 RewriteRule ^midia/$ midia.php?url=$1 RewriteRule ^criar/$ criar.php?url=$1 RewriteRule ^log/$ log.php?url=$1 RewriteRule ^register/$ register.php?url=$1 RewriteRule ^medidas/$ tamanhos_medidas.php?url=$1 RewriteRule ^showcase/(.*)/([0-9]+)$ showcase.php?produto=$1&item=$2  
    • Por felipe_chipset
      Fala galera, gostaria de tirar uma dúvida teórica (WEB)

      Qual vocês consideram a melhor maneira de otimizar imagens de um site para web dado o seguinte Cenário.

      Zend 3 ou Cakephp3
      S3 (para armazenar as imagens)
       
      O cliente sobe as imagens (no tamanho que ele quiser)
      Eu tenho que diminuir o tamanho dessas imagens por script (para o site não demorar 30 segundos para abrir no browser a imagens de upload quando o site for aberto).

      Minhas dúvidas são.. 

      O que vocês utilizariam para melhorar a performance ao carregar essas imagens de forma mais rápida possível?
      Qual processos utilizariam para diminuir o tamanho das imagens (biblioteca ou qualquer coisa do tipo em PHP)?
×

Informação importante

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