อย่างเคร่งครัดจากมุมมองของ MySQL ฉันมีคำแนะนำเกี่ยวกับวิธีการปรับปรุงการแคชข้อมูล / ดัชนีสำหรับอินสแตนซ์ MySQL
โปรดทราบว่ามีเครื่องมือจัดเก็บข้อมูลหลักสองตัวสำหรับ MySQL
กลไกการแคชแตกต่างกัน มีบางอย่างที่คุณสามารถทำได้เพื่อปรับแต่งสำหรับเครื่องมือจัดเก็บข้อมูลที่คุณเลือก
MyISAM
MyISAM แคชหน้าดัชนีเท่านั้น มันไม่เคยแคชข้อมูล คุณสามารถทำสองสิ่งเพื่อปรับปรุง I / O สำหรับตาราง MyISAM
MyISAM Improvement # 1
ตาราง MyISAM ใด ๆ ที่มีคอลัมน์ VARCHAR สามารถแปลงภายในเป็น CHAR โดยไม่ต้องสัมผัสการออกแบบเริ่มต้น สมมติว่าคุณมีตารางชื่อ mydb.mytable และคุณต้องการปรับปรุง I / O ให้ทำตามขั้นตอนต่อไปนี้:
ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;
สิ่งนี้จะเพิ่มขนาดของตาราง 60% -100% แต่จะให้ประสิทธิภาพการทำงานเพิ่มขึ้น I / O 20-30% โดยไม่มีการเปลี่ยนแปลงอะไรเลย ฉันเขียนเกี่ยวกับเรื่องนี้มาก่อนใน DBA StackExchange:
การปรับปรุง MyISAM # 2
คุณต้องเพิ่ม MyISAM Key Cache (ตามขนาดโดยkey_buffer_size ) เรียกใช้แบบสอบถามนี้โปรด:
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql','performance_schema')) AA ) A,
(SELECT 2 PowerOf1024) B;
สิ่งนี้จะแสดง key_buffer_size ในอุดมคติของคุณตามชุดข้อมูลปัจจุบันของคุณ
InnoDB
InnoDB เก็บทั้งข้อมูลและดัชนี หากคุณแปลงข้อมูลทั้งหมดเป็น InnoDB และกำลังใช้งาน WordPress จากฐานข้อมูล InnoDB ทั้งหมดคุณต้องปรับขนาด InnoDB Buffer Pool ของคุณ (ขนาดด้วยinnodb_buffer_pool_size ) เรียกใช้แบบสอบถามนี้โปรด:
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;
สิ่งนี้จะแสดง key_buffer_size ในอุดมคติของคุณตามชุดข้อมูลปัจจุบันของคุณ
ประมาณการ
หากคุณคาดการณ์ว่าชุดข้อมูลของคุณจะเพิ่มขึ้น 20 เท่าให้เพิ่มขึ้นหลายเท่าที่แบบสอบถามนี้แนะนำโดย 20 สมมติว่าชุดข้อมูล MyISAM ของคุณคือ 15MB และ 3MB คือผลรวมของดัชนีของคุณ หากคุณประเมินว่าคุณจะมีข้อมูลมากถึง 20 เท่าให้ตั้ง key_buffer_size เป็น 60MB เช่นนี้ใน /etc/my.cnf:
[mysqld]
key_buffer_size=60M
จากนั้นรีสตาร์ท MySQL สิ่งเดียวกันนี้จะนำไปใช้กับ InnoDB Buffer Pool
หากข้อมูลทั้งหมดของคุณเป็น InnoDB คุณจะต้องดำเนินการล้างข้อมูลเต็มรูปแบบของโครงสร้างพื้นฐาน InnoDB คุณที่ผมโพสต์ใน StackOverflow