Come dimensionare le size dei server SQL (RAM, CPU e altri)

È la storia standard, c'è lotta tra gli sviluppatori e gli amministratori. Una denuncia che il design del database e le query sono male mentre altri dicono che è la mancanza di hardware e la quantità di dati.
Quindi ti sto chiedendo è il mio IBM x3400 con 2 xenon 2GHz e SCSI raid 5 e 4GB di RAM adeguatamente sagomati per database MSSQL di 53 GB con tabelle dettagli principali sono circa 6,5 ​​milioni di record in dettaglio e 2 milioni in intestazione di documenti mentre altri sono circa 100K (come gli elementi).

Stiamo soffrendo costantemente con la mancanza di performance durante l'acquisizione di dati da SQL, questo server è dedicato esclusivamente ad essere solo server SQL e agisce come sottoscrittore di dati replicati da altri server SQL.

  • Errori ECC nella cache L3 - critica o no?
  • Eseguire Windows Server 2008 Web Edition in un VM
  • Come disabilitare i comandi distruttivi del database?
  • Alta disponibilità con 3 server: per virtualizzare o less?
  • Autenticazione di Windows NTUSERNAME di SQL Server è diversa da Windows Login
  • Si prega di informare sulla scelta della configuration VPS (con SQL Server Express)
  • Altra domanda è: come gli amministratori di database pianificano la dimensione dell'hardware per i server DataBase? C'è un approccio standard o è solo esperienza e senso?

  • Come posso scaricare un utente MySQL il cui nome utente contiene caratteri non printingbili?
  • Modificare le colonne di tabelle mysql molto grandi con poco o nessun tempo di inattività
  • Riavviare un database in un'istanza del database senza riavviare l'intera istanza del database
  • Shrink il file di dati di SQL Server, ma non tutti in una volta?
  • Cosa può fare l'utente con le autorizzazioni VIEW SERVER STATE?
  • Quanto sforzo è l'amministrazione di SQL Server 2008?
  • 4 Solutions collect form web for “Come dimensionare le size dei server SQL (RAM, CPU e altri)”

    • 4 GB ram è uno scherzo in questi giorni. Quindi non mi dispiace. Penso che tu sia finito in quella direzione. Può funzionare, ma richiede specifici templates di utilizzo. Non vorrei eseguire un db server su un hardware da 4 GB fuori dal principio – 16 GB di RAM costa praticamente nulla da cominciare.
    • SCSI RAID 5 non è ottimale. A seconda dei templates di utilizzo, è necessario disporre di un minimo di due gruppi: uno per scrivere (log), uno per le letture (dati). Ho avuto un buon successo utilizzando un RAID 10 di 4+ dischi per OS e LOG e un altro per i dati. Tenete a mente che il db era molto più grande. Nel tuo caso, lanciare il RAID 5 e mettere solo TWO mirrored SSD avrà senso, dato che i tuoi dati sono solo 53 GB. Uno specchio di due SSD probabilmente farà esplodere la tua prestazione IO per un fattore di 100. È probabile che tu sia legato con l'aiuto della tua RAM, per gli standard di oggi, patetici. Mi dispiace se questo suona in modo scortese, ma un server db dovrebbe avere RAM PIU 'di una workstation per sviluppatori e, a seconda di quale azienda si stai in par o WAY.

    C'è un approccio standard o è solo esperienza e senso?

    Esperienza e senso. Pensate anche in avanti e verificate che cosa ha senso in un paio di anni. Ad esempio, SuperMicro dispone di server NICE per i dischi 24-72 in una configuration SAS. Quindi, si ottiene uno per evitare di utilizzare una SAN (più costosa) e riempire i dischi come è necessario. Altri ottengono un piccolo server e quindi esauriscono le opzioni. È anche ansible get alcune idee da test su una normale postazione di lavoro.

    È la storia standard, c'è lotta tra gli sviluppatori e gli amministratori.

    No non lo è.

    Una denuncia che il design del database e le query sono male mentre altri dicono che è la mancanza di hardware e la quantità di dati.

    Non ancora. Il disegno di Db può essere misurato abbastanza obiettivamente. Come in: ci sono alcuni approcci documentati e conosciuti (che un gran numero di sviluppatori sono fondamentalmente totalmente ignoranti). Mai sentito parlare della quinta forma normale?

    Stesso con le domande. Posso in realtà vedere se una query è eseguita in modo efficiente. Non esiste una vera area grigia qui. Detto questo, ci possono essere compromessi, ma se questo va in un gioco colpevole, allora posso essere abbastanza sicuro che ci sia qualcosa di sbagliato.

    Molto spesso gli sviluppatori non sanno nient'altro "questo è un semplice selezionato" e non hanno idea di come gestire un database e quindi cercare di lanciare hardware sul problema. Ci siamo stati, visto questo. Non sempre, ma è un'idea probabile.

    Con la misurazione della RAM è importnte sapere quale è il tuo "set di lavoro" probabile e assicurati di avere abbastanza RAM per quello moltiplicato un paio di volte come minimo. Il tuo normale set di lavoro è tutte le pagine di indice e dati che sono comunemente utilizzate e che sono in grado di tenerlo tutto in RAM con spazio sufficiente per risparmiare query "più eccezionali ma ancora non rare" riduce l'I / O del disco necessario per operazioni di lettura considerevolmente .

    Ad esempio, un database di 10Gb (più piccolo di quello per una quantità considerevole, ma la teoria tiene in considerazione la dimensione dei dati) per una delle applicazioni di client esterne contiene circa 1Gb di pagine di dati attive: indici e righe di tabella che possono essere raggiunti in maniera routine come gli utenti vanno nel loro normale business. Un altro ~ 4Gb è dati vecchi che non vengono letti nella maggior parte delle sessioni normali (dato che la maggior parte delle visualizzazioni predefinite mostra solo un massimo di un mese o tre di dati e i dati, gli indici e le query sono sufficientemente pianificati in modo da non essere più vecchi. verranno letti a less che l'utente chiede di vedere qualcosa di più indietro nel tempo (che è relativamente raro nell'utilizzo quotidiano) .Il finale ~ 5Gb è blobs – documenti che gli utenti hanno collegato ai record e che raramente sono accessibili più a breve, dopo essere stato aggiunto, tranne che durante una verifica. Anche con questa dimensione di dati, dubito che 2 GB di RAM sarebbe sufficiente a mantenere l'accesso rapido (il DB sto parlando di vite su un server 4Gb dedicato all'esecuzione di MSSQL, un'altra macchina agisce come server web e altri servizi legati all'applicazione) per cui potrebbe essere necessario ripensare la dimensione del RAM per le size dei dati. La RAM è relativamente poco costosa in questi giorni in modo da assumere che il server possa gestire l'ulteriore compressione fino a 8, 12 o addirittura 16Gb può dare un buon return sulle performance di investimento saggio.

    Per quando non si può evitare il disco I / O, mi allontanerò da RAID5 e RAID6 se i dati vedono molte attività di scrittura. Standard RAID10 (o un po 'less standard di sisthemes RAID10 come quelli offerti dal driver Linux RAID10 e alcune soluzioni hardware) functionranno anche per la maggior parte dei carichi di lettura, notevolmente migliori per la maggior parte dei carichi di scrittura e offrono una ridondanza simile (qualsiasi drive può fallire). Se non si desidera saltare a quattro unità, è ansible provare a tre drive RAID10 (chiamato RAID1E dalla maggior parte dei controller IBM) se supportto dall'ambiente. Inoltre, vale la pena considerare la suddivisione della tua matrix in due come suggerisce TomTom. Per le operazioni di scrittura, probabilmente trovenetworking che avere il log di transactions sull'assistente RAID1 di due unità e che i file di dati su un altro functionranno significativamente meglio dell'utilizzo di RAID10 – le performance RAID10 in grado di leggere quasi completamente RAID0 possono essere uccise rapidamente la natura di accesso random di database scrive (aggiornamento di dati e pagine di indice che possono essere diffuse nello spazio dei file, aggiornando il registro delle transactions prima di commettere i dati nei file di dati e contrassegnandolo come impegnato nel registro quando è fatto e così via). La separazione dell'attività di registro e di dati sui diversi mandrini può aumentare notevolmente le performance del database in molti casi. Se hai abbastanza spazio per le unità necessarie, mantenendo tempdb (o qualsiasi altra cosa che RDBMS corrisponde al tempdb di MS) e simili su un terzo arrays possono anche fare una differenza significativa anche se le query e le procedure memorizzate fanno uso pesante di tabelle temporanee può talvolta essere sorprendente in quante circostanze il planner di query avrà in considerazione l'utilizzo di tempdb dietro la schiena!). Ovviamente l'utilizzo di SSD può essere una risposta alle performance di accesso random troppo – se si otterrebbe un migliore rapporto prezzo / prestazione con quelli o altri sisthemes di matrici (o quelli e altri dispositivi di arrays) dipende in modo significativo sui DB e sui tipici templates di accesso.

    Un'altra cosa: prima di investire tempo + sforzo + soldi nella riorganizzazione del sottosistema I / O, assicuratevi di eseguire alcune metriche di prestazione in tempi occupati per assicurarsi di non avere procedure negative che sono molto legate alla CPU. A volte le procedure complesse (in particolare quelle che utilizzano i cursori in modi less ottimali) possono colbind il sottosistema di memory CPU + per lunghi periodi (aggiungendo più RAM e una migliore capacità di I / O farà poca differenza qui) e spesso può essere ottimizzata in modo significativo ripensando cursori / loops o la gestione di rimuoverli totalmente. Un mix di logging personalizzata di SQL traccia e Windows Performance Monitor (o strumenti di monitoraggio equivalenti per persone che utilizzano una combinazione diversa OS + DB) possono essere un grande aiuto per trovare where si trovano le strozzature principali (memory di fame, performance I / O, less rispetto al codice ottimale …) e si dovrebbe cercare di risolvere un problema fino a quando non sei relativamente certo che stai fissando il giusto problema.

    Immagino che l'hardware e il codice siano entrambi in colpa alless per un certo grado.

    Innanzitutto, è ansible utilizzare viste SQL Profiler e gestione dynamic per dimostrare che le query sono lente e perché sono lente. L'utilizzo di questi strumenti è abbastanza facile a un livello elevato, è facile vedere se sei limitato alla CPU, è associato a un disco, legato alla memory ecc. Ma comprendere i piani di query complessi e l'ottimizzazione non è qualcosa che stai per imparare senza mettere un po 'di tempo. C'è un indice mancante indice e un rapporto di query lenta nella dashboard di performance SQL che può aiutarti a trovare un po 'di frutta a sospensione.

    D'altra parte, quel server hardware è positivamente wimpy dagli standard moderni. La mia postazione di lavoro personale in ufficio è più potente in tutti i modi (tra cui SSD invece di dischi meccanici). Stavamo distribuendo server di database a 64 bit con> 16 GB di RAM cinque anni fa . L'hardware è la parte più economica di qualsiasi operazione IT, certamente più conveniente delle decine di centinaia di ore che si sta spendendo su questo problema.

    suggerimenti:

    1. Utilizza il monitor di performance per capire where veramente le tue strozzature sono. Numeri duri, non ipotesi. Ci sono un sacco di buoni MSDN e altri articoli su cui contare per monitorare. Di solito è un collo di bottiglia di Disk o CPU. Se stai visualizzando la lunghezza della coda dei dischi, di solito hai bisogno di più memory, non disco più veloce! Acquista molto come RAM in quanto puoi permettersi. Ciò significa che hai bisogno di una versione OS a 64 bit e di 64 bit del server SQL. È ansible mantenere in sostanza l'integer database in RAM sul server 64 GB. Il contatore di performance del rapporto di colpi di cache buffer dovrebbe rimanere al di sopra del 99% durante i picchi di carica.
    2. Aggiunga solo la CPU quando sei sicuro di avere indicizzato correttamente il database per le query più frequenti. Una query correttamente progettata ed inesata può salvare un fattore di 1000 (non un errore di typo) nel tempo di esecuzione su una scarsamente scritta. Eviti di annidare le viste, che gli sviluppatori amano a causa del riutilizzo del codice, ma succhiano per le performance perché gli indici spesso diventano inutili. Qualsiasi sviluppatore che i cursori degli utenti che pnetworkingndono di essere più veloci o "l'unico modo per farlo" devono essere spariti immediatamente.
    3. Considerate le unità SSD anziché il disco meccanico se il set di lavoro è più grande della memory più grande disponibile nel server a 2 socket. Penso che sia attualmente 192 GB, per cui le size dei dati non sono più vicine.
    4. Essenzialmente, fare questo .

    Avete stancato gli strumenti HP o Del l di dimensionamento? non essere tutti e finire tutto, ma alless un buon punto di partenza.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.