ไฟล์ ibdata มีขนาดใหญ่เกินไปเท่าใด


9

ไฟล์ ibdata ของฉันมีขนาดใหญ่มากอย่างน้อยก็ดูเหมือนว่าฉันจะมีขนาดใหญ่มาก นี่มันมากเกินไปหรือไม่แย่ขนาดนั้นเหรอ?

-rw-rw---- 1 mysql mysql  15G Apr 18 10:11 ibdata1

4
ไฟล์ ibdata ของคุณเล็กมาก
Jeff Ferland

การแยกไฟล์นั้นออกเป็นชิ้นเล็ก ๆ (เช่น 4G) จะดีขึ้นหรือแย่ลงสำหรับประสิทธิภาพหรือไม่
nachito

คำตอบ:


13

เมื่อสิ่งนี้เป็นปัญหา

หากคุณเรียกใช้show table statusบนโต๊ะและData_freeเขตข้อมูลประกอบขนาดibdata1ไฟล์ส่วนใหญ่ของคุณคุณอาจมีพื้นที่ว่างเปล่าจำนวนมาก การแทรก / ลบอย่างมากจะทำให้เกิดปัญหา หากเป็นกรณีและการแทรกและการลบชั่วคราวทำขึ้นเป็นกลุ่มของข้อมูลของคุณแล้วคุณมีกรณีที่ดีสำหรับไฟล์ต่อตาราง

นั่นไม่ใช่แบบอัตโนมัติ "ใช่" มีการพูดคุยกันมากมายในโลกเกี่ยวกับการแตกแฟรกเมนต์ภายในของไฟล์ InnoDB แต่การใส่ลงในระบบไฟล์เป็นไฟล์ต่อตารางเพียงแค่ย้ายการกระจายตัวของคุณไปยังระดับระบบไฟล์แทนระดับฐานข้อมูล

ทำไมสิ่งนี้ถึงไม่มีปัญหา

คิดว่าไฟล์ InnoDB ของคุณเป็นระบบไฟล์แทนที่จะเป็นไฟล์ หากคุณมีไฟล์จำนวนมากคุณจะต้องใช้ระบบไฟล์ขนาดใหญ่

ส่วนใหญ่ระบบไฟล์ทำได้ดีมากในการปรับขนาดเพื่อจัดการเทระไบต์ของข้อมูลและจำนวนไฟล์ที่ไม่สามารถบอกได้ บางครั้งพวกเขาพบปัญหาเกี่ยวกับการจัดทำดัชนีไม่ดี (เช่น จำกัด จำนวนไฟล์ในไดเรกทอรีก่อนที่จะส่งผลกระทบต่อประสิทธิภาพการทำงาน) แต่ส่วนใหญ่แล้วระบบไฟล์ที่ทันสมัยสามารถโยกย้ายได้ดีในช่วงเทราไบต์

InnoDB ทำหน้าที่ในลักษณะเดียวกัน ขนาดไฟล์ข้อมูลของคุณมีขนาดใหญ่ ... และเช่นเดียวกับระบบไฟล์ขนาดใหญ่ที่สามารถนำเสนอปัญหาเกี่ยวกับการสำรองข้อมูลของคุณ อย่างไรก็ตามเช่นเดียวกับการแบ่งระบบไฟล์ของคุณออกเป็นหลาย ๆ พาร์ติชั่นก็ไม่ได้ช่วยแก้ปัญหานี้ไม่ได้พยายามที่จะจัดการกับ innodb ในขณะที่คุณสามารถใช้innodb_file_per_tableฉันไม่ค่อยแนะนำ

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

ตั้งแต่ฉันดิ้นรนเพื่อสร้างสรรค์ถ่ายทอดแนวคิดที่นี่อ่านอย่างรวดเร็วว่าคำพูดนี้ดีกว่าที่ฉันสามารถ: เทราไบต์ไม่ได้เป็นข้อมูลขนาดใหญ่เป็นเพตาไบต์

ฉันจำสไลด์การตลาด MySQL ที่เก่าแก่จริง ๆ ซึ่งลูกค้าใช้คลังข้อมูลด้วยเทราไบต์ หลายปีที่ผ่านมา. InnoDB หรือ MyISAM ทั้งสองจะทำงานได้ นี่เป็นมาตรฐานของเนื้อหา MySQL บนชั้นวาง

อย่าเหงื่อฐานข้อมูล 15GB


ดูเหมือนว่าฉันใช้ต่ำกว่า 50% InnoDB free: 7364608 kB
nachito

@nachito ฟังดูเหมือนว่ามันควรจะดี หากคุณรู้สึกว่าคุณต้องการพื้นที่สำหรับระบบไฟล์ให้เรียกคืนมัน หากคุณเป็นกังวลเกี่ยวกับประสิทธิภาพไม่ นอกจากนี้เพื่อประสิทธิภาพคุณควรเก็บไฟล์ฐานข้อมูลไว้ในพาร์ติชันของตัวเองดังนั้นหากคุณมุ่งเน้นไปที่ประสิทธิภาพคุณจะไม่เห็นการเรียกคืนที่ใช้งานได้อยู่ดี
Jeff Ferland

6

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

  • สำรองข้อมูลทั้งหมดของคุณเช่น mysqldump
  • เพิ่มใน my.cnf innodb_file_per_table คำสั่ง
  • รีสตาร์ท mysql
  • ปล่อยฐานข้อมูลทั้งหมดโดยใช้เครื่องมือ innodb
  • หยุด mysql
  • ลบไฟล์ ibdata
  • rm ib_logfile [01]
  • เริ่ม mysql, ตรวจสอบ syslog ถ้าทุกอย่างเรียบร้อย
  • โหลดการถ่ายโอนข้อมูลของคุณอีกครั้ง

ด้วยวิธีนี้คุณจะสามารถเรียกคืนพื้นที่เมื่อใดก็ตามที่คุณวางตาราง / ฐานข้อมูล innodb - ไฟล์ idb ที่เกี่ยวข้องจะถูกลบทันที


ฉันเข้าใจว่ามันจะไม่ลดขนาดลงโดยไม่มีการทุ่มตลาดและโหลดซ้ำตาราง อย่างไรก็ตามหากฉันลบฐานข้อมูล InnoDB จะใช้พื้นที่ "ว่าง" นั้นก่อนที่จะเริ่มขยายอีกครั้งหรือไม่
nachito

1
@nachito ใช่มันจะ
Jeff Ferland


คำตอบของคุณเป็นเพียงข้อเสนอแนะที่ตรงไปตรงมาโดยไม่ทำให้ขุ่นมัวปัญหาเหมือนคำตอบของฉันดูเหมือนจะทำ +1 !!!
RolandoMySQLDBA

1
คำตอบคือวิธีการลดพื้นที่ที่ใช้ในไฟล์ข้อมูล แต่มันไม่ใช่การอภิปรายของบุญที่เกี่ยวข้องกับสิ่งนั้นและนั่นเป็นคำถามที่ฉันอ่าน ไฟล์ 15GB ของ ibdata เป็นเรื่องใหญ่หรือไม่
Jeff Ferland
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.