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

    [Mysql] eliminazione di molti dati

    Ciao a tutti,
    ho un problema con una tabella di tipo myisam contenente circa 40/50mila record, ma di 1 giga di peso (è presente un campo mediumtext).

    Siccome questa tabella è aggiornata in continuazione, la tengo pulita eliminando ogni giorno i record più vecchi di 24 ore.

    Purtroppo, usando un
    delete from tabella where data < 'ieri'
    ci mette veramente troppo, mandando in lock tutte le connessioni in coda (circa 400/500).


    Al momento mi arrangio con un:
    select id_tabella from tabella where data < 'ieri'
    Do until rs.eof
    delete from tabella where id_tabella = "&rs("id_tabella")&"
    rs.movenext
    loop


    In questo modo però, ci mette davvero tanto, elimina circa 1 record al secondo.


    Come cavolo posso fare per velocizzare questo processo?

    Grazi mille!!!



    P.s. uso mysql 5

  2. #2
    la delete può funzionare come la select!

    delete from tabella where data < 'ieri'

    con attenzione, oc!

  3. #3
    Purtroppo, usando un
    delete from tabella where data < 'ieri'
    ci mette veramente troppo, mandando in lock tutte le connessioni in coda (circa 400/500).

  4. #4
    Giusto per riportare i dati esatti, ho usato il delete aggiungendo limit 20:

    Righe cancellate: 20 (La query ha impiegato 9.1442 sec)


    Il campo data è anche indice, quindi la lentezza non è la ricerca ma è proprio la cancellazione.

    Non so proprio come fare!

  5. #5
    e allora questa è roba da maghi

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150
    Non conosco MySql, ma su Oracle (e credo che in generale il funzionamento è lo stesso), se vai in cancellazione su una tabella, viene frammentata la tablespace dove risiede, compromettendo a lungo andare l'estrazione (o le successive cancellazioni) dei dati in essa contenuti.

    In Oracle ci sono vari strumenti per risolvere il problema. Alcuni utilizzabili anche a "caldo". Verifica se su Mysql puoi effettuare qualche ottimizzazione o "deframmentazione" del db (o della singola tabella), magari da schedulare la notte.

    Insomma, probabile che il problema sia esclusivamente dovuto alla delete.

    Se trovi le procedure per la "deframmentazione" o "analize" della tablespace, fammi sapere, perchè in futuro dovrò lavorarci anch'io con MySql.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.