Posso inserire un intero DB in memoria?


9

Il mio database ha una dimensione di circa 1 GB (secondo il file mdf del mio db). Il mio server di database ha 4 GB di RAM. Osservando il consumo di memoria del computer quando è attivo, si trova a circa l'85% utilizzato (inclusi SO, ecc.)

Questo significa che tutte le attività di lettura dei DB funzionano solo nella memoria (ovvero l'intero db è nella memoria)? o c'è ancora un caso in cui dovrebbe andare su disco?


1
Bene, per confronto, a che serve quando l'applicazione non è attiva? Generalmente, uno dei vantaggi di un sistema di database è che non ha bisogno del file completo in memoria, ma si adatta a ciò che si estrae da esso in memoria fino a quando non lo si scarica altrove. Dovrò dichiarare "no".
Concedi Thomas

@Sig. Delusione: sono d'accordo che è un vantaggio, ma nel caso in cui possa mettere in memoria l'intero file (come in questo caso), lo farebbe?

Se necessario, quindi sì. Ma su richiesta dei chiamanti e dei dati richiesti, non in modo nativo, naturalmente. Quindi, in genere, se si riscontra un problema di memoria del database, sarà con il codice chiamante o il software di supporto o una combinazione dei due.
Concedi Thomas

1
Un esempio di prospettiva: conosco una grande azienda Internet che possiede diversi siti di portali molto grandi. Consegnano ca. 300 milioni di annunci dai loro stessi server di annunci per quei portali. La struttura degli ad server è tale che esiste un grande Oracle DB con tutte le informazioni per la contabilità e il targeting, ma ci sono 32 grandi server (32 GB RAM) che contengono database più piccoli (con solo gli annunci attualmente attivi) nella RAM . Non toccano un disco, non devono: hanno solo 1/1000 di secondo per trovare un annuncio da inserire quando arriva la query, qualsiasi accesso al disco renderebbe impossibile raggiungere tale obiettivo.

Risposte:


5

Sì, è probabile che l'intero database sia archiviato in memoria. Svuota le pagine sporche sul disco a intervalli di checkpoint. Si noti, tuttavia, che tutti gli aggiornamenti dovranno scrivere nel registro e attendere che i record del registro siano resi più duri su una memoria durevole prima del commit. Questo vecchio documento Nozioni di base sugli I / O di SQL Server 2000 contiene tutti i dettagli di cui avrete bisogno e altro ancora.

Ma non devi indovinare, puoi misurarlo esattamente e vedere se succede o no. I contatori delle prestazioni rilevanti sono:

  • Aspettativa di vita della pagina Numero di secondi in cui una pagina rimarrà nel pool di buffer senza riferimenti.
  • Letture di pagine / sec Numero di letture di pagine di database fisiche emesse al secondo. Questa statistica mostra il numero totale di letture di pagine fisiche in tutti i database. Poiché l'I / O fisico è costoso, è possibile ridurre al minimo i costi utilizzando una cache di dati più grande, indici intelligenti e query più efficienti o modificando la progettazione del database.
  • Scritture di pagina / sec Numero di scritture di pagine di database fisiche emesse al secondo.

"Sì, è probabile che l'intero database sia archiviato in memoria." Quindi, nel caso del nostro server di produzione, con un minimo di ~ 60 siti Web ciascuno che utilizza un database dedicato all'interno di SQL Server Master, dove anche solo una manciata di questi equivale a una dimensione maggiore della memoria disponibile delle macchine, come funziona ? Sono tentato di dire che non esiste un default definitivo, o la probabilità di entrambi gli scenari - come per un precedente commento che ho fatto, è davvero più dipendente dall'ambiente rispetto al motore.
Concedi Thomas

@Sig. Delusione: stai applicando la mia risposta a una domanda diversa. Il PO detto: My database is about 1gb in size (according to the mdf file of my db). My database server has 4gb of ram.. Se vuoi una risposta per il caso in cui hai 60 siti Web e come funziona la memorizzazione nella cache del pool di buffer in quel caso, fai questa domanda :)
Remus Rusanu

Sei l'esperto qui, ma ti prego di scusare la mia natura curiosa: quindi questa teoria presume (perché non abbiamo dati specifici) che la macchina non sta facendo altro? O rappresenta una certa soglia di memoria utilizzata da consumatori sconosciuti?
Concedi Thomas

Come ho già detto: you don't have to guess, you can measure this exactly.
Remus Rusanu,

-5

L'intero DB (ovvero i dati) non verrebbe archiviato in memoria (sql server). Dopo aver esaminato gli indici e / o le chiavi, recupererà un puntatore al punto in cui si trovano i dati nel file di dati e probabilmente andrà su disco per recuperarli. Se nessuna chiave o indice, dovrebbe scansionare l'intero heap.

A seconda della versione di SQL Server in esecuzione, potrebbero essere presenti strategie per la memorizzazione nella cache di dati ben utilizzati per ridurre al minimo le letture del disco.

È possibile ottenere DB in memoria, ad esempio il database MySql Cluster .... È progettato per adattare il Db COMPLETO alla memoria attraverso un cluster di server per elevata disponibilità / ripristino di emergenza e recupero rapido dei dati.


1
Non ho abbastanza rappresentante per votare questo, ma non sono sicuro del motivo per cui stai dicendo che categoricamente non verrebbe archiviato in memoria. Una volta che una pagina viene letta nella cache del buffer rimarrà lì fino a quando la pressione della memoria interna o esterna non causerà il taglio della cache.
Martin Smith,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.