1114 (HY000): โต๊ะเต็ม


114

ฉันกำลังพยายามเพิ่มแถวในInnoDBตารางด้วยแบบสอบถามง่ายๆ:

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

แต่เมื่อฉันลองใช้แบบสอบถามนี้ฉันจะได้รับสิ่งต่อไปนี้:

ข้อผิดพลาด 1114 (HY000): โต๊ะzip_codesเต็ม

กำลังทำ

SELECT COUNT(*) FROM zip_codes

ให้ฉัน 188,959 แถวซึ่งดูเหมือนจะไม่มากเกินไปเพราะฉันมีตารางอื่นที่มี 810,635 แถวในฐานข้อมูลเดียวกันนั้น

ฉันค่อนข้างไม่มีประสบการณ์กับInnoDB engineปัญหานี้และไม่เคยประสบปัญหานี้MyISAMมาก่อน อะไรคือปัญหาที่อาจเกิดขึ้นที่นี่?

แก้ไข: สิ่งนี้จะเกิดขึ้นเมื่อเพิ่มแถวลงในzip_codesตารางเท่านั้น


ข้อผิดพลาดเกิดขึ้นเมื่อคุณพยายามแทรกลงในตารางใด ๆ หรือมีเพียง zip_codes รายการเดียว?
Chad Birch

คำตอบ:


92

แก้ไข:ขั้นแรกตรวจสอบว่าคุณใช้พื้นที่ดิสก์ไม่หมดก่อนที่จะแก้ไขเป็นความละเอียดที่เกี่ยวข้องกับการกำหนดค่า

ดูเหมือนว่าคุณจะมีขนาดสูงสุดที่ต่ำเกินไปสำหรับinnodb_data_file_pathในmy.cnfตัวอย่างนี้

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

คุณไม่สามารถโฮสต์ข้อมูลมากกว่า 512MB ในตาราง innodb ทั้งหมดรวมกัน

บางทีคุณควรเปลี่ยนไปใช้รูปแบบ Innodb ต่อตารางโดยใช้innodb_file_per_table.


C ที่เราได้รับไฟล์ my.cnf นี้ในอูบุนตู

3
@Nadh ใน Ubuntu 16.04 เป็นส่วนหนึ่งของ/etc/mysql/และแยกบางส่วนออกเป็นไฟล์เพิ่มเติมใน/etc/mysql/conf.d
Martin C.

เหมืองทำงานได้หลังจากเพิ่มinnodb_data_file_pathบรรทัด/etc/mysql/mysql.conf.d/mysqld.cnfและเริ่ม บริการmysqlและapache2บริการใหม่
Timmah

81

อีกสาเหตุหนึ่งที่เป็นไปได้คือพาร์ติชันเต็ม - นี่คือสิ่งที่เกิดขึ้นกับฉันตอนนี้


1
สิ่งนี้ควรเป็นสิ่งแรกที่ควรตรวจสอบเสมอ กลับไปที่สายไฟเสมอฉันสะดุดหลายครั้งแล้ว
Steven Church

1
คุณช่วยฉันไม่กี่ชั่วโมงในการพยายามเปลี่ยนการกำหนดค่า mysql พาร์ติชันหลักเต็ม ต้องย้ายฐานข้อมูล mysql ไปยัง data partition แล้วสร้าง soft link
Ganesh Krishnan

2
ใช้df -hตรวจสอบขนาดดิสก์
Amit Bera

25

คุณจะได้รับข้อผิดพลาดเดียวกัน ERROR 1114 (HY000): ตาราง '# sql-310a_8867d7f' เต็ม

หากคุณพยายามเพิ่มดัชนีลงในตารางที่ใช้ MEMORY ของเอ็นจินการจัดเก็บข้อมูล


สิ่งนี้เกิดขึ้นกับฉัน แต่ดูเหมือนว่าลูกค้าของฉันใช้ไวยากรณ์ผิด เมื่อเพิ่มดัชนีเดียวกันด้วยวิธีง่ายๆALTER TABLE my_table ADD INDEX my_index (column_a, column_b);มันได้ผล
thephper

22

คุณต้องแก้ไขขีด จำกัด สูงสุดที่กำหนดใน my.cnf สำหรับตาราง INNO_DB ขีด จำกัด หน่วยความจำนี้ไม่ได้กำหนดไว้สำหรับแต่ละตารางมันถูกกำหนดไว้สำหรับตารางทั้งหมดที่รวมกัน

