Páginas

17 de out. de 2014

Otimizando a performance de SQL distribuído


Olá pessoal,
  
     No post de hoje estou compartilhando um vídeo em que explico como otimizar uma consulta que faz um JOIN entre 2 tabelas localizadas em Bancos de Dados distintos: 1 tabela local e 1 tabela remota, acessada via dblink (ver Imagem 01). Em curtas palavras, uma instrução SQL distribuída.


Imagem 01 - Acesso remoto via dblink

      Este tipo de consulta existe normalmente em médias e grandes empresas, que possuem N bancos de dados que precisam comunicar-se uns com os outros, trocar dados etc. Para otimizá-la utilizaremos o hint DRIVING_SITE, que eu conheci há muito tempo (estudando SQL Tuning), mas que consegui utilizar somente ontem, no momento em que um Desenvolvedor da empresa em que trabalho entrou em contato comigo para ajudá-lo a otimizar um SQL com as características mencionadas. Este SQL estava demorando aproximadamente 30s para executar. Adivinha o que eu fiz para otimizá-lo e fazer com ele fosse executado em apenas 0,5s? A resposta está no vídeo que compartilhei através deste LINK.

Obs.: O vídeo está protegido com senha.Para recebê-la assine a newsletter que encontra-se no painel direito deste blog.

     Qualquer dúvida sobre o assunto, é só deixar um comentário neste post!
  
  
[]s

10 comentários:

  1. Belo Post Fabio,

    Aprendo bastante em seu blog.....alias, poderia fazer um post sobre Wallet no futuro? Encrypt, etc!!

    Abs

    ResponderExcluir
    Respostas
    1. Olá Peter, obrigado pelo comentário. O post sobre wallet entrará na fila!

      []s

      Excluir
  2. Bom dia,
    Fiz o cadastro conforme orientação para obter a senha para assistir ao vídeo, contudo não recebi a senha.

    ResponderExcluir
    Respostas
    1. Me manda e-mail que eu verifico seu cadastro e te mando a senha.

      []s

      Excluir
  3. Fiz a inscrição e confirmou.
    Para receber a senha tenho que enviar e-mail para esse grupo? Qual o próximo passo?

    ResponderExcluir
    Respostas
    1. Pedro, após a confirmação vc recebe automaticamente um e-mail com a senha.

      []s

      Excluir
  4. Fábio,

    Por exemplo eu na base local executar um SQL

    Select *
    from tb1@remoto

    Se eu usar:

    Select /*+DRIVING_SITE(tb1)*/ *
    from tb1@remoto

    Teoricamente ele deveria me retornar mais rapido?
    Ou é só nos casos de join?

    Fiz este teste aqui e ele trás no mesmo tempo.

    Como sei se ele esta usando o Hint ??

    Obrigado.

    ResponderExcluir
  5. Bruno, este hint é recomendado somente em consultas distribuídas. Uma consulta distribuída envolve no mínimo 1 tabela local e outra remota. No seu exemplo só existe a consulta remota.

    Qto ao uso deste hint, o PE local não muda e no BD remoto não há informações ela, portanto, você só conseguirá descobrir se o SQL está usando este hint comparando o tempo antes e depois de usá-lo.

    []s

    ResponderExcluir
  6. Fábio bom dia,

    E no caso de existirem mais de uma tabela remota? Como ficaria a utilização do Hint?

    ResponderExcluir
    Respostas
    1. Allan, a resposta está no link https://community.oracle.com/thread/3602350?start=0&tstart=0. Se tiver qualquer dúvida posterior, deixe um novo comentário.
      []s

      Excluir