ปรับแต่งและทำความเข้าใจ table_cache ใน mySQL


18

ฉันใช้สคริปต์ปรับแต่งประสิทธิภาพ MySQL ที่ยอดเยี่ยมและเริ่มทำงานตามคำแนะนำ หนึ่งฉันวิ่งเข้าไปคือ

ตาราง CACHE
ค่า table_cache ปัจจุบัน = 4096 ตารางคุณมีทั้งหมด 1,073 ตาราง คุณมี 3900 ตารางที่เปิดอยู่ อัตราการเข้าชม table_cache ปัจจุบันคือ 2% ในขณะที่ 95% ของแคชตารางของคุณถูกใช้งาน คุณควรเพิ่ม table_cache ของคุณ

ฉันเริ่มอ่านบน table_cache แต่พบว่าเอกสารของ MySQLค่อนข้างขาด พวกเขาบอกว่าจะเพิ่มtable_cache"ถ้าคุณมีหน่วยความจำ" น่าเสียดายที่table_cacheตัวแปรถูกกำหนดเป็น "จำนวนตารางที่เปิดสำหรับเธรดทั้งหมด"

หน่วยความจำที่ใช้โดย MySQL จะเปลี่ยนไปอย่างไรถ้าฉันเพิ่มตัวแปรนี้? ค่าที่ดีคืออะไรในการตั้งค่าเป็น?

คำตอบ:


16

จากเอกสาร MySQL

ตัวอย่างเช่นสำหรับ 200 การเชื่อมต่อที่รันพร้อมกันคุณควรมีขนาดแคชของตารางอย่างน้อย 200 × N โดยที่ N คือจำนวนสูงสุดของตารางต่อการเข้าร่วมในแบบสอบถามใด ๆ ที่คุณดำเนินการ คุณต้องจองไฟล์อธิบายเพิ่มเติมบางไฟล์ไว้สำหรับตารางและไฟล์ชั่วคราว

ดังนั้นหากในแอปพลิเคชันของคุณคุณมีคิวรีที่รวม 4 ตารางและคุณต้องการจัดการ 200 การเชื่อมต่อพร้อมกันตามคำสั่งนั้นคุณควรมี table_cache อย่างน้อย 800

เท่าที่มีการใช้หน่วยความจำฉันไม่มีตัวเลขเหล่านั้นฉันสงสัยว่ามันจะขึ้นอยู่กับขนาดของตารางที่แคช


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

คุณแน่ใจหรือไม่ว่าหน่วยความจำนั้นใช้หมดจริง ๆ หรือหน่วยความจำถูกใช้โดยบัฟเฟอร์ / แคช? เรียกใช้ "free -m" และดูบรรทัดที่สอง (- / + บัฟเฟอร์ / แคช) นี่เป็นการแสดงการใช้หน่วยความจำที่แม่นยำยิ่งขึ้นในหน่วย mb ดูการตอบสนองใน serverfault.com/questions/73189/… และ serverfault.com/questions/9442/…
ManiacZX

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

สำหรับผู้ที่มาถึงตอนนี้คำตอบนี้ไม่ถูกต้องสำหรับ mysql 5.1+ ตอนนี้อ้างถึงtable_open_cacheเมื่อคุณดูเอกสาร ดูคำตอบ @MarkRs เมื่อดูที่table_cache
Jason

3

คุณควรตรวจสอบตัวแปร Opened_Tables และดูว่ามันเพิ่มขึ้นเร็วแค่ไหน หากมันเร็วกว่าที่คุณสร้างตารางใหม่ (รวมถึงตารางชั่วคราว) แสดงว่าแคชของตารางของคุณอาจเล็กเกินไป

Table_Cache ควรเสมอ - ส่วนใหญ่แล้ว - ใหญ่กว่าจำนวนตารางในเซิร์ฟเวอร์อย่างมีนัยสำคัญ มิฉะนั้นจะยังคงเปิดและปิดตาราง

ฉันไม่เห็นว่าคุณจะได้รับอัตราการเข้าชมแคช 2% ได้อย่างไรเว้นแต่คุณจะวัดเวลาเพียงหลังจากที่เซิร์ฟเวอร์รีสตาร์ทหรือใช้ตารางล้างจำนวนมาก (สัมพันธ์กับจำนวนข้อความค้นหา) โดยปกติอัตราการเข้าชมแคชตารางควรเป็น 99.9% มิฉะนั้นประสิทธิภาพจะแย่ลง

อย่าล้างตารางหากคุณสามารถหลีกเลี่ยงได้มันจะทำให้แคชหายไป

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

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