1114 (HY000): il tavolo è pieno


114

Sto cercando di aggiungere una riga a una InnoDBtabella con una semplice query:

INSERT INTO zip_codes (zip_code, city) VALUES ('90210', 'Beverly Hills');

Ma quando provo a eseguire questa query, ottengo quanto segue:

ERRORE 1114 (HY000): la tabella zip_codesè piena

Fare un

SELECT COUNT(*) FROM zip_codes

mi dà 188.959 righe, che non sembrano troppe considerando che ho un'altra tabella con 810.635 righe nello stesso database.

Sono abbastanza inesperto con InnoDB enginee non ho mai avuto questo problema con MyISAM. Quali sono alcuni dei potenziali problemi qui?

EDIT: questo si verifica solo quando si aggiunge una riga alla zip_codestabella.


L'errore si verifica quando si tenta di inserire in una tabella o solo in quella zip_codes?
Chad Birch

Risposte:


92

EDIT: Primo controllo, se non hai esaurito lo spazio su disco, prima di risolvere la risoluzione relativa alla configurazione.

Sembra che tu abbia una dimensione massima troppo bassa per la innodb_data_file_pathtua my.cnf, In questo esempio

innodb_data_file_path = ibdata1:10M:autoextend:max:512M

non è possibile ospitare più di 512 MB di dati in tutte le tabelle innodb combinate.

Forse dovresti passare a uno schema innodb-per-table usando innodb_file_per_table.


C dove otteniamo questo file my.cnf in ubuntu

3
@Nadh In Ubuntu 16.04 fa parte /etc/mysql/ed è parzialmente suddiviso in file aggiuntivi in/etc/mysql/conf.d
Martin C.

Il mio ha funzionato dopo aver aggiunto la innodb_data_file_pathlinea /etc/mysql/mysql.conf.d/mysqld.cnfe riavviato i servizi mysqleapache2
Timmah

81

Un altro motivo possibile è che la partizione è piena: questo è proprio quello che è successo a me ora.


1
Questa dovrebbe essere sempre la prima cosa da controllare. Torna sempre al cavo di alimentazione, mi sono imbattuto in questo molte volte.
Steven Church

1
Mi hai risparmiato alcune ore cercando di modificare la configurazione di mysql. La partizione primaria era piena. Ho dovuto spostare il database mysql nella partizione dati e quindi creare un collegamento
software

2
utilizzare df -hper controllare la dimensione del disco
Amit Bera

25

Riceverai anche lo stesso errore ERRORE 1114 (HY000): la tabella "# sql-310a_8867d7f" è piena

se si tenta di aggiungere un indice a una tabella che utilizza lo storage engine MEMORY.


Questo è successo a me ma sembrava che il mio cliente stesse usando una sintassi sbagliata. Quando si aggiunge lo stesso indice con un semplice ALTER TABLE my_table ADD INDEX my_index (column_a, column_b);ha funzionato.
thephper

22

È necessario modificare il limite massimo impostato in my.cnf per le tabelle INNO_DB. Questo limite di memoria non è impostato per le singole tabelle, è impostato per tutte le tabelle combinate.

Se desideri che la memoria si estenda automaticamente a 512 MB

innodb_data_file_path = ibdata1:10M:autoextend:max:512M

Se non conosci il limite o non vuoi mettere un limite massimo, puoi modificarlo in questo modo

innodb_data_file_path = ibdata1:10M:autoextend

Abbiamo ospitato il nostro ddbb su Amazon ed è stato configurato con autoextend. Ma abbiamo avuto lo stesso problema che presumo fosse dovuto al raggiungimento del limite memorizzato configurato
borjab

12

