ฉันจะเพิ่มประสิทธิภาพการใช้หน่วยความจำของ MySQL ได้อย่างไร


9

การตั้งค่าของฉัน (ตัวอย่าง)

ฉันใช้ Linux บนอินสแตนซ์ Amazon High CPU Extra Large EC2 พร้อมรายละเอียดต่อไปนี้:

  • หน่วยความจำ 7 GB
  • หน่วยคำนวณ EC2 20 หน่วย (แกนประมวลผลเสมือน 8 แกนพร้อมหน่วยคำนวณ EC2 2.5 หน่วย)
  • ที่เก็บอินสแตนซ์โลคัล 1690 GB
  • แพลตฟอร์ม 64 บิต

ฉันมีฐานข้อมูล MySQL ขนาดใหญ่สองตัวที่ทำงานบนเอ็นจิ้นการจัดเก็บ MyISAM หนึ่งคือ 2GB และอื่น ๆ คือ 500MB ฉันต้องการให้แน่ใจว่า MySQL ใช้ RAM มากเท่าที่จะสามารถ / ต้องการเพื่อเพิ่มความเร็วในการสืบค้น ฉันรู้ว่ามีพวงของ MySQL ตัวเลือกการตั้งค่าหน่วยความจำเหมือนkey_buffer_sizeและMyISAM_sort_buffer_size,แต่ฉันไม่คุ้นเคยกับการเพิ่มประสิทธิภาพเหล่านี้

คำถาม

  1. หนึ่งจะตรวจสอบว่าหน่วยความจำ MySQL ปัจจุบันใช้ในระบบ Linux ได้อย่างไร
  2. วิธีเพิ่มการใช้หน่วยความจำ MySQL ให้ได้ประโยชน์สูงสุด?
  3. สมมติว่าคิวรีและสคีมาของฉันได้รับการปรับให้เหมาะสมที่สุดฉันควรพิจารณาการเปลี่ยนแปลงอื่นใดอีกบ้าง

คุณสามารถตรวจสอบด้วยโปรแกรม htop
newWorld

การใช้หน่วยความจำให้สูงสุดจะไม่ทำให้ฐานข้อมูลทั้งหมดเป็นหน่วยความจำ คุณต้องมีระบบไฟล์ที่ใช้ RAM ...

4
ระบบไฟล์ที่ใช้ RAM ไม่ปลอดภัย หากเซิร์ฟเวอร์ขัดข้องข้อมูลทั้งหมดจะสูญหาย
newWorld

คำตอบ:


7

นี่เป็นหัวข้อที่ยาก ไม่สามารถตอบได้ที่นี่มีการเขียนหนังสือทั้งหมดเกี่ยวกับเรื่องนี้ ฉันแนะนำให้คุณสร้าง innodb_buffer_pool_size ให้ใหญ่พอ หากคุณกำลังใช้ตาราง myisam ให้ตรวจสอบ key_buffer_size ควรพิจารณา table_cache และ max_connections ด้วย

นี่คือสิ่งที่สามารถช่วยคุณได้:

http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/ http://www.mysqlperformanceblog.com/2007/11/01/innodb- ประสิทธิภาพการเพิ่มประสิทธิภาพพื้นฐาน / http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

แก้ไข:

ตามที่ @ drew010 กล่าวว่าเป็นสิ่งสำคัญในการพิจารณาประเภทการใช้งานฐานข้อมูล การปรับสำหรับฐานข้อมูลการอ่านจำนวนมากนั้นแตกต่างจากการเขียนอย่างมาก นอกจากนี้คุณอาจพิจารณากลยุทธ์อื่น ๆ เช่น Memcached, ฐานข้อมูล nosql เป็นต้น


2
ตกลงพวกเขาเป็นฐานข้อมูลขนาดเล็กสวยเกินไปพูดค่อนข้าง หากคุณคาดว่าจะมีการอ่านฐานข้อมูลเป็นจำนวนมากคุณอาจพิจารณาระบบแคชบางประเภทเช่น memcached ที่แอปพลิเคชันของคุณสามารถใช้เพื่อเก็บค่าจากฐานข้อมูลเพื่อลดจำนวนการเข้าดูฐานข้อมูล หากคุณกำลังแทรกส่วนใหญ่ดิสก์จะเป็นปัจจัยที่สำคัญมาก ในระดับหนึ่งคำถามขึ้นอยู่กับกรณีการใช้งานของคุณ หากข้อมูลไม่เปลี่ยนแปลงเท่าไหร่แคชแบบสอบถาม mysql ควรช่วยเหลือคุณได้มากด้วยการสืบค้นที่เร็วขึ้น ตรวจสอบให้แน่ใจว่าดัชนี / คีย์หลักของคุณดี
drew010

+1 คุณเป็นพี่ชายที่ถูกต้อง ฉันคิดว่าเขากำลังขอปรับพื้นฐาน แต่มีความสำคัญที่จะต้องพิจารณาการใช้ DB และสิ่งอื่น ๆ ฉันไม่สามารถพูดคุยที่นี่ได้อีกครั้ง
santiago.basulto

1

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

ในกรณีของ MyISAM จะมีการใช้แคชจำนวนมากรวมถึงบัฟเฟอร์คีย์ MySQL ภายในและแคชของระบบ หากคุณต้องการประสิทธิภาพที่ดีที่สุดคุณต้องออกจากห้องสำหรับแคชอย่างใดอย่างหนึ่ง แต่ก็ยังไม่แนะนำ MyISAM สำหรับจุดประสงค์นั้นโดยเฉพาะอย่างยิ่งถ้าฐานข้อมูลของคุณเขียนหนัก: MyISAM ล็อคทั้งตารางในการเขียนในขณะที่ InnoDB ล็อคแถวที่ได้รับผลกระทบเท่านั้น

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

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