ฉันกำลังให้คำตอบนี้เป็นข้อมูลเสริมให้กับคำตอบของ Rolando ด้านล่าง
ก่อนที่เซิร์ฟเวอร์จะอยู่ในการผลิต
คำนวณ innodb_buffer_pool_size ตามตารางที่ใหญ่ที่สุดที่ MySQL ใช้บ่อยที่สุด ในการระบุตารางที่ใหญ่ที่สุดตามขนาดในฐานข้อมูลคุณสามารถใช้สคริปต์นี้:
select table_schema, table_name, round(data_length/1024/1024,2) as size_mb
from information_schema.tables where table_schema like 'my_database'
order by size_mb desc;
+--------------+-------------------------+---------+
| table_schema | table_name | size_mb |
+--------------+-------------------------+---------+
| heavybidder | user | 522.55|
| heavybidder | bid | 121.52|
| heavybidder | item_for_sale | 10.52|
| heavybidder | account_user | 5.02 |
| heavybidder | txn_log | 4.02 |
| heavybidder | category | 0.02 |
+--------------+-------------------------+---------+
ตอนนี้เรารู้แล้วว่าตารางใดมีขนาดใหญ่ที่สุดในฐานข้อมูลของเราเราต้องพิจารณาว่าตารางใดมีการใช้งานบ่อยที่สุด ในการทำเช่นนั้นฉันจะใช้โปรแกรมทำโปรไฟล์เช่น Jet Profiler (JP) เพื่อดูว่าตารางใดที่เข้าถึงได้มากที่สุด JP จะแสดงให้คุณเห็นว่ามีการเข้าถึงตารางใดบ่อยที่สุด นี่คือภาพหน้าจอจากส่วนนั้นใน JP
ด้วยเหตุนี้ในใจตอนนี้ฉันรู้แล้วว่าผู้ใช้และโต๊ะประมูลใช้พื้นที่ดิสก์ประมาณ 640MB พวกเขาใช้งานบ่อยมากตาม JP และนั่นหมายความว่า MySQL จะเก็บดัชนีและข้อมูลของพวกเขาในบัฟเฟอร์พูลเป็น Rolando กล่าวถึงด้านล่างในความคิดเห็นของเขา
เพื่อให้แน่ใจว่า MySQL มีหน่วยความจำเพียงพอที่จะจัดเก็บข้อมูลสำหรับตารางที่ใหญ่ที่สุดและใช้บ่อยที่สุดของฉันฉันจะกำหนด innodb_buffer_pool_size ที่ 640MB
มีข้อควรพิจารณาเพิ่มเติมบางประการ แต่ไม่มีผลกับ innodb_buffer_pool_size
นี่เป็นระบบ 32 บิตหรือ 64 บิตใช่ไหม ในระบบ 32Bit คุณถูก จำกัด ไว้ที่ 4GB ยกเว้นว่าคุณเปิดใช้งาน PAE ใน Windows หมายถึงการเรียกใช้ Windows Enterprise หรือรุ่น Datacenter
กระบวนการอื่นที่ใช้หน่วยความจำของคุณต้องใช้หน่วยความจำเท่าใด บนเซิร์ฟเวอร์ MySQL โดยเฉพาะฉันจะเหลืออยู่ระหว่าง 5% และ 10% สำหรับระบบปฏิบัติการ ใน Windows คุณสามารถใช้ Process Explorer เพื่อวิเคราะห์การใช้หน่วยความจำ ใน Linux คุณมี sysstat, ฟรี, htop, top และ vmstat
ฐานข้อมูลประกอบด้วยตาราง Innodb หรือส่วนผสมของ Innodb และ MyISAM เท่านั้นหรือไม่ ถ้าเป็นส่วนผสมของทั้งสองฉันจะตั้งค่าหน่วยความจำสำหรับ key_cache, เข้าร่วมตัวแปร, แคชแบบสอบถาม ฯลฯ คุณสามารถคำนวณอัตราส่วนการเข้าชม MyISAM ของคุณได้ในภายหลังเมื่อเซิร์ฟเวอร์ทำงาน
หลังจากเซิร์ฟเวอร์อยู่ระหว่างการผลิต
อัตราส่วนการเข้าชมปัจจุบันของ Innodb คือเท่าใด
1 - (innodb_buffer_pool_reads / innodb_buffer_pool_read_requests)
อัตราการแคชของคีย์แคชคืออะไร
1 - (Key_reads / Key_read_requests)
ฉันมักจะพยายามที่จะได้รับอัตราส่วนใกล้เคียงกับ 100% ที่เป็นไปได้
ตารางของคุณเหมาะสมในบัฟเฟอร์พูลอย่างไร
คุณสามารถดูได้ว่าข้อมูลตารางของคุณเหมาะสมใน buffer_pool ของคุณมากเพียงใดโดยอ้างอิงไปยังลิงก์นี้ซึ่งให้วิธีการแสดง "จำนวนหน้าอยู่ในบัฟเฟอร์พูลสำหรับตารางที่กำหนด (cnt) จำนวนสกปรก (สกปรก) และเปอร์เซ็นต์ของดัชนีที่พอดีในหน่วยความจำ (fit_pct) คืออะไร " ใช้กับเซิร์ฟเวอร์ Percona เท่านั้น
http://www.mysqlperformanceblog.com/2010/12/09/how-well-does-your-table-fits-in-innodb-buffer-pool/