1114 (HY000): Stół jest pełny


114

Próbuję dodać wiersz do InnoDBtabeli za pomocą prostego zapytania:

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

Ale kiedy próbuję wykonać to zapytanie, otrzymuję następujące informacje:

ERROR 1114 (HY000): Stół zip_codesjest pełny

Robiąc

SELECT COUNT(*) FROM zip_codes

daje mi 188 959 wierszy, co nie wydaje się zbyt wiele, biorąc pod uwagę, że mam inną tabelę z 810 635 wierszami w tej samej bazie danych.

Jestem dość niedoświadczony InnoDB enginei nigdy nie doświadczyłem tego problemu MyISAM. Jakie są tutaj potencjalne problemy?

EDYCJA: występuje tylko podczas dodawania wiersza do zip_codestabeli.


Czy błąd występuje podczas próby wstawienia do dowolnej tabeli, czy tylko do jednej z kodami_zip?
Chad Birch

Odpowiedzi:


92

EDYCJA: Najpierw sprawdź, czy nie zabrakło miejsca na dysku, przed rozwiązaniem problemu związanego z konfiguracją.

Wydaje się, że masz zbyt niski maksymalny rozmiar dla twojego innodb_data_file_pathw my.cnftym przykładzie

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

nie można przechowywać więcej niż 512 MB danych we wszystkich tabelach innodb łącznie.

Może powinieneś przełączyć się na schemat innodb-per-table za pomocą innodb_file_per_table.


C, skąd otrzymujemy ten plik my.cnf w

3
@Nadh W Ubuntu 16.04 jest częścią /etc/mysql/i jest częściowo podzielony na dodatkowe pliki w/etc/mysql/conf.d
Martin C.

Mój działał po dodaniu innodb_data_file_pathlinii /etc/mysql/mysql.conf.d/mysqld.cnfi ponownym uruchomieniu usług mysqliapache2
Timmah

81

Innym możliwym powodem jest to, że partycja jest pełna - tak właśnie stało się teraz.


1
To zawsze powinno być pierwszą rzeczą do sprawdzenia. Zawsze wracaj do przewodu zasilającego, natknąłem się na to wiele razy.
Steven Church

1
Zaoszczędziłeś mi kilka godzin próbując zmienić konfigurację mysql. Partycja podstawowa była pełna. Musiał przenieść bazę danych mysql na partycję danych, a następnie utworzyć miękki link
Ganesh Krishnan

2
użyj df -hdo sprawdzenia rozmiaru dysku
Amit Bera

25

Otrzymasz również ten sam błąd ERROR 1114 (HY000): Tabela '# sql-310a_8867d7f' jest pełna

jeśli spróbujesz dodać indeks do tabeli, która korzysta z mechanizmu pamięci masowej MEMORY.


Zdarzyło mi się to, ale wydawało się, że mój klient używa złej składni. Podczas dodawania tego samego indeksu z prostym ALTER TABLE my_table ADD INDEX my_index (column_a, column_b);działało.
thephper

22

Musisz zmodyfikować limit limitu ustawiony w my.cnf dla tabel INNO_DB. Ten limit pamięci nie jest ustawiony dla pojedynczych tabel, jest ustawiony dla wszystkich tabel łącznie.

Jeśli chcesz, aby pamięć automatycznie rozszerzała się do 512 MB

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

Jeśli nie znasz limitu lub nie chcesz nakładać limitu, możesz go zmodyfikować w ten sposób

innodb_data_file_path = ibdata1:10M:autoextend

Hostowaliśmy nasze ddbb na Amazon i zostało skonfigurowane z funkcją autoextend. Ale mieliśmy ten sam problem, który, jak zakładam, był spowodowany osiągnięciem skonfigurowanego zapisanego limitu
borjab

12

