Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 24
  1. #11
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    ho trovato il riferimento a AVG_ROW_LENGTH:

    AVG_ROW_LENGTH ==> An approximation of the average row length for your table. You only need to set this for large tables with variable size records.

    che diverge con la definizione che hai dato tu...

    trovato anche la parte di manuale a cui ti riferisci

    When you use a MyISAM table, MySQL uses the product of MAX_ROWS * AVG_ROW_LENGTH to decide how big the resulting table will be. If you don't specify any of the above options, the maximum size for a table will be 4G (or 2G if your operating systems only supports 2G tables). The reason for this is just to keep down the pointer sizes to make the index smaller and faster if you don't really need big files.

    come già ho detto, la necessità di impostare queste direttive può solo servire per migliorare le prestazioni... per quanto riguarda la dimensione massima di una tabella effettivamente mi sorge un dubbio da quanto scritto qui sopra:
    a me sembra che la dimensione massima per tutte le tabelle sia 4GB (o comunque le dimensioni massime consentite dal file system), con queste direttive si può abbassare questo valore ma sempre in modo approssimativo (secondo me può essere superato).... cmq bisognerebbe provare, oggi pomeriggio ti posto i risultati delle mie prove


  2. #12
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    ho già fatto delle prove, ho creato una tabella con la seguente struttura:

    codice:
    CREATE TABLE `test` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `prova1` int(11) NOT NULL default '0',
      `prova2` int(11) NOT NULL default '0',
      PRIMARY KEY  (`id`)
    ) TYPE=MyISAM MAX_ROWS=50;
    poi ho lanciato varie volte questo scriot:

    Codice PHP:
    <?
    mysql_connect
    ('localhost''root''');
    mysql_select_db('test');

    for(
    $i 0$i 19$i++) {
           
    $query "INSERT INTO test (prova1, prova2) VALUES(".mt_rand(-6553665536).", ".mt_rand(-6553665536).")";
           print 
    $query"
    \n"
    ;
           
    mysql_query($query) or die(mysql_error());
    }
    mysql_close();
    ?>
    nessun errore quando si supera il valore di max_rows, ora provo con valori più grandi ma non credo cambi molto....

  3. #13
    dimensioni che possono essere raggiunte.

    codice:
    Operating System        File-Size Limit  
    Linux-Intel             32-bit  2 GB, much more when using LFS  
    Linux-Alpha             8 TB (?)  
    Solaris 2.5.1           2 GB (4GB possible with patch)  
    Solaris 2.6             4 GB (can be changed with flag)  
    Solaris 2.7 Intel       4 GB  
    Solaris 2.7 UltraSPARC  512 GB
    http://www.mysql.com/doc/en/Table_size.html

    If you need a table that will be larger than 4 GB in size (and your operating system supports large files), the CREATE TABLE statement allows AVG_ROW_LENGTH and MAX_ROWS options. Use these options to create tables that can be larger than 4 GB. See section 6.5.3 CREATE TABLE Syntax. You can also set these options later, with ALTER TABLE. See section 6.5.4 ALTER TABLE Syntax.
    In realta' sinora ho sempre trovato riferimenti per ampliare e non per ridurre la dimensione delle tabella. Mi pare anche ovvio. In un contenitore di 20 litri il mezzo litro ci sta, il contrario no.

    Fai sapere il risultato delle prove. Mi pare comunque che se uno vuole limitare le sue tabelle deve mettere un controllo sul numero delle righe e non sullo spazio complessivo occupato.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #14
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    tutto chiaro, l'altra prova che ho fatto è impostare max_rows a 500.000 e inserire più di 500.000 record, me li inserisce tranquillamente....

    continuando a leggere quella pagina che mi hai postato trovo che le dimensioni attuali massime di una tabella sono di 8.000.000 di TB ( ), quindi non credo che queste direttive servano per innalzare questo limite.... l'unico limite nella grandezza massima di una tabella risiede solo nel file system del SO.

    In ogni caso stiamo andando fuori tema, qui si vuole sapere se è possibile limitare (verso il basso) le dimensioni di un database, questi comandi servono solo per incrementare le prestazioni, non di +

  5. #15
    Da una rapida prova utilizzando i tuoi dati + avg_row_length ho ottenuto i seguenti risultati:
    codice:
    SHOW CREATE TABLE TEST:
    
    CREATE TABLE `test` (
     `id` int(10) unsigned NOT NULL auto_increment,
     `prova1` int(11) NOT NULL default '0',
     `prova2` int(11) NOT NULL default '0',
     PRIMARY KEY  (`id`)
    ) TYPE=MyISAM MAX_ROWS=50 AVG_ROW_LENGTH=100
    
    SHOW TABLE STATUS
    test MyISAM Fixed 0 0 0 851967 1024 0 1 
    2003-12-21 15:02:54 2003-12-21 15:02:54 NULL 
    max_rows=50 avg_row_length=100
    Lo script:
    Codice PHP:
    <?
    mysql_connect
    ('localhost''root''');
    mysql_select_db('test');

    for(
    $i 0$i 66000$i++) {
           
    $query "INSERT INTO test (prova1, prova2) VALUES(".mt_rand(-6553665536).", ".mt_rand(-6553665536).")";
           print 
    $query"
    \n"
    ;
           
    mysql_query($query) or die(mysql_error());
           echo 
    "$query
    "
    ;
    }
    mysql_close();
    ?>
    codice:
    Tipo   Utilizzo 
    Dati   851.955 Bytes 
    Indice 401.408 Bytes 
    Totale 1.224 KB 
    
    Formato fisso  
    Righe 65.535  
    Lunghezza riga ø 13  
    Dimensione riga ø 19 Bytes  
    Prossimo Autoindex 65.536  
    Creazione 21 Dic, 2003 at 03:02 PM  
    Ultimo cambiamento 21 Dic, 2003 at 03:02 PM
    .......
    INSERT INTO test (prova1, prova2) VALUES(-31265, -65223)
    INSERT INTO test (prova1, prova2) VALUES(-31265, -65223)
    INSERT INTO test (prova1, prova2) VALUES(57020, 50313)
    The table 'test' is full

    Quindi la cosa funge, non riduce la capacita' in modo arbitrario, ma nel valore massimo realizzabile con i bit necessari a soddisfare la richiesta fatta. Mi pare che quella che riporto sia la minima dimensione impostabile cioe' complessivamente circa 1.2 megabyte. come visibile in tabella.

    Prova ad alterare MAX_ROWS=50 AVG_ROW_LENGTH=100
    con alter table e vedrai la dinamica di incremento. Non solo, provando ad impostare dimensioni di tabella maggiori si vedra' molto chiaramente un incremento dei tempi necessari all'inserimento delle righe. Nell'esempio riportato la query con 65535 righe inserite e fatta rapidamente, con una tabella da 2giga va invece in time-out dei 30 secondi. Stessa tabella e stessa quantita' di dati da inserire.

    Da tenere in considerazione quest'ultima annotazione....


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #16
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    scusami se insisto ma a me non funziona.... ho fatto esattamente come dici ma continua ad inserirmi righe su righe, che versione di mysql hai??

  7. #17
    Originariamente inviato da kuarl
    scusami se insisto ma a me non funziona.... ho fatto esattamente come dici ma continua ad inserirmi righe su righe, che versione di mysql hai??
    4.0.15-nt

    Non e' che ti e' sfuggito che ho aggiunto avg_row_length?
    I parametri sono due per definire la dimensione, se ne metti solo 1 moltiplica per 0 ed usa il default.

    Ripeto che non ho mai accenato a che max_rows sia il massimo numero di righe inseribili, ma sempre ho detto che il prodotto (risultato di una moltiplicazione) di max_rows e avg_row_length definisce la dimensione necessaria alla tabella, ed aggiungo, valore che viene utilizzato da mysql per definire la dimensione ottimizzata per dati e indice. Dimensione ottimizzata perche' offre la capacita' massima di tabella disponibile per quel range di valore richiesto dall'utente.

    E stando alle prove velocizzando enormemente l'inserimento dei dati.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #18
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    Originariamente inviato da piero.mac
    4.0.15-nt

    Non e' che ti e' sfuggito che ho aggiunto avg_row_length?
    I parametri sono due per definire la dimensione, se ne metti solo 1 moltiplica per 0 ed usa il default.

    Ripeto che non ho mai accenato a che max_rows sia il massimo numero di righe inseribili, ma sempre ho detto che il prodotto (risultato di una moltiplicazione) di max_rows e avg_row_length definisce la dimensione necessaria alla tabella, ed aggiungo, valore che viene utilizzato da mysql per definire la dimensione ottimizzata per dati e indice. Dimensione ottimizzata perche' offre la capacita' massima di tabella disponibile per quel range di valore richiesto dall'utente.

    E stando alle prove velocizzando enormemente l'inserimento dei dati.

    ok ho ottenuto l'errore però ancora non sono ancora riuscito a capirne il meccanismo, avg_row_length non dovrebbe essere la lunghezza media di una riga?? in byte? se io dico ad esempio che la mia riga è lunga 19 byte e la tabella deve contenere 100 righe non dovrebbe crearmi una tabella di massimo 1900 byte?

  9. #19
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    mi sembra un po strana questa cosa.... variando max_rows e avg_row_length lui continua imperterrito ad inserire le sue 65535 righe senza andare oltre..... di certo c'è una relazione, infatti se non sono entrambe impostate l'errore non lo da...

  10. #20
    Originariamente inviato da kuarl
    ok ho ottenuto l'errore però ancora non sono ancora riuscito a capirne il meccanismo, avg_row_length non dovrebbe essere la lunghezza media di una riga?? in byte? se io dico ad esempio che la mia riga è lunga 19 byte e la tabella deve contenere 100 righe non dovrebbe crearmi una tabella di massimo 1900 byte?
    infatti non e' semplice la storia. Intanto dipende dal tipo di row_format che puo' essere dinamico o fisso.

    Quel che ho notato e' che non scende mai sotto i 65535 records. Quantomeno non ci sono riuscito. Questo significa 16bit di indirizzamento per i records. Con campi di dimensione fissa il calcolo e' presto fatto.
    E credo sia il massimo raggiungibile con il minimo dell'impostazione.

    Se invece un utente vuole controllare che le righe inserite non siano piu' di un tot deve farsi un suo controllo. la via non e' questa. Riducendo pero' le dimensioni complessive della tabella aumentano le performance.

    Se ho tempo faro' un po di test su tabelle con row_format dynamic.
    Trovo molto interessante questo incremento prestazionale.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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