Ho un sito Web ASP.NET che esegue la propria memorizzazione nella cache indipendente di dati e che i dati non cambiano per lunghi periodi di tempo, quindi non è necessario interrogare SQL Server una seconda volta con la stessa query. Devo migliorare le prestazioni delle prime query (vergini) che vanno a quel SQL Server. Alcune query elaborano così tanti dati che potrebbero causare l'utilizzo di SQL Server tempdb
. Non utilizzo variabili della tabella temporanea o tabelle temporanee, quindi SQL Server decide di utilizzare tempdb
da solo ogni volta che è necessario.
La mia dimensione di db è di 16 GB, ho 32 GB di RAM fisica disponibile sul mio server.
Comprendo che la strategia di memorizzazione nella cache di MS SQL Server tenta di mantenere i dati nella RAM per accelerare le prestazioni di query simili se necessitano di caricare nuovamente gli stessi dati. Inoltre, proverà a utilizzare la RAM disponibile anziché tempdb per accelerare le prestazioni senza causare l'accesso al disco.
Suppongo che quando arriva la query che deve archiviare qualcosa in tempdb SQL Server e non c'è abbastanza RAM disponibile, SQL Server ha 2 opzioni:
1) per scaricare alcuni dati memorizzati nella cache e utilizzare la RAM risparmiata anziché tempdb per evitare scritture su disco
2) conservare i dati memorizzati nella cache per query future e iniziare a utilizzare tempdb, che rallenta le scritture.
Non so quale scelta farà SQL Server in questa situazione, ma vorrei che diventasse la scelta n. 1 perché mi preoccupo solo delle prestazioni delle query per la prima volta (vergine), perché non invio mai più la stessa query a SQL Server (anche se posso inviare una domanda simile).
Qual è la strategia di memorizzazione nella cache di SQL Server per questo scenario?
In che modo bilancia l'utilizzo della RAM tra evitare tempdb per le query vergini e la velocità delle query seconde?
È possibile configurare SQL Server in modo tale da fare la scelta n. 1? Se sì allora come?
In quale altro modo è possibile migliorare le prestazioni di tutte le query vergini SQL?
Poiché non conosco la strategia di memorizzazione nella cache di SQL Server, voglio posizionare il database sul disco RAM. Ciò assicurerà che qualsiasi query vergine abbia un'alta velocità di caricamento dei dati non memorizzati anche se SQL Server fa sempre la scelta n. 1. Il rischio è che SQL Server possa iniziare a utilizzare più tempdb con meno RAM disponibile (solo 16 GB rimanenti dopo aver usato 16 GB per il disco RAM) se continua a fare la scelta n. 2, che rallenterà le query vergini che causano lo spargimento tempdb
.
Sono interessato alla soluzione per SQL 2008 R2, ma immagino che sia probabilmente la stessa per SQL 2008, SQL 2005 e potrebbe essere SQL 2000.
chiarimenti:
Non ci sono altre applicazioni in esecuzione su quella casella, è dedicata a SQL Server . Il sito Web funziona su una scatola separata.
È SQL Server 2008 R2 Standard Edition 64 bit su Windows Server 2008 R2 Enterprise 64 bit.
Eseguo solo query di sola lettura e il database è impostato per essere di sola lettura .
Supponiamo che ci siano già buoni indici . Questa domanda riguarda SQL Server che fa la scelta n. 1 contro la scelta n. 2, come lo fa, se esiste un modo per controllarlo e se il disco RAM lo aiuta a fare la scelta giusta per le query vergini.