Pergunta

Eu desnatado através Data e Silberschatz, mas não consigo encontrar respostas a estas perguntas específicas da mina.

  1. Se os usuários de banco de dados 2 emitir uma consulta - digamos, 'SELECT * FROM AVERYBIGTABLE;' - Onde seria os resultados da consulta são armazenados em geral ... ou seja, independente do tamanho do conjunto de resultados

    a. Na memória física / virtual gerenciada pelo sistema operacional do servidor DBMS?

    b. Em um arquivo temporário DBMS de gestão?

  2. É o conjunto de resultados da consulta mantido por conexão?

  3. Se o conjunto de resultados da consulta é de fato mantida por conexão, então o que se há pool de conexão em vigor (por uma camada de código sentado acima do DBMS)? Não será, então, o conjunto de resultados ser mantida por consulta (em vez de por conexão)?

  4. Se o banco de dados está mudando em tempo real, enquanto seus usuários simultaneamente emitir consultas seleção, o que acontece com as consultas que já foram executados, mas ainda não (totalmente) 'consumida' pelos emissores de consulta? Por exemplo, suponha que o conjunto de resultados tem 50.000 linhas; o usuário está interagindo em 100, quando paralelamente outro usuário executa uma inserção / exclusão de tal forma que levaria a mais / menos do que 50.000 linhas se a consulta mais cedo eram para ser re-emitida por qualquer usuário do SGBD?

  5. Por outro lado, no caso de um banco de dados que não muda em tempo real, se 2 usuários emitir consultas idênticas, cada um com conjuntos de resultados idênticos, mas muito grande, seria o DBMS manter 2 cópias idênticas do conjunto de resultados, ou será que têm uma única cópia compartilhada?

Muito obrigado antecipadamente.

Foi útil?

Solução

Algumas destas podem ser específicos para Oracle.

  1. Os resultados completos da consulta não precisa copiado cada usuário recebe um cursor (como um ponteiro) que mantém quais linhas foram recuperadas, e quais linhas ainda precisa ser obtida. O banco de dados irá armazenar em cache tanto de dados quanto possível, uma vez que lê os dados fora das mesas. Mesmo princípio como dois usuários não só ler identificador de arquivo em arquivo.

  2. Os cursores são mantidos por conexão, os dados para a próxima linha pode ou não pode já estar na memória.

  3. Conexões para a maior parte são único segmento, apenas 1 cliente pode usar uma conexão de cada vez. Se a mesma consulta é executado duas vezes na mesma conexão, em seguida, a posição do cursor é reposto.

  4. Se um cursor é aberto na mesa que está sendo atualizado, em seguida, as linhas antigas são copiados para um espaço separado (undo no Oracle) e é mantida para a vida do cursor, ou pelo menos até que se esgote de espaço para mantê-lo. (Oracle dará um instantâneo de erro muito velho)

  5. O banco de dados nunca vai duplicar os dados armazenados no cache, no caso da Oracle com o compartilhamento de cursor não haveria um único cursor em cache e cada cursor cliente só tem que manter a sua posição no cursor em cache.

Oracle Database Concepts

Veja 8 Memória para questões 1, 2, 5

Veja mais 13 Dados simultaneidade e consistência (questões 3, 4)

Outras dicas

A razão que você não encontrar isso em Data etc é porque eles poderiam mudar entre produtos de DBMS, não há nada na teoria modelo relacional sobre pool de conexões de banco de dados ou como manter os conjuntos de resultados de uma consulta (como caching etc). O único ponto que está parcialmente coberto é 4 -. Onde o nível de leitura iria entrar em jogo (por exemplo, ler não confirmadas), mas isso só se aplica até que o resultado foi produzido

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top