requisiti generali di memoria per sql server 2008 r2


11

Non ho esperienza con il lavoro DBA, ma sto provando a richiedere ulteriori risorse per il nostro server sql e spero di riuscire a convincere alcune persone intelligenti a fornire una stima approssimativa di ciò che dovremmo eseguire. Sospetto che l'allocazione delle risorse che l'IT ha fornito al nostro server sql di produzione sia bassa.

Hardware software:

Database: database aziendale sql server 2008 r2

Windows: Windows 2008 r2 Enterprise 64 bit, abbastanza sicuro in esecuzione su VMware.

Processore: CPU Intel (R) Xeon (R) E7-4860 a 2,27 GHz 2,26 GHz (2 processori)

Memoria installata: 4 GB

Disco rigido per file di database: 300 GB

Disco rigido per backup: 150 GB

Disco rigido per i registri: 100 GB

Applicazione:

Abbiamo 3 database principali che aggiungono fino a circa 170 GB di dati, un database di Reporting Services (SSRS) sullo stesso server che ospita forse 10 report diversi (che comprendono in media 700k record ciascuno) che vengono generati quotidianamente. La nostra base di utenti è di circa 20 utenti simultanei, forse 5 di questi potrebbero essere considerati "ad alta intensità di risorse" con la generazione di report di grandi dimensioni. La maggior parte degli utenti interagisce con il database tramite il sito Web asp.net e il sito Web del server di report. Inoltre, i nostri sviluppatori utilizzano ampiamente SSIS in BIDS remotando direttamente sul server (massimo 2 connessioni remote). Infine, abbiamo un'operazione di data warehousing abbastanza coinvolta che probabilmente porta 3 milioni di record al giorno tramite pacchetti SSIS che funzionano anche sul server.

Problemi attuali:

Abbiamo timeout cronici del server e il tempo di risposta al sito Web è piuttosto scadente. Sospetto che la quantità di memoria che abbiamo (4 GB) sia probabilmente un grosso collo di bottiglia. Le nostre precedenti richieste di memoria aggiuntiva sono state respinte con la risposta comune che è necessario eseguire ulteriori ottimizzazioni delle query. Sebbene non siamo professionisti sql o (come sono sicuro che si può dire dalla nostra configurazione) professionisti dell'amministratore di database, voglio assicurarmi di non spendere tutto il mio tempo cercando di ridurre le prestazioni potenziali se l'hardware è il collo di bottiglia.

Grazie a tutti per il tl; dr evitamento!


7
Si aspettano di gestire 170 GB di dati con 4 GB di memoria? Nessuna ottimizzazione delle query lo risolverà e sono fuori dal loro albero.
Aaron Bertrand

Mostra loro i numeri (statistiche delle prestazioni). Potresti anche mostrare loro la documentazione Microsoft che mostra che la memoria minima per Window Server 2008 R2 è di 4 GB; questo non lascia molto per SQL Server.

2
Cosa mostrano le tue statistiche di attesa? Ho il sospetto che stai vedendo molti PAGEIOLATCH_XX in attesa di tue domande. Se lo sei, potresti essere in grado di usarlo come prova che un po 'di memoria aggiuntiva sarebbe utile.
SQLRockstar

2
E uno che ha memoria è possibile iniziare a lavorare su un sottosistema IO migliore. Hard DRIVE per un database ben utilizzato è uno scherzo IOPS. Questo dovrebbe essere DRIVES. Non si acquista unità come capacità, per i database si acquista unità come sorgente IOPS. Ciò significa che un SSD da 512 GB sarebbe utile per i file di database. Lo standard "lascia che sia grande ed economico" ucciderà il database.
TomTom,

@TomTom Sono sicuro (spero) che abbiamo un array raid. Non sono sicuro di come rilevarlo però. Stavo solo basando la descrizione del disco rigido su ciò che Windows Window Explorer stava mostrando sul server Windows.
RMuesi,

Risposte:


14

... speravo di poter ottenere ... una stima approssimativa di ciò che dovremmo eseguire.

Senza ulteriori informazioni su query e dimensioni dei dati, è davvero difficile fornire qualsiasi tipo di preventivo, per non parlare di un preventivo accurato.

Database: database aziendale sql server 2008 r2

