none
confronto dischi SSD/SCSI senza alcuna differenza?! RRS feed

  • Domanda

  • Ciao a tutti,

    su un server HP con controller P420i da 1Gbyte di cache ho cambiato dei dischi SCSI 10k con dischi SSD sata, ho provato a fare dei test prima e dopo con l'utility SQLIO della microsoft proprio per testare le differenze di prestazioni.

    Il risultato ottenuto è notevole per i dischi SSD, in pratica i test di lettura (random e sequenziale) è praticamente 10 volte più veloce rispetto al vecchio disco SCSI, la scrittura è 4/5 volte meglio.

    Quindi mi aspettavo delle differenze enormi nella velocità del DB, ho posizionato solo i datafile MDF, nonostante tutto facendo una semplice query su una tabella da 4 milioni di record il riultato è praticamente uguale !!

    2 minuti e 15 secondi gli SSD , 2 minuti e 25 secondi lo SCSI.

    Mi chiedo come sia possibile che ci sia un risultato quasi identico nonostante le differenti prestazioni benchmark, i dischi sono allineati (diskpart mi da 1024). La ram è praticamente il doppio delle dimensioni del database esistente e la CPU è usata pochissimo durante la query.

    Secondo voi cosa potrebbe essere?

    Grazie

    ciao

    giovedì 10 marzo 2016 20:22

Risposte

  • ciao avatar2000

    per rispondere alla tua domanda, bisogna in primis esser sicure di misurare i dati in modo corretto e coerente. Se vuoi misurare le performance dell I/O fisici, devi in primis ricordati di svuotare la cache per essere sicuro che il DB non sia in memoria, usando

    DBCC DROPCLEANBUFFERS

    prima di ogni esecuzione. Attiva poi la visualizzazione delle statistiche IO con 

    SET STATISTICS IO ON

    e quindi è possibile misurare quello che succede.

    Che query utilizzi come riferimento? Se è una query complessa potresti avere un collo di bottiglia sulla CPU, quindi la velocita aggiuntiva non la vedresti perchè c'è qualcos'altro che ti sta rallentando. Idem se stai facendo una query che restituisce molti dati, in quel caso stai sicuramente pagando pegno sul caricamento dei dati in griglia (se stai usando il Management Studio). Usa una query che costringa SQL Server a fare una scansione della tabella, senza usare indici non-cluster o columnstore, e che restituisca poche o nessuna riga (ad esempio usa la funzione MAX su una colonna non indicizzata)

    Ciao!


    Davide Mauri Microsoft SQL Server MVP www.davidemauri.it

    domenica 13 marzo 2016 10:42
    Moderatore

Tutte le risposte

  • Probabilmente il db è totalmente in memoria ram...

    Gastone Canali >http://www.armadillo.it


    Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere

    giovedì 10 marzo 2016 20:41
  • ok effettivamente è possibile visto che la ram è nettamente superiore alle dimensioni del DB, però all'avvio di SQL la prima volta che eseguo la query il tempo che ci impiega è sempre uguale nonostante il DB non è caricato in RAM (la memoria è ancora al minimo), non dovrebbe leggere da disco e caricare i dati in ram al primo utilizzo?
    venerdì 11 marzo 2016 15:35
  • ok effettivamente è possibile visto che la ram è nettamente superiore alle dimensioni del DB, però all'avvio di SQL la prima volta che eseguo la query il tempo che ci impiega è sempre uguale nonostante il DB non è caricato in RAM (la memoria è ancora al minimo), non dovrebbe leggere da disco e caricare i dati in ram al primo utilizzo?

    Il tuo ragionamento è corretto, ma l'analisi è molto  più complessa e le variabili in gioco sono tante, piani di esecuzione, indici, temp db, ottimizzazioni ... etc.  se confronti le due query (hd vs SSD) al centesimo di secondo, troverai dei miglioramenti dovuti al disco allo stato solido, ma non apprezzabili ad occhio.

    ciao


    Gastone Canali >http://www.armadillo.it


    Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere

    venerdì 11 marzo 2016 21:16
  • ciao avatar2000

    per rispondere alla tua domanda, bisogna in primis esser sicure di misurare i dati in modo corretto e coerente. Se vuoi misurare le performance dell I/O fisici, devi in primis ricordati di svuotare la cache per essere sicuro che il DB non sia in memoria, usando

    DBCC DROPCLEANBUFFERS

    prima di ogni esecuzione. Attiva poi la visualizzazione delle statistiche IO con 

    SET STATISTICS IO ON

    e quindi è possibile misurare quello che succede.

    Che query utilizzi come riferimento? Se è una query complessa potresti avere un collo di bottiglia sulla CPU, quindi la velocita aggiuntiva non la vedresti perchè c'è qualcos'altro che ti sta rallentando. Idem se stai facendo una query che restituisce molti dati, in quel caso stai sicuramente pagando pegno sul caricamento dei dati in griglia (se stai usando il Management Studio). Usa una query che costringa SQL Server a fare una scansione della tabella, senza usare indici non-cluster o columnstore, e che restituisca poche o nessuna riga (ad esempio usa la funzione MAX su una colonna non indicizzata)

    Ciao!


    Davide Mauri Microsoft SQL Server MVP www.davidemauri.it

    domenica 13 marzo 2016 10:42
    Moderatore