Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [Mysql] Tabelle continuamente in crash

    Salve a tutti,
    ho un problema su un paio di tabelle che con insistenza continuano a crashare da una settimanella a questa parte, senza che io capisca il motivo.

    Ogni volta che vado a riparare la tabella phpmyadmin mi dice che il problema può essere legato al fatto che il server non supporta la gestione dei file superiori ai 2GB.
    Questo perchè Handler_read_rnd e Handler_read_rnd_next raggiungono spesso i fatidici 2GB, senza peraltro mai svuotarsi.

    Ora, io non ho ben capito queste 2 funzioni, sul phpmyadmin è riportata tale spiegazione:

    Handler_read_rnd
    Il numero di richieste per leggere una riga basata su una posizione fissa. Questo valore è alto se stai facendo molte richieste che richiedono un ordinamento dei risultati. Probabilmente hai molte query che che richiedono a MySQL di leggere l'intera tabella oppure ci sono dei joins che non usano le chiavi correttamente.

    Handler_read_rnd_next
    Il numero di richieste per leggere la riga successiva in un file di dati. Questo valore è alto se stai facendo molte scansioni della tabella. Generalmente è un segnale che le tue tabelle non sono correttamente indicizzate, o che le query non sono state scritte per trarre vantaggi dagli indici che hai.


    Ho controllato le mie query, soprattutto le join, e sono tutte correttamente indicizzate. Effettivamente quale potrebbe essere il problema?
    Il sito è discretamente trafficato, le query al secondo 400 di media, ma per altri siti non ho mai avuto questo problema.

    Grazie a chi può illuminarmi
    Perchè uso Maxthon? | Mi piace questa chat

  2. #2

    Re: [Mysql] Tabelle continuamente in crash

    Originariamente inviato da Bukowski
    ...molte query che che richiedono a MySQL di leggere l'intera tabella oppure ci sono dei joins che non usano le chiavi correttamente.

    Handler_read_rnd_next
    ...le tue tabelle non sono correttamente indicizzate, o che le query non sono state scritte per trarre vantaggi dagli indici che hai.

    Ho controllato le mie query, soprattutto le join, e sono tutte correttamente indicizzate. Effettivamente quale potrebbe essere il problema?
    Il fatto che hai creato gli indici e che siano correttamente impostati nelle query non significa automaticamente che poi possano essere usati dal motore: dipende da come sono impostate le query e che genere di ricerca gli fai fare.
    Per fare un esempio: impiegare delle funzioni nella query (come sulle date od operazioni sulle stringhe) comporta una scansione della tabella riga per riga, vanificando così la presenza degli indici.
    Qualunque imbecille può inventare e imporre tasse. (Maffeo Pantaleoni)

  3. #3
    Mmm ... però se ho necessità reale di avere delle query che facciano operazioni su date e stringhe, come è risolvibile la questione?

    Alzando il limite dei 2GB sul server?

    O devo additare il problema proprio alla query?

    Grazie
    Perchè uso Maxthon? | Mi piace questa chat

  4. #4
    Potrebbe essere un problema hardware?
    Perchè uso Maxthon? | Mi piace questa chat

  5. #5
    Originariamente inviato da Bukowski
    Mmm ... però se ho necessità reale di avere delle query che facciano operazioni su date e stringhe, come è risolvibile la questione?

    Alzando il limite dei 2GB sul server?

    O devo additare il problema proprio alla query?
    Uhm, prima forse mi sono spiegato male, faccio un esempio:
    Codice PHP:
    select UPPER(provincie), comuni from comuni_elenco WHERE provincie 'BA' 
    la query sopra va bene, e consente l'uso dell'indice nel caso la colonna provincie sia indicizzata.

    Codice PHP:
    select provinciecomuni from comuni_elenco WHERE UPPER(provincie) = 'BA' 
    questa query invece NON consente all'ottimizzatore di MySQL l'impiego dell'indice, perché deve comunque fare una scansione fisica di tutta la tabella per eseguire la funzione UPPER().

    Riguardo le altre domande, non so, la ottimizzazione di un server è un work in progress che non ha fine. Comunque hai diversi strumenti a disposizione, come SHOW WARNINGS, SHOW ERRORS, i file slow query log, ANALYZE TABLE etc.
    Qualunque imbecille può inventare e imporre tasse. (Maffeo Pantaleoni)

  6. #6
    Ti ringrazio intanto per le delucidazioni, ma ho ancora dei dubbi. Ti porto un mio esempio diretto. Ho una tabella utenti con i dati degli stessi e una 'posta' con i messaggi che ricevono. Devo joinare le due e faccio:

    Codice PHP:
    SELECT 
    FROM utenti
    JOIN posta 
    ON utenti
    .uid posta.mittente
    WHERE posta
    .destinatario $id 
    Chiaramente utenti.uid è chiave primaria mentre posta.destinatario è un indice.

    Uso male gli indici in questo caso perchè in fase di debug il mysql dice che ho delle join che non usano correttamente gli indici ... e io solo questa uso! :master:

    grazie
    Perchè uso Maxthon? | Mi piace questa chat

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.