หากคุณต้องการให้หน่วยความจำขยายอัตโนมัติเป็น 512MB

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

หากคุณไม่ทราบขีด จำกัด หรือไม่ต้องการกำหนดขีด จำกัด คุณสามารถแก้ไขได้ดังนี้

innodb_data_file_path = ibdata1:10M:autoextend

เราโฮสต์ ddbb ของเราใน Amazon และได้รับการกำหนดค่าด้วย autoextend แต่เรามีปัญหาเดียวกันกับที่ฉันคิดว่าเกิดจากการไปถึงขีด จำกัด ที่จัดเก็บที่กำหนดไว้
borjab

12

ข้อผิดพลาดนี้จะปรากฏขึ้นหากพาร์ติชันที่tmpdirอยู่นั้นเต็มไปด้วย (เนื่องจากตารางแก้ไขหรืออื่น ๆ


11

ในกรณีของฉันนี่เป็นเพราะพาร์ติชันที่โฮสต์ไฟล์ ibdata1 เต็ม


10

คุณอาจใช้พื้นที่ไม่เพียงพอในพาร์ติชันที่จัดเก็บตาราง mysql (โดยปกติ / var / lib / mysql) หรือในที่ที่จัดเก็บตารางชั่วคราว (โดยปกติ / tmp)

คุณอาจต้องการ: - ตรวจสอบพื้นที่ว่างของคุณในระหว่างการสร้างดัชนี - ชี้ตัวแปร tmpdir MySQL ไปยังตำแหน่งอื่น ต้องรีสตาร์ทเซิร์ฟเวอร์


8

ฉันประสบข้อผิดพลาดนี้เช่นกันขณะนำเข้าไฟล์ฐานข้อมูล 8GB sql ตรวจสอบไดรฟ์การติดตั้ง mysql ของฉัน ไม่มีที่ว่างเหลือในไดรฟ์ ดังนั้นจึงมีพื้นที่ว่างโดยการลบรายการที่ไม่ต้องการและเรียกใช้คำสั่งนำเข้าฐานข้อมูลของฉันใหม่ ครั้งนี้ประสบความสำเร็จ


7

ถ้าคุณใช้ NDBCLUSTER เป็นเครื่องมือในการเก็บข้อมูลที่คุณควรจะเพิ่มขึ้นและDataMemoryIndexMemory

Mysql FQA


6

ถ้าคุณเปิดใช้งานinnodb_file_per_tableตัวเลือกที่ช่วยให้ข้อมูลทั้งหมดในไฟล์เดียวมักจะเรียกว่าInnoDBibdata1

ตรวจสอบขนาดของไฟล์นั้นและตรวจสอบว่าคุณมีเนื้อที่ดิสก์เพียงพอในไดรฟ์ที่อยู่


5

เรามี: SQLSTATE [HY000]: ข้อผิดพลาดทั่วไป: 1114 ตาราง 'catalog_product_index_price_bundle_sel_tmp' เต็ม

แก้ไขโดย:

แก้ไข config ของ db:

นาโน /etc/my.cnf

tmp_table_size = 256M max_heap_table_size = 256M

  • รีสตาร์ท db

1
การตั้งค่า 512M เหล่านั้นเป็นอันตราย พวกเขาควบคุมขนาดหน่วยความจำสูงสุดสำหรับตาราง temp ในการเลือกที่ซับซ้อน ไม่ใช่แค่ "ต่อการเชื่อมต่อ" แต่ยังรวมถึง "ต่อตาราง tmp" ด้วย ดังนั้นค่าเหล่านี้อาจทำให้ RAM คุณหมดได้อย่างง่ายดาย
Rick James

4

เพื่ออ้างถึงเอกสาร MySQL

กลไกการจัดเก็บ InnoDB จะดูแลตาราง InnoDB ภายในพื้นที่ตารางที่สามารถสร้างขึ้นจากไฟล์หลายไฟล์ ซึ่งทำให้ตารางมีขนาดเกินขนาดสูงสุดของไฟล์แต่ละไฟล์ พื้นที่ตารางสามารถรวมพาร์ติชันดิสก์ดิบซึ่งทำให้มีตารางขนาดใหญ่มาก ขนาดพื้นที่ตารางสูงสุดคือ 64TB

หากคุณกำลังใช้ตาราง InnoDB และไม่มีที่ว่างในพื้นที่ตาราง InnoDB ในกรณีนี้วิธีแก้ปัญหาคือการขยายพื้นที่ตาราง InnoDB ดูหัวข้อ 13.2.5 [“ การเพิ่มการลบหรือการปรับขนาดข้อมูล InnoDB และไฟล์บันทึก”]


4

ในกรณีของฉันเป็นเพียงเพราะเซิร์ฟเวอร์ mysql ทำงานร่วมกับแอปพลิเคชันซึ่งเขียนบันทึกมากเกินไปจนดิสก์เต็ม

คุณสามารถตรวจสอบว่าดิสก์มีพื้นที่เพียงพอหรือไม่

df -h

หากเปอร์เซ็นต์การใช้ดิสก์คือ 100% คุณสามารถใช้คำสั่งนี้เพื่อค้นหาไดเร็กทอรีที่ใหญ่เกินไป

du -h -d 1 /

4

ผู้ใช้ DOCKER: สิ่งนี้จะเกิดขึ้นเมื่อคุณได้ถึง 90% ของขีด จำกัดขนาดอิมเมจ Dockerของคุณ(ดูเหมือนว่า 10% จำเป็นสำหรับการแคชหรือมากกว่านั้น) คำพูดนั้นสับสนเพราะนี่หมายถึงปริมาณเนื้อที่ดิสก์ Docker สามารถใช้สำหรับทุกอย่างโดยทั่วไป

ในการแก้ไขให้ไปที่การตั้งค่าเดสก์ท็อป Docker> ดิสก์> เลื่อนตัวเลื่อนไปทางขวาอีกเล็กน้อย> นำไปใช้

ใส่คำอธิบายภาพที่นี่


2

ใน CentOS 7 เพียงแค่หยุดและเริ่มบริการ MySQL แก้ไขสิ่งนี้ให้ฉัน

sudo service mysql stop

sudo service mysql start


สิ่งนี้ก็ใช้ได้ผลสำหรับฉันเช่นกัน .... ไม่มีพาร์ติชันใด ๆ ที่มากกว่า 80% เต็มและเพิ่งเริ่มต้นใหม่ได้รับการแก้ไข
n0nag0n

2

ฉันประสบปัญหาเดียวกันเนื่องจากเนื้อที่ดิสก์เหลือน้อย และพาร์ติชันที่โฮสต์ไฟล์ ibdata1 ซึ่งเป็นพื้นที่ตารางของระบบสำหรับโครงสร้างพื้นฐาน InnoDB เต็ม


2

ฉันประสบปัญหานี้ ... ในกรณีของฉันฉันไม่มีพื้นที่เก็บข้อมูลบนเซิร์ฟเวอร์เฉพาะของฉัน ตรวจสอบว่าทุกอย่างล้มเหลวหรือไม่และพิจารณาเพิ่มพื้นที่ดิสก์หรือลบข้อมูลหรือไฟล์ที่ไม่ต้องการ


1

ในกรณีของฉันหน่วยความจำเซิร์ฟเวอร์เต็มดังนั้น DB จึงไม่สามารถเขียนข้อมูลชั่วคราวได้ ในการแก้ปัญหาคุณต้องสร้างสถานที่บนไดรฟ์ของคุณ


1

ฉันแก้ไขปัญหานี้โดยการเพิ่มจำนวนหน่วยความจำที่มีให้กับ VM คนจรจัดที่ฐานข้อมูลอยู่


1

ในกรณีของฉันฉันพยายามเรียกใช้คำสั่ง alter table และเนื้อที่ดิสก์ที่มีอยู่นั้นน้อยกว่าขนาดของตาราง ครั้งหนึ่งฉันเพิ่มเนื้อที่ดิสก์ปัญหาก็หายไป



-1

นี่อาจเป็นขีด จำกัด InnoDB สำหรับจำนวนธุรกรรมที่เปิดอยู่:

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

ที่ 1024 ธุรกรรมซึ่งมีการยกเลิกบันทึก (เช่นเดียวกับการแก้ไขข้อมูลใด ๆ ) InnoDB จะล้มเหลวในการทำงาน


คำตอบคือวิธีลงวันที่
Evan Carroll
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.