Posso colocar um banco de dados inteiro na memória?


9

Meu banco de dados tem cerca de 1 GB de tamanho (de acordo com o arquivo mdf do meu db). Meu servidor de banco de dados possui 4 GB de RAM. Observando o consumo de memória no computador enquanto ativo, ele fica em torno de 85% usado (incluindo SO, etc)

Isso significa que toda a atividade de leitura do banco de dados funciona apenas na memória (ou seja, todo o banco de dados está na memória)? ou ainda existe um caso em que teria que ir para o disco?


1
Bem, para comparação, qual é a utilidade quando o aplicativo não está ativo? Geralmente, um dos benefícios de um sistema de banco de dados é que ele não precisa do arquivo completo na memória, mas ajustará o que você extrai dele na memória até liberá-lo em outro local. Vou ter que declarar 'não'.
Grant Thomas

@Senhor. Desapontamento: Concordo que é um benefício, mas no caso em que ele pode colocar o arquivo completo na memória (como este caso), seria?

Se necessário, então sim. Mas sob demanda dos chamadores e dos dados de que eles precisam, não de forma nativa. Portanto, geralmente, se você tiver um problema de memória do banco de dados, será com o código de chamada ou o software de suporte ou uma mistura dos dois.
Grant Thomas

1
Um exemplo de perspectiva: conheço uma empresa de internet muito grande que possui vários sites de portal muito grandes. Eles entregam ca. 300 milhões de anúncios de seus próprios servidores de anúncios para esses portais. A estrutura dos servidores de anúncios é tal que existe um grande banco de dados Oracle com todas as informações para contabilidade e segmentação, mas existem 32 servidores grandes (32 GB de RAM) com bancos de dados menores (apenas com os anúncios ativos no momento) na RAM . Eles não tocam em um disco, não devem: eles têm apenas 1/1000 segundo para localizar um anúncio quando a consulta é recebida; qualquer acesso ao disco tornaria impossível atingir esse objetivo.

Respostas:


5

Sim, o banco de dados inteiro provavelmente está armazenado na memória. Ele limpará as páginas sujas do disco em intervalos de ponto de verificação. Observe que todas as atualizações precisarão gravar no log e aguardar que os registros sejam protegidos no armazenamento durável antes da confirmação. Este artigo básico de E / S do SQL Server 2000 contém todos os detalhes de que você precisará e mais.

Mas você não precisa adivinhar, você pode medir isso exatamente e ver se isso acontece ou não. Os contadores de desempenho relevantes são:

  • Expectativa de vida da página Número de segundos que uma página permanecerá no buffer pool sem referências.
  • Leituras de página / s Número de leituras físicas da página do banco de dados emitidas por segundo. Essa estatística exibe o número total de leituras físicas de páginas em todos os bancos de dados. Como a E / S física é cara, você pode minimizar o custo, usando um cache de dados maior, índices inteligentes e consultas mais eficientes ou alterando o design do banco de dados.
  • Gravações de página / s Número de gravações de páginas físicas do banco de dados emitidas por segundo.

'Sim, é provável que todo o banco de dados esteja armazenado na memória.' Portanto, no caso do nosso servidor de produção, com um mínimo de ~ 60 sites cada um utilizando um banco de dados dedicado no SQL Server Master, onde apenas alguns deles equivalem a um tamanho maior que a memória disponível das máquinas, como isso funciona? ? Fico tentado a dizer que não há padrão definitivo ou probabilidade de qualquer um dos cenários - conforme comentário anterior que fiz, é realmente mais dependente do ambiente do que do mecanismo.
Grant Thomas

@Senhor. Decepção: você está aplicando minha resposta a uma pergunta diferente. O OP disse: My database is about 1gb in size (according to the mdf file of my db). My database server has 4gb of ram.. Se você quer uma resposta para o caso quando você tem 60 sites e como o pool de buffer de trabalho cache, nesse caso, em seguida, fazer essa pergunta :)
Remus Rusanu

Você é o especialista aqui, mas desculpe minha natureza inquisitiva: então, essa teoria assume (porque não temos dados específicos) que a máquina não está fazendo mais nada? Ou é responsável por um determinado limite de memória sendo usado por consumidores desconhecidos?
Grant Thomas

Como eu disse: you don't have to guess, you can measure this exactly.
Remus Rusanu

-5

O banco de dados inteiro (ou seja, dados) não seria armazenado na memória (servidor sql). Depois de examinar índices e / ou chaves, ele recuperará um ponteiro para onde estão os dados que você está procurando no arquivo de dados e provavelmente irá para o disco para recuperá-los. Se não houver chaves ou índices, teria que verificar a pilha inteira.

Dependendo da versão do SQL Server em execução, pode haver estratégias para armazenar em cache dados bem utilizados para minimizar as leituras de disco.

Você PODE obter DBs na memória, por exemplo, banco de dados MySql Cluster .... Isso foi projetado para ajustar o banco de dados INTEIRO na memória em um cluster de servidores para alta disponibilidade / recuperação de desastres e recuperação rápida de dados.


1
Não tenho representante suficiente para votar isso, mas não sei por que você está dizendo que categoricamente não seria armazenado na memória. Depois que uma página é lida no cache do buffer, ela permanece lá até que a pressão da memória interna ou externa faça com que o cache seja aparado.
Martin Smith
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.