Questo errore appare anche se la partizione su cui tmpdirrisiede si riempie (a causa di una tabella di alterazione o altro


11

Nel mio caso, questo perché la partizione che ospita il file ibdata1 era piena.


10

Potresti esaurire lo spazio nella partizione in cui sono archiviate le tabelle mysql (di solito / var / lib / mysql) o in cui sono archiviate le tabelle temporanee (di solito / tmp).

Potresti voler: - monitorare lo spazio libero durante la creazione dell'indice. - punta la variabile tmpdir MySQL in una posizione diversa. Ciò richiede un riavvio del server.


8

Anch'io ho riscontrato questo errore durante l'importazione di un file di database sql da 8 GB. Ho controllato la mia unità di installazione di mysql. Non c'era più spazio nel drive. Quindi ho ottenuto un po 'di spazio rimuovendo gli elementi indesiderati e ho rieseguito il comando di importazione del database. Questa volta ha avuto successo.


7

Se usi NDBCLUSTER come motore di archiviazione, dovresti aumentare DataMemorye IndexMemory.

Mysql FQA


6

A meno che tu non abbia abilitato l' innodb_file_per_tableopzione, InnoDBmantiene tutti i dati in un file, solitamente chiamato ibdata1.

Controlla la dimensione di quel file e verifica di avere abbastanza spazio su disco nell'unità su cui risiede.


5

abbiamo avuto: SQLSTATE [HY000]: Errore generale: 1114 La tabella "catalog_product_index_price_bundle_sel_tmp" è piena

risolto da:

modifica configurazione di db:

nano /etc/my.cnf

tmp_table_size = 256M max_heap_table_size = 256M

  • riavviare db

1
Queste impostazioni 512M sono pericolose. Controllano la dimensione massima della memoria per le tabelle temporanee nelle selezioni complesse. Non è solo "per connessione", ma anche "per tabella tmp". Quindi, quei valori potrebbero facilmente farti esaurire la RAM.
Rick James

4

Per citare i documenti MySQL.

Il motore di archiviazione InnoDB mantiene le tabelle InnoDB all'interno di un tablespace che può essere creato da diversi file. Ciò consente a una tabella di superare la dimensione massima dei singoli file. Il tablespace può includere partizioni di dischi non elaborati, che consentono tabelle estremamente grandi. La dimensione massima dello spazio tabella è 64 TB.

Se stai utilizzando tabelle InnoDB e lo spazio nel tablespace InnoDB è esaurito. In questo caso, la soluzione è estendere il tablespace InnoDB. Vedere la Sezione 13.2.5, ["Aggiunta, rimozione o ridimensionamento di dati e file di registro InnoDB".]


4

nel mio caso, è solo perché il server mysql viene eseguito insieme a un'applicazione, che scrive troppi log, che il disco è pieno.

puoi controllare se il disco ha abbastanza spazio da usare

df -h

se la percentuale di utilizzo del disco è del 100%, puoi utilizzare questo comando per trovare quale directory è troppo grande

du -h -d 1 /

4

UTENTI DOCKER: questo accade anche quando hai raggiunto circa il 90% delle dimensioni dell'immagine Docker limite di (sembra che il 10% sia necessario per il caching o giù di lì). La formulazione è fonte di confusione, poiché significa semplicemente la quantità di spazio su disco che Docker può utilizzare praticamente per tutto.

Per risolvere il problema, vai alle impostazioni del desktop Docker> Disco> sposta il dispositivo di scorrimento un po 'più a destra> Applica.

inserisci qui la descrizione dell'immagine


2

Su CentOS 7 il semplice arresto e l'avvio del servizio MySQL ha risolto il problema.

sudo service mysql stop

sudo service mysql start


Stranamente questo ha funzionato anche per me .... Non avevo partizioni piene per più dell'80% e il solo riavvio lo ha risolto.
n0nag0n

2

Ho affrontato lo stesso problema a causa dello spazio su disco insufficiente. E la partizione che ospita il file ibdata1 che è lo spazio tabella di sistema per l'infrastruttura InnoDB era piena.


2

Stavo riscontrando questo problema ... nel mio caso, avrei esaurito lo spazio di archiviazione sul mio server dedicato. Controlla se tutto il resto fallisce e valuta la possibilità di aumentare lo spazio su disco o di rimuovere dati o file indesiderati.


1

Nel mio caso la memoria del server era piena, quindi il DB non poteva scrivere i dati temporanei. Per risolverlo devi solo creare un posto sul tuo disco.


1

Ho risolto questo problema aumentando la quantità di memoria disponibile per la VM vagabonda in cui si trovava il database.


1

Nel mio caso, stavo cercando di eseguire un comando alter table e lo spazio disponibile su disco era inferiore alla dimensione della tabella. Una volta, ho aumentato lo spazio su disco il problema è andato via.


1

Questo disco è pieno in / var / www / mysql


-1

Questo potrebbe anche essere il limite InnoDB per il numero di transazioni aperte:

http://bugs.mysql.com/bug.php?id=26590

a 1024 transazioni, che hanno record di annullamento (come in, modificato qualsiasi dato), InnoDB non funzionerà


la risposta è molto datata.
Evan Carroll
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.