Windows: Windows 2008 r2 Enterprise 64 bit, abbastanza sicuro in esecuzione su VMware.

Processore: CPU Intel (R) Xeon (R) E7-4860 a 2,27 GHz 2,26 GHz (2 processori)

Memoria installata: 4 GB

Due processori (suppongo che questo sia esposto nella VM come 2 core) possono o meno essere sottoposti a provisioning insufficiente. I core assegnati a una VM non sono necessariamente mappati direttamente sui core fisici (o addirittura non possono utilizzare il 100% di un singolo core quando è necessario!), Quindi potresti scoprire che questa è una risorsa più flessibile della memoria. Senza ulteriori informazioni sul carico di lavoro o sulla configurazione hardware / di virtualizzazione, direi che aumentarlo a 4 sarebbe utile.

Allocazione della memoria. Oh ragazzo. Questo è fortemente sotto-provisionato per il carico di lavoro. Windows stesso ha bisogno di un minimo di 2-3 GB per rimanere felice, e ciascuno dei 2 utenti che eseguono BIDS sulla scatola richiederà almeno 500 MB ciascuno. E con ciò, la scatola è già al massimo e non ho nemmeno iniziato a capire di quanto il database avrà bisogno.

La maggior parte degli utenti interagisce con il database tramite il sito Web asp.net e il sito Web del server di report.

Non hai detto, ma se questi sono in esecuzione sulla stessa scatola, è necessario prendere in considerazione anche i requisiti di memoria per essi.

Infine, abbiamo un'operazione di data warehousing abbastanza coinvolta che probabilmente porta 3 milioni di record al giorno tramite pacchetti SSIS che funzionano anche sul server.

Supponendo che questo funzioni di notte quando non ci sono utenti live sul sistema, non vedo questo come un problema a meno che non ci voglia troppo tempo per essere eseguito. Questa parte delle cose è l'ultima delle tue preoccupazioni; gli utenti live sono più importanti.

Le nostre precedenti richieste di memoria aggiuntiva sono state respinte con la risposta comune che è necessario eseguire ulteriori ottimizzazioni delle query.

Come ho dimostrato sopra, l'attuale quantità di memoria fornita è completamente inadeguata. Allo stesso tempo, tuttavia, all'altra estremità dello spettro, è estremamente improbabile che tu sia in grado di ottenere abbastanza memoria per poter mantenere l' intero database in memoria contemporaneamente.

Anche se hai ottenuto una risposta generale come quella (che, tra l'altro, probabilmente aveva più a che fare con quanto persuasiva fosse la tua giustificazione per le risorse aggiuntive e non l' effettivo utilizzo delle risorse stesse), è molto probabile che l'efficienza del database potrebbe essere migliorata. Eppure non esiste una quantità di messa a punto da sola che può risolvere i problemi che stai riscontrando ora; il suggerimento di ciò è per me un completo antipasto.

Adotterò l'approccio generale secondo cui la quantità di memoria attualmente fornita è inferiore al minimo richiesto (che dovrebbe essere corretto al più presto) e potrebbero essere necessarie risorse aggiuntive per migliorare l'esperienza dell'utente a un livello utilizzabile mentre vengono apportati miglioramenti per aumentare l'efficienza di i sistemi.

