MySQL: Il tavolo è pieno di errore - risolto
Oltre alle mie funzioni regolarmente, io sono anche il DBA (amministratore di database) e onorari ultimamente ho errori risolvere correguir e MySQL. Tutto è cominciato con il problema descritto di seguito:
Tra tutte le nostre banche dati, ce n'è uno in particolare, che gestisce una media di 40k transazioni al giorno. Questo database viene eseguito su MySQL, che ha una tabella che supera già i 21 milioni di dischi, che lo rendono hanno 4 GB di informazioni.
Per le sue dimensioni, questo errore ha mostrato delle tabelle MyISAM Il tavolo è pieno, che in un primo momento abbiamo pensato che potrebbe essere limitazioni kernel 2.4.x ext2 file system (se si tratta di una Red Hat Linux 9).
MySQL 4GB Limit
L'errore di MySQL, la tabella è piena è un messaggio che viene visualizzato quando si raggiunge una tabella di 4 GB di dimensione, molto sottovalutato l'impatto, poiché sono poche le applicazioni che possono superare questa quantità di dati. Ma quando abbiamo consolidato i nostri servizi ei nostri server di database MySQL smette di funzionare, è un grave problema.
Si consiglia di fare una buona analisi e progettazione del nostro database in modo che ciò non accada. Tuttavia, a volte è difficile immaginare che una tabella può contenere 21 milioni record in due anni.
InnoDB non hanno questa limitazione, perché il suo modello di archiviazione è completamente diversa. In una tabella MyISAM con righe di lunghezza dinamica o variabile, il file di indice della tabella (nombre_tabla.MYI) file memorizzati utilizzando 32-puntatore bit nel file di dati (nombre_tabla.MYI). Questo ha un limite di 4 GB di spazio.
Ricordate che maggior parte dei computer a 32 bit da tecnologie come il 64-bit AMD Opteron hanno anche il supporto per 32bit.
Risolvere il problema della tabella è piena
La soluzione per la tabella è piena, non è molto dicil, appena sufficiente per eseguire il comando ALTER TABLE, ma può richiedere molto tempo. Consideriamo l'esempio della tabella creatura Lunghezza manica:
mysql> descrivere creatura;
+-----------------+-----------------------+------+ -----+---------+----------------+
| Field          | Type                 | Null | Key | Default | Extra         |
+-----------------+-----------------------+------+ -----+---------+----------------+
| Guida           | int (10)     unsigned | NoA | PRI | NULL  | auto_increment |
| Ida             | MEDIUMINT (8) unsigned | NoA | MUL | 0A      |                |
| Mappa            | smallint (5) unsigned | NoA | MUL | 0A      |                |
| SpawnMask      | tinyint (3)  unsigned | NoA |     |   1    |                |
| Modelli        | MEDIUMINT (8) unsigned | NoA |     | 0A      |                |
| Equipment_id   | MEDIUMINT (9)          | NoA |     | 0A      |                |
| Position_x     | float                | NoA |     | 0A      |                |
| Position_y     | float                | NoA |     | 0A      |                |
| Position_z     | float                | NoA |     | 0A      |                |
| Orientamento    | float                | NoA |     | 0A      |                |
| Spawntimesecs  | int (10)     unsigned | NoA |     | 120A    |                |
| Spawndist      | float                | NoA |     |  5a     |                |
| Currentwaypoint | MEDIUMINT (8) unsigned | NoA | Â Â Â Â | 0A Â Â Â Â Â | Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â |
| Curhealth      | int (10)     unsigned | NoA |     |   1    |                |
| Curmana        | int (10)     unsigned | NoA |     | 0A      |                |
| DeathState     | tinyint (3) A unsigned | NoA |     | 0A      |                |
| MovementType   | tinyint (3) A unsigned | NoA |     | 0A      |                |
+-----------------+-----------------------+------+ -----+---------+----------------+
17 rows in set (0.02 sec)
Per trovare il limite della dimensione della tabella, utilizzare il STATUS SHOW TABLE. E si noti che Max_data_length è di 4 GB.
mysql> creatura SHOW TABLE STATUS LIKE '\ G;
*************************** 1. row ***************************
          Nome: creatura
        Motore: MyISAM
       Version: 10
    Row_format: Dynamic
          Righe: 95.094
 Avg_row_length: 46
   Data_length: 4382696
Max_data_length: 281474976710655
  Index_length: 2628608
     Data_free: 0
 Auto_increment: 106.039
   Create_time: 2008-09-19 09:54:05
   Update_time: 2008-09-19 10:31:08
    Check_time: 2008-09-19 10:31:09
     Fascicolazione: utf8_general_ci
      Checksum: NULL
Create_options Â: row_format = DYNAMIC
       Commento: Summon System
1 row in set (0.00 sec)
ERRORE:
No query specificata
mysql>
Let's risolvere questo problema digitando: mysql> ALTER TABLE AVG_ROW_LENGTH creatura max_rows = 200000000000 = 50;
Query OK, 0 rows affected (0.03 secondi)





























