+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 5 su 5

[MySQL] Errore su Tabella ENGINE=MEMORY;

  1. #1
    w_t
    w_t non è in linea Scolaretto
    Post
    107
    Like Inviati  
    0
    Like Ricevuti  
    0
    Salve,
    non riesco a venire a capo di questo broblema:

    ho da inserire in una Tabella del tipo "engine=MEMORY"

    15.000.000 di record con 3 colonne
    -------------------------------------
    Numero CHAR(12);
    Operatore CHAR(4);
    Data DATETIME();


    faccio:

    INSERT INTO my_table_memory (Numero, Operatore, Data)
    SELECT Numero, Operatore, Data FROM my_table_myisam;
    
    ma al 600.350 record mi dice "Tabella piena..."

    COME MAI ???

  2. #2
    L'avatar di Master85
    Master85 non è in linea Moderatore Globale Ultimo blog: Eclipse: Un IDE per PHP e Python
    Post
    4,902
    Blogs
    9
    Like Inviati  
    55
    Like Ricevuti  
    31
    Ciao w_t,
    una tabella MEMORY da 15.000.000 di record. Personalmente non capisco il perche' della tua scelta e per concludere, credo che il messaggio d'errore scaturisca dal fatto che al 600.350'esimo record si sia esaurito lo spazio fisico disponibile nella RAM del Server. Evita l'utilizzo di una tabella di tipo Memory per questo genere di applicazioni.


  3. #3
    w_t
    w_t non è in linea Scolaretto
    Post
    107
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da Master85 Visualizza il messaggio
    Ciao w_t,
    una tabella MEMORY da 15.000.000 di record. Personalmente non capisco il perche' della tua scelta e per concludere, credo che il messaggio d'errore scaturisca dal fatto che al 600.350'esimo record si sia esaurito lo spazio fisico disponibile nella RAM del Server. Evita l'utilizzo di una tabella di tipo Memory per questo genere di applicazioni.
    ma sai cosa succedeva....

    dato che non esiste un parametro di Default in "EasyPHP2.0" della quantità massima da potere allocare in RAM, mi limitava ad una quantità molto bassa, poi ho trovato in una ricerca che si deve aggiungere il parametro:

    max_heap_table_size = 1000M

    chiaramente 1000 ho deciso io dato che ho 2Gb di RAM metà la lascio per la tabella,
    ora funziona tutto alla perfezione,
    solamente che le performanca non cambiano, sono identiche a quelle delle tabelle "MyIsam",

    cosa devo fare per ottimizzare le SELECT in cosi tanti record apparte ad una indicizzazione con Chiave primaria ???

  4. #4
    L'avatar di Master85
    Master85 non è in linea Moderatore Globale Ultimo blog: Eclipse: Un IDE per PHP e Python
    Post
    4,902
    Blogs
    9
    Like Inviati  
    55
    Like Ricevuti  
    31
    Quote Originariamente inviato da w_t Visualizza il messaggio
    cosa devo fare per ottimizzare le SELECT in cosi tanti record apparte ad una indicizzazione con Chiave primaria ???
    Ciao w_t,
    personalmente, ti consiglio di evitare l'uso di Tabelle di tipo HEAP in questo tipo di scenario. Sai bene che questo tipo di memorizzazione e' volatile, il che significa che al riavvio del servizio MySQL, i dati contenuti nelle tabelle HEAP vegono cancellati. Per ovviare a questi problemi dovresti caricare nuovamente i dati nella tabella HEAP, e caricare 15.000.000 di record non credo sia un'operazione molto veloce, ovviamente trascurando l'ipotesi di avere a disposizione risorse Hardware di un certo tipoo ( Clustering etc... ).

    Se leggi questo articolo: Table types in MySQL: Part 1 - HEAP tables, ti renderai conto che la differenza della velocita' di accesso e di scrittura tra i due tipi di tabelle HEAP e MyISAM sia bassa. E comunque, il parametro da te indicato "max_heap_table_size" rappresenta la soglia di memoria utilizzabile dalle tabelle HEAP, superato questo parametro, le ultime versioni di MySQL, convertono automaticamente la tabella HEAP in MyISAM, mantenendo i dati su HD e l'indice in RAM.

    In conclusione ti consiglio di ricorrere ad una tabella di tipo MyISAM creando ovviamente una chiave primaria.


  5. #5
    w_t
    w_t non è in linea Scolaretto
    Post
    107
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da Master85 Visualizza il messaggio
    Ciao w_t,
    In conclusione ti consiglio di ricorrere ad una tabella di tipo MyISAM creando ovviamente una chiave primaria.
    Ti ringrazio molto per la tua disponibilità, infatti dopo alcune prove ho deciso di fare come hai detto tu, indicizzando con chiave primaria una

    SELECT campo-non-indicizzato FROM Tabella WHERE (campo-indicizzato = 'xxxxxxxxx');

    su 15.000.000 record mi impiega dai 15 millisecondi ai 50 a seconda del processore quanto è impognato in quel momento,
    mi sembra buono !!!!

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 4
    Ultimo Post: 27-11-2020, 17:54
  2. Risposte: 0
    Ultimo Post: 11-07-2011, 17:00
  3. Risposte: 8
    Ultimo Post: 17-06-2011, 12:42
  4. Risposte: 6
    Ultimo Post: 26-10-2010, 07:01
  5. template engine
    Da schirone nel forum PHP
    Risposte: 1
    Ultimo Post: 15-10-2008, 13:37