Ecco alcuni pensieri (in ordine di attacco):

  • Potrai vincere se si può dimostrare quanto le prestazioni migliorano ogni volta che si ottiene più risorse provisioning. Tieni traccia delle metriche delle prestazioni utilizzando la registrazione di Performance Monitor (nota: la parte relativa alla registrazione è molto importante), compresi i tempi di risposta del sito Web, se possibile. Inizia a farlo ora , prima di fare qualsiasi altra cosa. Quando finalmente raggiungi la quantità minima di memoria (non otterrai subito 32 GB), improvvisamente ora hai la prova che la memoria aggiunta ha migliorato le cose ... il che significa che aggiungere ancora di più probabilmente aiuterebbe anche! Se non raccogli una linea di base sulla configurazione corrente, perderai la barca quando le cose vengono portate al livello minimo raccomandato.

  • Analizza le statistiche di attesa del tuo server . Questo ti dirà qual è il più grande collo di bottiglia nel sistema. Probabilmente avrai PAGEIOLATCH_XXil tempo di attesa più comune / più alto, che indica che si sta eseguendo troppo I / O per recuperare le pagine dal disco. Questo può essere alleviato aggiungendo memoria, quindi gli I / O fisici diventano meno frequenti poiché i dati necessari sono già in memoria. Mentre questa analisi è praticamente una conclusione scontata, il fatto che tu abbia raccolto queste statistiche ti dà più munizioni quando giustifichi la necessità di risorse.

  • Come accennato in precedenza, non è stato soddisfatto il minimo requisito di memoria. Raccogli il set di requisiti hardware consigliati per tutto il software in esecuzione e magari cattura anche screenshot di Task Manager. Questo da solo dovrebbe essere sufficiente per giustificare almeno 4-8 GB in più, sul posto. Se continuano a rifiutare, prova a convincerli a permetterti di provarlo per una settimana e poi restituiscilo (stai raccogliendo statistiche sulle prestazioni, quindi non dovrai restituirlo perché a metà settimana " riuscirò a dimostrare quanto è migliorata la situazione). Se continuano a rifiutare, sei pronto per fallire; URLT .

  • Se è possibile scaricare parte del carico di lavoro (in particolare, evitare il remoting se possibile), ciò aumenterà la quantità di memoria disponibile per il database, il che è più critico.

  • Non sarai in grado di adattare l'intero database in memoria in una sola volta, il che significa che devi impostare le impostazioni di memoria massima di SQL Server con molta attenzione per evitare un sovraccarico della memoria , il che uccide le prestazioni come nient'altro . Il commit eccessivo in realtà è persino peggio del semplice non riuscire a contenere tutti i dati in memoria. È molto probabile che tu sia in questo scenario in questo momento semplicemente perché non c'è proprio memoria disponibile ed è probabile che l'impostazione della memoria massima sia impostata sul valore predefinito (illimitato).

  • Dal momento che stai eseguendo SQL Server Enterprise Edition e la memoria è un premio, prenderei in seria considerazione l'implementazione della compressione dei dati . Ciò compenserà un aumento dell'utilizzo della CPU per risparmiare spazio di memoria (e quindi ridurre gli accessi al disco, che sono relativamente molto lenti).

  • Ottimizza il database. È probabile che le strutture e le query possano utilizzare miglioramenti per quanto riguarda l'indicizzazione e i modelli di accesso. Inoltre, se molti dati vengono scansionati e aggregati frequentemente, può essere molto utile creare viste indicizzate, tabelle di riepilogo o report pre-calcolati.

  • Questo potrebbe essere un problema perché probabilmente significa più provisioning hardware, ma implementare una soluzione di memorizzazione nella cache. La query più veloce è quella che non fai mai .

Queste sono solo alcune idee. La linea di fondo è che il tuning da solo non risolverà i problemi qui, né l'hardware da solo, anche se quest'ultimo probabilmente allevierà la maggior parte dei problemi immediati. È davvero così: lancia l'hardware sul problema a breve termine per spegnere l'incendio e lancia l'ottimizzazione sul problema a lungo termine per correggere la causa principale nel miglior modo possibile.


1
John Adoro la tua risposta e +1, ma in questo scenario, sembra che il commento di Aaron abbia colpito la testa e hanno semplicemente bisogno di più RAM, indipendentemente da quanto duramente provino a sintonizzarla.
Ali Razeghi,

2
@Ali: Sì, sono d'accordo, e l'ho menzionato nella mia risposta. Principalmente volevo concentrarmi sulle strategie per ottenere più RAM, perché qui sembra che il problema sia questo. (Se semplicemente non è disponibile, questo è un problema separato.)
Jon Seigel,

Grazie mille per la risposta dettagliata! Sono nuovo del tuning delle prestazioni in db, quindi sto solo cercando di capire da dove cominciare. Ho un po 'di materiale di lettura e Performance Monitor, ora devo solo capire le metriche. Ma i tuoi suggerimenti forniscono una buona tabella di marcia per affrontare questo problema. Grazie ancora.
RMuesi,

@Ruuesi: Prego. Se hai domande specifiche su come realizzare ciò che devi fare, sentiti libero di pubblicarle (per favore cerca prima, ovviamente) e la community sarà felice di aiutarti.
Jon Seigel,

9

Questa è la follia del "bean bean" dell'account. I $ 1100- $ 2500 che spenderesti in RAM potrebbero ripagarsi da soli entro una settimana !

Stanno ricevendo timeout per 20 dipendenti e 5 di loro svolgono un lavoro "ad alta intensità di risorse". Immagino che il loro tempo non sia economico, e alcuni di quei rapporti sono quelli che il capo non firma sulla busta paga. Sono tonnellate di sprechi sprecati che ritrasmettono e affrontano la frustrazione.

Spiega loro che probabilmente stanno cercando $ 15- $ 20 a GB per la RAM. 128 GB di RAM sarebbero all'incirca $ 2200- $ 2500 in questo momento, e attualmente i prezzi della RAM sono leggermente aumentati. Anche se la scheda madre del tuo server non può supportarla (sarebbe strano), allora 64 GB sarebbero $ 1100- $ 1200 (ho appena verificato, e questa è la qualità della RAM del server di Dell senza sconti applicati). Solo 64 GB di RAM potrebbero fare una differenza ENORME (specialmente se ci assicuriamo di evitare scansioni di tabelle di grandi dimensioni).

Scopri quanto tempo è sprecato e chiedi loro se vale $ 1100- $ 2500. Se spendi solo $ 1100 e ottieni 64 GB di RAM, assicurati di evitare scansioni di tabelle su tavoli di grandi dimensioni. Usa più disco con gli indici (se hai la latenza per supportarlo) per evitare scansioni di grandi dimensioni che scaricano memoria.


5
Ben detto per la follia. La memoria da 4 GB è inferiore a quella che suggerirei in questi giorni per un desktop. E questo sta ora cercando di essere eseguito in un ambiente di database da 170 GB. Dannazione battuta. Ma hey, la virtualizzazione per beancounters significa che puoi sbarazzarti dei server costosi di grandi dimensioni;)
TomTom

