Pagina 1 di 7 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 64
  1. #1

    [PILLOLA]: ottimizzare MYSQL per prestazioni migliori

    Ciao a tutti; ho pensato di scrivere una breve pillola su come ottimizzare MYSQL per renderene l'eseguzione più veloce ed efficente...

    I passi da compiere sono fondamentalmente 3:

    1)Realizzare istruzioni SQL efficaci:
    le istruzioni SQL, se ben progettate, diminuiscono di molto il tempo di eseguzione della query siccome sarebbe possibile scrivere un libro intero sull'argomento, ed ognuno avrebbe la sua in proposito, vi do solo delle semplici linee guida da seguire.
    • l'utilizzo degli indici velocizza di molto l'eseguzione della query; per questo motivo è bene utilizzare gli indici ogni volta che è possibile
    • Evitare l'utilizzo di "punteggiature estranea" nelle proprie query: infatti Mysql analizza prima i segni di interpretazione estranei prima di eseguire la query, e per questo motivo l'eseguzione risulta rallentata. La punteggiatura estranea comprende, per esempio, le parentesi aggiuntive, utilizzate da molti per ordinare le query.
    • La parola LIMIT utilizzata nelle proprie query obbliga Mysql ad utilizzare gli indici anke quando normalmente ciò non dovrebbe avvenire.
    • Rendere sicuro un database è sicuramente una buona cosa, ma come sappiamo "il troppo stroppia"!!Infatti quanto maggiore è la sicurezza, tanto maggiore sarà il carico di informazioni che dovrà supportare Mysql. Un consiglio potrebbe essere quello di controllare la sicurezza a livello di PHP, e non a livello server, così da sovraccaricare meno il database.
    • Un ultimo accorgimento è quello di usare SELECTCOUNT(+) per il conteggio di tutte le righe di un database. Infatti questa funzione usa il numero contenuto nell'intestazione della tabella per conteggiare le righe.

    2)Realizzare Tabelle più veloci:
    La realizzazione di tabelle veloci ed efficenti è sicuramente il modo migliore per gestire il proprio database. Oltre al consiglio di progettare al meglio il database prima di crearlo, vi posso dare le seguenti direttive:[*]Utilizzare il tipo di dati, per un campo, il più piccolo possibile, in modo da utilizzare meno memoria e da recuperare i dati più velocemente.
    • Evitare di utilizzare campi NULL; piuttosto inserire un valore vuoto (che è diverso da nullo!!). In questo modo si risparmia spazio (lo so, è assucrdo che QUALCOSA occupi più-spazio di NULLA ma è così) e si velocizzano le operazioni.
    • Evitare l'uso di colonne a lunghezza variabile; come vediamo queste influenzano il tipo di tabella utilizzata, peggiorando le prestazioni. Se è proprio necessario, ovviamente, nn si può fare nulla!
    • Qui entriamo nel discorso TIPO TABELLA: esistono 3 tipi di tabelle a cui può accede chiunque (static,dynamic,heap) ed una a cui hanno accesso solo gli utenti paganti (compressed); la tabella static è quella standard, molto veloce, e viene utilizzata quando nn sono presenti campi variabili; altrimenti la tabella è convertita automaticamente in dynamic, un tipo di tabella più lento. la tabella heap è una tabella temporanea, molto veloce per tabelle di piccole dimensioni, che esiste solo in memoria. Non l'ho mai usate, anke se dovrebbe essere particolaremte utile per unioni o cose simili. Infine la tabella compressed è un tipo di tabella di sola lettura, che richiede poco spazio su disco ed è molto veloce.
    • I valori predefiniti, sfruttati da poche persone, sono invece molto utili durante le operazioni di insert; inquesto caso si risparmia tempo per l'analisi dell'istruzione.
    • Infine vi consiglio di evitare l'utilizzo di troppi indici: questi velocizzano le istruzioni di SELECT, ma rallentano INSERT ed UPDATE.

    4)Reimpostare le variabili di sistema:
    Qui entriamo in un discorso più specifico: le variabili di sistema di mysql possono essere impostate per migliorarne le prestazioni, sia per quanto riguarda l'affidabilità che la velocità di esguzione. Le variabili che vi elenco sono 5; ne sono presenti molte di più, ma il loro utilizzo specifico è un po com plesso, oppure sono variabili di uso facilmente comprensibile.Dicevamo:
    [list=1][*]buffers: l'incremeto di qualunque buffer permetterà di ottenere un database molto più veloce. Attenti però che un'impostazione troppo alta potrebbe creare solamente danni. Impostate quindi i buffers in base alla quantità di memoria disponibile.[*]Wait_timeout: rappresenta il tempo che trascorre prima che venga chiusa automaticamente una connessione a Mysql a causa dell'inattività. Abbassare il numero fa migliorare le prestazioni.[*]back_log: controlla quante connessioni simultanee è in grado di reggere Mysql mentre crea nuovi thread. Minore è il numero, maggiore sarà la velocità, ma la prestazione effettiva potrbbe risentirne.[*]Delayed_queue_size: rappresenta il numero di righe accodabili con INSERT DELAYED. Meno saranno le righe accodabili, più veloce sarà Mysql.[*]table_cache: controlla il numero di tabelle aperte per tutti i thread; aumentando questa variabile, aumenteranno le tabelle caricate contemporaneamente e l'esecuzione di Mysql sarà molto più veloce. Il problema in questo caso sorge dal tipo di sistema operativo, che potrebbe avere dei limiti che possono influire sui files caricati contemporaneamente.[/list=1]

    come ultimo consiglio vi posso , in caso abbiate un vostro server, darvi quello di far funzionare Mysql sotto Linux, e di avere un pc con un buon hardware per sostenere molto più velocemente le operazioni di Mysql.

    Aspetto critiche , aggiunte e consigli

    HASTA!:metallica
    eXtending-Php.net coming soon ...

  2. #2
    Scusa se rovino la tua bellissima, fantamagorica pillola con un appunto...

    Siamo d´accordo sulla velocitá e sulla necessitá di progettare il database a tavolino in modo corretto, ma non credi avresti dovuto dire due parole sulle ridondanze e sull´influenza che queste hanno sulla velocitá di esecuzione delle query?

    ciao, e complimenti per la pillola
    raga, non ne so assolutamente nulla!

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    9

    solo una nota:

    >>l'utilizzo degli indici velocizza di molto l'eseguzione della >>query; per questo motivo è bene utilizzare gli indici ogni volta >>che è possibile

    Non è esattamente vero mi spiego: gli indici velocizzano la query se parliamo di una query di select ma quando andiamo a fare delle query di insert o update un indice di troppo potrebbe essere pesantissimo infatti mysql al momento di un insert/update deve andare ad inserire i campi indicizzati anche nella sua tabella di indicizzazione e "ordinarla" ...quindi prima di indicizzare chiedetevi se ne vale la pena a seconda del tipo di operazioni (richieste o data entry) che saranno fate su quella tabella.


  4. #4

    Re: solo una nota:

    Originariamente inviato da maxbet

    Non è esattamente vero mi spiego: gli indici velocizzano la query se parliamo di una query di select ma quando andiamo a fare delle query di insert o update un indice di troppo potrebbe essere pesantissimo infatti mysql al momento di un insert/update deve andare ad inserire i campi indicizzati anche nella sua tabella di indicizzazione e "ordinarla" ...quindi prima di indicizzare chiedetevi se ne vale la pena a seconda del tipo di operazioni (richieste o data entry) che saranno fate su quella tabella.
    mi sembra di averlo detto chiaramente...
    eXtending-Php.net coming soon ...

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    9

    scusami.....

    ..non avevo letto quella riga

  6. #6
    certo che ti scuso!!

    (ti sembro troppo buono?? è che sono fuori in incognito per mescolarmi tra di voi!!!:gren: :gren: )

    eXtending-Php.net coming soon ...

  7. #7
    Originariamente inviato da disa
    ...ma non credi avresti dovuto dire due parole sulle ridondanze e sull´influenza che queste hanno sulla velocitá di esecuzione delle query?
    aggiungi pure!!
    eXtending-Php.net coming soon ...

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    9

    se le spendi tu le parole...

    sono più contento...così magari imparo qualche cosa.

  9. #9
    quando ho tempo volentieri...
    eXtending-Php.net coming soon ...

  10. #10

    Ridondanze

    Riprendendo il punto (2) dell´ottima pillola di Dark Bard, pensavo di parlare un po´ delle ridondanze, la cui presenza é da decidere in fase di progettazione del database.
    Il problema é piú complesso di quel che potrebbe si potrebbe in un primo momento pensare.

    Per ridondanza si intende una ripetizione di un´informazione, cioé inserire in una certa tabella un dato ricavabile per mezzo di query dal resto del database. Ad esempio un attributo che puó essere derivato da altri attributi della stessa tabella o di altre.

    La presenza di ridondanze porta come vantaggio la semplificazione delle query e un aumento della velocitá di esecuzione.
    L´inserimento di queste porta peró anche notevoli svantaggi come l´appesantimento degli aggiornamenti e un maggiore spazio occupato.

    Ma quando conviene inserire una ridondanza in un database?

    Prima di inserire una ridondanza all´interno del database é necessario analizzare le sue prestazioni.
    I due principali indici di prestazione considerano costo delle operazioni e occupazione di memoria. Nel caso di un database (che é il caso che analizzo), il costo di un´operazione é misurato in funzione del numero di occorrenze delle tabelle e delle associazioni che le coinvolgono. Per fare questa analisi é necessario conoscere il volume di dati, cioé occorrenze e dimensioni degli attributi, e le caratteristiche delle operazioni, cioé tipo di operazione, la frequenza e i dati coinvolti.
    In genere é sufficiente limitarsi ad analizzare le prestazioni delle operazioni piú frequenti.
    Per desrivere il volume dei dati e le caratteristiche delle operazioni é possibile costruire la tavola dei volumi, in cui vengono riportati tutti i concetti dello schema con i volumi di accessi previsti e la tavola delle operazioni dove sono inserite i tipi di operazioni e loro frequenza.
    Per facilitare l´analisi si considera solitamente un accesso in scrittura come il doppio di uno in lettura.
    Quindi accedere 2 volte in lettura ad una tabella equivale ad accedere 1 volta in scrittura.

    La presenza o meno di una ridondanza é quindi essenziale in termini di prestazione di un database, soprattutto se questo inizia ad avere un numero elevato di dati.

    Spero di essermi spiegato. Aspetto le giuste critiche
    :gren:

    raga, non ne so assolutamente nulla!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.