Ten błąd pojawia się również, gdy partycja, na której się tmpdirznajduje, zapełnia się (z powodu zmiany tabeli lub innej


11

W moim przypadku było tak, ponieważ partycja, na której znajduje się plik ibdata1, była pełna.


10

Może zabraknąć miejsca na partycji, na której przechowywane są tabele mysql (zwykle / var / lib / mysql) lub w miejscu, w którym przechowywane są tabele tymczasowe (zwykle / tmp).

Możesz chcieć: - monitorować wolne miejsce podczas tworzenia indeksu. - skieruj zmienną tmpdir MySQL w inne miejsce. Wymaga to ponownego uruchomienia serwera.


8

Ja też napotkałem ten błąd podczas importowania pliku bazy danych sql o pojemności 8 GB. Sprawdziłem mój dysk instalacyjny mysql. Na dysku nie było wolnego miejsca. Zrobiłem więc trochę miejsca, usuwając niechciane elementy i ponownie uruchomiłem polecenie importu bazy danych. Tym razem się udało.


7

Jeśli używasz NDBCLUSTER jako mechanizmu przechowywania, powinieneś zwiększyć DataMemoryi IndexMemory.

Mysql FQA


6

O ile nie włączysz innodb_file_per_tableopcji, InnoDBwszystkie dane są przechowywane w jednym pliku, zwykle o nazwie ibdata1.

Sprawdź rozmiar tego pliku i sprawdź, czy masz wystarczającą ilość miejsca na dysku, na którym się znajduje.


5

mieliśmy: SQLSTATE [HY000]: Błąd ogólny: 1114 Tabela „catalog_product_index_price_bundle_sel_tmp” jest pełna

rozwiązany przez:

edytuj konfigurację db:

nano /etc/my.cnf

tmp_table_size = 256 mln max_heap_table_size = 256 mln

  • zrestartuj db

1
Te ustawienia 512 MB są niebezpieczne. Kontrolują maksymalny rozmiar pamięci dla tabel tymczasowych w złożonych selekcjach. Dotyczy to nie tylko „na połączenie”, ale także „na tabelę tmp”. Tak więc te wartości mogą łatwo spowodować wyczerpanie pamięci RAM.
Rick James

4

Cytując dokumenty MySQL.

Mechanizm przechowywania danych InnoDB obsługuje tabele InnoDB w obszarze tabel, które można utworzyć z kilku plików. Dzięki temu tabela może przekroczyć maksymalny rozmiar pojedynczego pliku. Przestrzeń tabel może zawierać surowe partycje dysku, co pozwala na tworzenie bardzo dużych tabel. Maksymalny rozmiar obszaru tabel to 64 TB.

Jeśli używasz tabel InnoDB i zabraknie miejsca w obszarze tabel InnoDB. W takim przypadku rozwiązaniem jest rozszerzenie obszaru tabel InnoDB. Zobacz Sekcja 13.2.5, [„Dodawanie, usuwanie lub zmiana rozmiaru plików danych i dziennika InnoDB”].]


4

w moim przypadku tylko dlatego, że serwer mysql działa razem z aplikacją, która zapisuje zbyt wiele logów, że dysk jest pełny.

możesz sprawdzić, czy na dysku jest wystarczająco dużo miejsca

df -h

jeśli procent użycia dysku wynosi 100%, możesz użyć tego polecenia, aby sprawdzić, który katalog jest za duży

du -h -d 1 /

4

UŻYTKOWNICY DOCKERA: Dzieje się tak również, gdy przekroczysz około 90% limitu rozmiaru obrazu Dockera (wydaje się, że 10% jest potrzebne do buforowania). Sformułowanie jest mylące, ponieważ oznacza to po prostu ilość miejsca na dysku, którą Docker może wykorzystać w zasadzie na wszystko.

Aby to naprawić, przejdź do ustawień pulpitu Docker> Dysk> przesuń suwak nieco bardziej w prawo> Zastosuj.

wprowadź opis obrazu tutaj


2

W CentOS 7 po prostu zatrzymanie i uruchomienie usługi MySQL naprawiło to za mnie.

sudo service mysql stop

sudo service mysql start


O dziwo, to też zadziałało ... Nie miałem żadnych partycji, które byłyby zapełnione w ponad 80% i samo ponowne uruchomienie naprawiło to.
n0nag0n

2

Napotkałem ten sam problem z powodu małej ilości miejsca na dysku. Partycja, na której znajduje się plik ibdata1, będący systemowym obszarem tabel dla infrastruktury InnoDB, była pełna.


2

Miałem ten problem ... w moim przypadku skończyło mi się miejsce na serwerze dedykowanym. Sprawdź, czy wszystko inne zawiedzie i rozważ zwiększenie miejsca na dysku lub usunięcie niechcianych danych lub plików.


1

W moim przypadku pamięć serwera była pełna, więc DB nie mógł zapisać danych tymczasowych. Aby go rozwiązać, wystarczy zrobić miejsce na dysku.


1

Rozwiązałem ten problem, zwiększając ilość pamięci dostępnej dla maszyny wirtualnej włóczęgi, na której znajdowała się baza danych.


1

W moim przypadku próbowałem uruchomić polecenie alter table i dostępne miejsce na dysku było mniejsze niż rozmiar tabeli. Kiedyś zwiększyłem miejsce na dysku, problem zniknął.



-1

Może to być również limit InnoDB dotyczący liczby otwartych transakcji:

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

przy 1024 transakcjach, które mają cofnięte rekordy (jak w przypadku edytowania jakichkolwiek danych), InnoDB nie będzie działać


odpowiedź jest przestarzała.
Evan Carroll,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.