ใน MySQL คำว่า "ค่าใช้จ่าย" หมายถึงอะไรเลวร้ายเกี่ยวกับมันและวิธีแก้ไขได้อย่างไร


157

คำถามง่าย ๆ แต่มันดุด่าฉันในขณะนี้ ....

"ค่าใช้จ่าย" ใน MySQL คืออะไรและฉันควรจะกังวล?

การคลิกที่ "ตารางเพิ่มประสิทธิภาพ" ไม่แก้ไขจริงหรือไม่

คำตอบ:


147

ดูเหมือนว่าโอเวอร์เฮดเป็นพื้นที่ว่างชั่วคราวที่ฐานข้อมูลที่ใช้ในการเรียกใช้คิวรีบางรายการดังนั้นคุณควรกังวลเฉพาะเมื่อสิ่งนี้สูงมาก

คุณสามารถเปรียบเทียบ 'เพิ่มประสิทธิภาพของตาราง' กับการจัดเรียงข้อมูลของฮาร์ดไดรฟ์ของคุณ

ฉันพูด:

ทุกครั้งที่ฐานข้อมูลต้องการการบำรุงรักษาบางรูปแบบเพื่อให้อยู่ในระดับประสิทธิภาพที่ดีที่สุด การล้างแถวที่ถูกลบการแบ่งการบีบอัดการจัดการพา ธ ดัชนีการดีแฟรกเมนต์ ฯลฯ เป็นสิ่งที่เรียกว่า OPTIMIZATION ใน mysql และคำอื่น ๆ ในฐานข้อมูลอื่น ตัวอย่างเช่น IBM DB2 / 400 เรียกมันว่า REORGANIZE PHYSICAL FILE MEMBER

มันเหมือนกับการเปลี่ยนน้ำมันเครื่องในรถของคุณหรือปรับแต่ง คุณอาจคิดว่าคุณไม่จำเป็นต้องทำ แต่การทำเช่นนั้นเพื่อให้รถของคุณทำงานได้ดีขึ้นคุณจะได้รับไมล์สะสมที่ดีขึ้น ฯลฯ รถที่ได้รับไมล์สะสมจำนวนมากต้องใช้การปรับแต่งบ่อยครั้งขึ้น ฐานข้อมูลที่มีการใช้งานจำนวนมากต้องการสิ่งเดียวกัน หากคุณทำการอัปเดตและ / หรือลบจำนวนมากและโดยเฉพาะอย่างยิ่งหากตารางของคุณมีคอลัมน์ความยาวผันแปร (VARCHAR, TEXT และอื่น ๆ ) คุณต้องติดตามความคืบหน้า


1
@Jasper ตารางถูกล็อคไว้อย่างสมบูรณ์ (อ่าน / เขียนไม่ได้) ในระหว่างการปรับให้เหมาะสมหรือไม่?
Pacerier

4
คำพูดนั้นมาจากไหน ฉันพบผลลัพธ์จำนวนมากใน Google
เอียนฮันเตอร์

เราจะรู้ได้อย่างไรว่าอะไรทำให้เกิดค่าใช้จ่ายซ้ำแล้วซ้ำเล่า
mahen3d

ขอบคุณสำหรับตัวอย่างที่สมบูรณ์แบบและง่ายดายโดยไม่คำนึงถึงข้อกำหนดทางเทคนิคที่เลวร้าย
shyammakwana.me

1
อะไรที่ถือว่า "สูงจริงๆ"
TV-C-15

87

หากคุณกำลังพูดถึงสิ่งที่phpMyAdminเรียกว่าoverheadมันเป็นขนาดที่แท้จริงของตาราง datafile เทียบกับขนาดในอุดมคติของ datafile เดียวกัน (ราวกับเมื่อเพิ่งกู้คืนจากการสำรองข้อมูล)

เพื่อเหตุผลด้านประสิทธิภาพMySQLอย่าบีบอัดดาต้าไฟล์หลังจากลบหรืออัปเดตแถว

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

คุณอาจกำจัดoverheadโดยการเรียกใช้OPTIMIZE TABLEที่จะกระชับตารางและดัชนีของคุณ


7
ขนาดเอกสาร mysql บอกว่า "ตาราง OPTIMIZE ควรใช้ถ้าคุณลบส่วนใหญ่ของตารางหรือถ้าคุณทำการเปลี่ยนแปลงหลายอย่างในตารางที่มีแถวที่มีความยาวผันแปร" นี่เป็นกรณีของฉันขอบคุณ :)
boclodoa

8

โอเวอร์เฮดคือData_freeของตารางนั่นคือจำนวนไบต์ที่จัดสรร แต่ไม่ได้ใช้ เราสามารถค้นหาได้โดยคำสั่ง SQL SHOW ตารางสถานะ เป็นพื้นที่ว่างในขนาดที่จัดสรรสำหรับตารางของคุณ


1

ตารางการปรับให้เหมาะสมอาจมีปัญหามาก ตัวอย่างเช่นหากมีการใช้ตารางอย่างมากในไซต์

http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html

หลังจากลบส่วนใหญ่ของตาราง MyISAM หรือ ARCHIVE หรือทำการเปลี่ยนแปลงหลายอย่างในตาราง MyISAM หรือ ARCHIVE ด้วยแถวความยาวผันแปร (ตารางที่มีคอลัมน์ VARCHAR, VARBINARY, BLOB หรือ TEXT) แถวที่ถูกลบจะถูกเก็บไว้ในรายการที่เชื่อมโยงและการดำเนินการ INSERT ที่ตามมาจะนำตำแหน่งแถวเก่ามาใช้ซ้ำ

ฉันเชื่อว่าฉันยืนยันพฤติกรรมนี้แล้ว และมันจะมีประโยชน์มากอย่างแน่นอน

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