2
Sono completamente d'accordo. Almeno i contatori di bean nello scenario OP avevano i loro artigli tolti dal server fisico (si spera!)
Ali Razeghi,

1
credici. Io non. TYPICAL sarebbe un server con molta RAM e - dischi economici LAAAAARGE. Quindi puoi eseguire MOLTE macchine virtuali su di esse. Dopotutto, la RAM è normalmente il fattore limitante, non è vero?)? Il risultato sarà una prestazione IOPS eccezionale, anche senza un database. Ci sono stato, visto quello. 64 GB di memoria, 2 TB mirroring disco SATA;)
TomTom

Grazie per la risposta. Ho sospettato tanto, ma semplicemente non ho i dati per dimostrare che il problema è in parte imitazioni hardware. Ci sto lavorando adesso.
RMuesi,

2
Potresti semplicemente far loro sapere che SQL Server è un motore di database in memoria. Leggendo dal disco, anche gli SSD (che sono abbastanza sicuro che questo negozio non stia utilizzando) sono dolorosamente lenti. Una lettura dalla RAM richiede circa 5 ns. Mostra loro un piano di esecuzione con SET STATISTICSIO ON che mostra le scansioni e le letture della tabella. Mostra loro le letture fisiche e le letture logiche. Il fisico viene condotto dal disco.
Ali Razeghi,

-1

Sono in esecuzione 2008 R2 con 46 GB di RAM. Nessuna macchina virtuale. SQL Server 2008.

I database sono circa 300 GB.

Di recente ho inserito i database su un'unità a stato solido e ho triplicato il mio output di dati.

Il server sta attualmente utilizzando 45 GB di RAM e funziona bene.

FC Sata Raids e SAS SCSI Raids. 26 unità logiche in tutto. 144 dischi rotanti.

Ieri stavo usando solo 24 GB di RAM quando avevo solo 50 TB di hard disk completi collegati e il trasferimento di dati. Oggi ho 160 TB di hard disk completi e sto usando 45 GB di RAM.

La mia applicazione non utilizza oltre 400 MB di RAM.

Sospetto che ti servano i database su un disco a stato solido veloce o su un disco RAM. Fondamentalmente, però, hai bisogno di molta più ram.


IBM exFlash 400 GB MCS $ 4400. Ecco dove sto andando.
david
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.