Autor Tópico: Consulta em Oracle pesada  (Lida 245 vezes)

Piwtorak

  • Novato
  • *
  • Mensagens: 23
Consulta em Oracle pesada
« Online: Maio 16, 2016, 08:27:22 pm »
Salve !

estou fazendo uma consulta simples numa tabela Oracle que tem 9xx.xxx registros....(quase 1 milhao mesmo)......
o servidor é um poweredge da Dell com 32gb ram e um processador Xeon...

esta levando uns 3 minutos para que mostre a consulta.....

o que pode ser feito para agilizar a mesma uma vez que vai ser inevitavel no projeto a extracao de dados dessa tabela....

agradeço antecipadamente aos colegas com experiencia na manipulacao desse volume de dados...




Haroldo

  • Expert
  • *****
  • Mensagens: 6293
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Consulta em Oracle pesada
« Responder #1 Online: Maio 16, 2016, 09:06:11 pm »
minere os dados, crie índices específicos, ou até mesmo exporte para uma tabela temporária para depois apresentar na consulta.


Jailton

  • Expert
  • *****
  • Mensagens: 2041
Re:Consulta em Oracle pesada
« Responder #2 Online: Maio 16, 2016, 09:42:52 pm »
Mesmo você minerando os dados, etc, vai existir casos pelo 'volume' de informação a ser processada, que a página do PHP vai 'cair' pelo tempo parado, mas na hospedagem
o código vai continuar rodando até a conclusão do mesmo.

Normalmente nesses casos, eu faço um cálculo de tempo média quanto vai demorar para executar o a quantidade de registros que o usuário solicitou, coloca para executar
o código do usuário pedido e redireciono para uma página blank com o tempo 'de execução' até finalizar e uma flag em uma tabela para mostrar que foi finalizado e o usuário
poder dar prosseguimento depois deste tempo na tarefa, enquanto isso ele pode fazer outras coisas no sistema.

Eu uso esse método em um cliente que faz entregas de email marketing de fez em quando, e geração de boletos tipo carnês de outro, que ele gera todos os dados
depois o cliente finaliza importando para um aplicativo local que vai fazer a impressão tipo carnê.

Exemplo:
Código: [Selecionar]
// PEGA VARIÁVEL PASSADA DIRETAMENTE POR LINK

$Qtde_x=[glo_Qtde_Envios_Limite];

$Tempo_x=$Qtde_x/20;

if ($Tempo_x<1) {
    $Tempo_x=2;
}

$Termino_x=Somar_Hora('M', $Tempo_x, 1);




?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Untitled 1</title>
<style type="text/css">
div.WordSection1
{page:WordSection1;}
 p.MsoNormal
{margin-top:0cm;
margin-right:0cm;
margin-bottom:8.0pt;
margin-left:0cm;
line-height:107%;
font-size:11.0pt;
font-family:"Calibri","sans-serif";}
</style>
</head>

<body>

<div class="WordSection1">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;">
<span style="font-family: &quot;Times New Roman&quot;,&quot;serif&quot;; font-size: 12pt;">
<br />
<br />
<br />
</span></p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;">
<span style="font-family: &quot;Times New Roman&quot;,&quot;serif&quot;; font-size: 12pt;">
&nbsp;</span></p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;">
<span style="font-family: &quot;Times New Roman&quot;,&quot;serif&quot;; font-size: 12pt;">
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></p>
<table border="1" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="margin-left: 3cm; border-collapse: collapse;">
<tr>
<td style="background: rgb(197, 224, 179); padding: 0cm 5.4pt; border: 1pt solid windowtext; width: 424.7pt;" valign="top" width="566">
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;">
&nbsp;</p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;">
&nbsp;</p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;">
<span style="background: yellow; color: red;">Enviando E-mails...</span></p>
<p align="center" class="MsoNormal" style="text-align: center; line-height: normal; margin-bottom: 0pt;">
<span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; font-size: 14pt;">
Termino em: <?ECHO $Termino_x;?> ...</span></p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;">
&nbsp;</p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;">
&nbsp;</p>
<p class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;">
&nbsp;</p>
</td>
</tr>
</table>
<p class="MsoNormal" style="line-height: 106%;">&nbsp;</p>
<p class="MsoNormal">&nbsp;</p>
</div>

</body>

</html>
<?php
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Piwtorak

  • Novato
  • *
  • Mensagens: 23
Re:Consulta em Oracle pesada
« Responder #3 Online: Maio 17, 2016, 12:13:17 pm »
Verdade, eu sempre vou ter 1mi de registros....
e sempre a sql inicial se deparará com eles mesmo que dela surjam menos registros para tornar
mais agil a consulta....
talvez algo mais permanente a nivel de banco....tipo uma tabela que ja fosse origem da grande com menos dados
onde de tempos em tempos eu pudesse (opcionalmente) atualiza-la....

obrigado pelas ideias....

Willian Fernando

  • Expert
  • *****
  • Mensagens: 1154
  • .....
    • Email
Re:Consulta em Oracle pesada
« Responder #4 Online: Maio 17, 2016, 12:58:15 pm »
Pense em criar partições, por tempos ou alguma outra escala