มีเพียงตัวแปรสถานะหนึ่งที่ให้ความสำคัญเกี่ยวกับsort_buffer_size นั่นคือสิ่งที่คุณมีในด้านหลังข้อความในคำถาม: Sort_merge_passes เอกสาร MySQL กล่าวว่า:
Sort_merge_passes: จำนวนการผสานที่อัลกอริทึมการเรียงต้องทำ หากค่านี้มีขนาดใหญ่คุณควรพิจารณาเพิ่มค่าของตัวแปรระบบsort_buffer_size
โปรดจำไว้สิ่งหนึ่งเกี่ยวกับsort_buffer_size
หากคุณเห็น Sort_merge_passes ต่อวินาทีจำนวนมากในเอาต์พุต SHOW GLOBAL STATUS คุณสามารถพิจารณาเพิ่มค่า sort_buffer_size เพื่อเพิ่มความเร็วในการดำเนินการ ORDER BY หรือ GROUP BY ที่ไม่สามารถปรับปรุงได้ด้วยการปรับให้เหมาะสมของแบบสอบถามหรือปรับปรุงดัชนี
ในขณะที่การเลี้ยงsort_buffer_size
สามารถช่วยให้ค้นหาด้วยGROUP BY
s และORDER BY
s คุณจะดีกว่าการปรับปรุงแบบสอบถามที่คุณสามารถปรับปรุงและเพิ่มดัชนีที่สามารถใช้โดย Query Optimizer
คำถามยังคงอยู่: คุณตรวจสอบSort_merge_passes ได้อย่างไร ?
ใช้รหัสนี้เพื่อตรวจสอบจำนวน Sort_merge_passes ที่เกิดขึ้นในช่วง 5 นาทีที่ผ่านมา นอกจากนี้ยังคำนวณ Sort_merge_passes ต่อชั่วโมง
SET @SleepTime = 300;
SELECT variable_value INTO @SMP1
FROM information_schema.global_status WHERE variable_name = 'Sort_merge_passes';
SELECT SLEEP(@SleepTime) INTO @x;
SELECT variable_value INTO @SMP2
FROM information_schema.global_status WHERE variable_name = 'Sort_merge_passes';
SET @SMP = @SMP2 - @SMP1;
SET @SMP_RATE = @SMP * 3600 / @SleepTime;
SELECT @SMP,@SMP_RATE;
หากคุณพบ Sort_merge_passes และอัตราสูงเกินไปคุณสามารถเพิ่มsort_buffer_sizeได้ฟรี สมมติว่าคุณต้องการเพิ่มเป็น 4M คุณจะเรียกใช้สิ่งนี้:
mysql> SET GLOBAL sort_buffer_size = 1024 * 1024 * 4;
จากนั้นคุณจะเพิ่มลงใน my.cnf
[mysqld]
sort_buffer_size = 4M
คุณจะเรียกใช้รหัสเป็นระยะเพื่อตรวจสอบเวลาอื่นSort_merge_passes spikes