none
Páginas de dados de uma consulta na memória RRS feed

  • Pergunta

  • Boa Noite Pessoal,

     

    Em uma consulta com um where que retorna 10000 registros, o sql coloca as páginas que contém esses 10000 registros na memória e me retorna o resultado, certo???

     

    Se eu colocar um TOP 100 na mesma query, o SQL vai continuar jogando todas as páginas para a memória, ou vai colocar em memória somente as páginas que contém os 100 registros que minha consulta retornará...

     

    Obrigado


    Fabrício França Lima | MCP, MCTS, MCITP | fabricio_lima_es@hotmail.com
    segunda-feira, 8 de fevereiro de 2010 23:16

Respostas

  • Olá

    Ele recupera (do disco) somente as 100 primeiras linhas carregando-as para memória e retornando para o cliente.

    Isso pode ser comprovado pelo execution plan e/ou meramente pela redução no tempo de resposta da query.


    []'s


    Jorge Rua
    MCT, MCPD, MCITP e MCBSP Dynamics 4.0
    http://jtressino.spaces.live.com
    http://twitter.com/jtressino
    • Sugerido como Resposta Jorge Rua terça-feira, 9 de fevereiro de 2010 02:38
    • Marcado como Resposta Fabricio França Lima quarta-feira, 10 de fevereiro de 2010 20:54
    terça-feira, 9 de fevereiro de 2010 02:38
  • Fabricio,

    o SQL Server manipula os dados sempre em memória RAM e não no disco diretamente.

    Quando é uma consulta, ele traz os dados resultantes da consulta do disco para memória RAM e os exibe como resultado do SELECT.

    Quando um comando DML é executado, a(s) página(s) necessárias são primeiramente lidas do disco e escritas na memória e só depois o SQL Server faz a manipulação(UPDATE,INSERT e DELETE) dos dados que estão e memória.

    Existem mais detalhes relacionados a isso, tais como checkpoint, consistência, lock, lazywriter, etc, mas acredito que o espaço do forum não seja para uma explicação tão detalhada.

    O BOL vai ter toda a informação que você precisar sobre o assunto.

    Espero ter ajudado.
    Se a resposta resolveu sua questão ouproblema, classifique-a para manter a qualidade do forum e a confiabilidade dos participantes.

    Alex M. Bastos
    http://bastosalex.spaces.live.com
    quarta-feira, 10 de fevereiro de 2010 18:51

Todas as Respostas

  • Olá

    Ele recupera (do disco) somente as 100 primeiras linhas carregando-as para memória e retornando para o cliente.

    Isso pode ser comprovado pelo execution plan e/ou meramente pela redução no tempo de resposta da query.


    []'s


    Jorge Rua
    MCT, MCPD, MCITP e MCBSP Dynamics 4.0
    http://jtressino.spaces.live.com
    http://twitter.com/jtressino
    • Sugerido como Resposta Jorge Rua terça-feira, 9 de fevereiro de 2010 02:38
    • Marcado como Resposta Fabricio França Lima quarta-feira, 10 de fevereiro de 2010 20:54
    terça-feira, 9 de fevereiro de 2010 02:38
  • Fabrício,

    Isso mesmo, o Jorge esta certo, para você poder entender como o SQL Server processa e retorna o resultado de suas querys, é interessante analizar o Query Logical Processing com também o Execution Plan.

    Habilite o recurso de exibição do Plano de Execução em seu Management Studio e verifique como é realizado o processamento.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 9 de fevereiro de 2010 17:14
  • OK... Fiz o teste... no execution plano mostra o numero de linhas retornadas.. acredito que seja isso que ele carrega na memória....


    Aproveitando a pergunta, gostaria de saber se TODO(sem exceção) select que o SQL retorna ele carrega em memória antes...


    Obrigado pela atenção


    Fabrício França Lima | MCP, MCTS, MCITP | fabricio_lima_es@hotmail.com
    quarta-feira, 10 de fevereiro de 2010 00:39
  • Fabricio,

    o SQL Server manipula os dados sempre em memória RAM e não no disco diretamente.

    Quando é uma consulta, ele traz os dados resultantes da consulta do disco para memória RAM e os exibe como resultado do SELECT.

    Quando um comando DML é executado, a(s) página(s) necessárias são primeiramente lidas do disco e escritas na memória e só depois o SQL Server faz a manipulação(UPDATE,INSERT e DELETE) dos dados que estão e memória.

    Existem mais detalhes relacionados a isso, tais como checkpoint, consistência, lock, lazywriter, etc, mas acredito que o espaço do forum não seja para uma explicação tão detalhada.

    O BOL vai ter toda a informação que você precisar sobre o assunto.

    Espero ter ajudado.
    Se a resposta resolveu sua questão ouproblema, classifique-a para manter a qualidade do forum e a confiabilidade dos participantes.

    Alex M. Bastos
    http://bastosalex.spaces.live.com
    quarta-feira, 10 de fevereiro de 2010 18:51
  • Fabrício,

    Concordo com o Alex, em alguns casos é realizado sim a manipulação de dados em disco, principalmente quando estamos trabalhando com tabelas sem índice.

    Acredito que a análise inicial seria entender o CheckPoint.


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 10 de fevereiro de 2010 19:06
  • Obrigado pelas respostas... Acredito que o Livro SQL Internals 2008 que está chegando la em casa vai me ajudar bastante nessa parte...
    Fabrício França Lima | MCP, MCTS, MCITP | fabricio_lima_es@hotmail.com
    quarta-feira, 10 de fevereiro de 2010 20:55
  • Coincidência ou não eu escrevi um post falando sobre isso estes dias... acho que vai te interessar bastante...

     

      http://fabianosqlserver.spaces.live.com/

     

    Procura lá por TOP 100 vs TOP 101

     

    Abraço


    Fabiano Neves Amorim - MCTS / MCP - SQLServer - http://fabianosqlserver.spaces.live.com/
    quinta-feira, 18 de fevereiro de 2010 17:17