MySQL - บังคับไม่ให้ใช้แคชเพื่อทดสอบความเร็วของการสืบค้น


343

ฉันกำลังทดสอบความเร็วของการสืบค้นใน MySQL ฐานข้อมูลแคชแบบสอบถามเหล่านี้ทำให้ฉันยากที่จะได้รับผลลัพธ์ที่เชื่อถือได้เมื่อทดสอบว่าแบบสอบถามเหล่านี้รวดเร็วแค่ไหน

มีวิธีปิดใช้งานการแคชสำหรับคิวรีหรือไม่

ระบบ: MySQL 4 บนเว็บโฮสติ้ง Linux ฉันสามารถเข้าถึง PHPMyAdmin

ขอบคุณ

mysql 

คำตอบ:


527

ลองใช้ตัวเลือกSQL_NO_CACHE (MySQL 5.7) ในแบบสอบถามของคุณ (ผู้ใช้ MySQL 5.6 คลิกที่นี่ )

เช่น.

SELECT SQL_NO_CACHE * FROM TABLE

สิ่งนี้จะหยุด MySQL ที่แคชผลลัพธ์อย่างไรก็ตามโปรดทราบว่าระบบปฏิบัติการอื่นและแคชดิสก์อาจส่งผลกระทบต่อประสิทธิภาพการทำงาน สิ่งเหล่านี้ยากที่จะรับได้



4
บทความที่ดีเกี่ยวกับ mysql Query cache วิธีการตั้งค่าและดูแคชในการทำงาน! คุ้มค่ากับการอ่าน databasejournal.com/features/mysql/article.php/3110171/…
Adrian P.

1
ก่อนที่จะพยายามปรับปรุงประสิทธิภาพลองรีสตาร์ทเซิร์ฟเวอร์ mysql ของคุณ อาจเป็นได้ว่ากระบวนการบางอย่างส่งผลกระทบต่อทุกสิ่ง มันเกิดขึ้นกับฉัน แม้ว่ามันจะเป็นความคิดเห็นที่ไม่มีการเชื่อมต่อโดยตรงกับปัญหา แต่ก็สามารถช่วยคนจำนวนมากได้
dellasavia

2
สิ่งนี้จะหยุดมันจากการแคชผลลัพธ์ แต่มันหยุดมันจากการใช้แคชหรือไม่?
Brett

3
@Brett เห็นความคิดเห็นของ SalmanPK ย้อนกลับไปใน '11 หน้าเอกสารนั้นคือประโยคอย่างแท้จริง 4 ประโยคและตอบคำถามของคุณโดยตรง ในกรณีที่หน้าถูกลบในอนาคต: "มันไม่ตรวจสอบแคชแบบสอบถามเพื่อดูว่าผลลัพธ์ถูกแคชไว้แล้วหรือไม่แคชผลลัพธ์แบบสอบถาม"
อริซ

121

ทางเลือกอื่นที่มีผลต่อการเชื่อมต่อปัจจุบันเท่านั้น:

SET SESSION query_cache_type=0;

ความผิดฉันเอง. มันเป็นฉันถูกมองที่ไม่query_cache_size query_cache_typeฉันกำลังผสมของคุณและคำตอบของ SeniorDev
ไมค์

56

การอ้างอิงถึงวันที่ / เวลาปัจจุบันจะปิดใช้งานแคชคิวรีสำหรับการเลือกนั้น:

SELECT *,NOW() FROM TABLE

ดู "ข้อกำหนดเบื้องต้นและหมายเหตุสำหรับการใช้แคชคิวรีของ MySQL" @ http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html


30

นอกจากนี้ยังมีตัวเลือกการกำหนดค่า: query_cache_size = 0

หากต้องการปิดใช้งานแคชแบบสอบถามเมื่อเริ่มต้นเซิร์ฟเวอร์ให้ตั้งค่าตัวแปรระบบ query_cache_size เป็น 0 เมื่อปิดใช้งานรหัสแคชแบบสอบถามจะไม่มีค่าใช้จ่ายที่เห็นได้ชัดเจน หากคุณสร้าง MySQL จากแหล่งที่มาความสามารถในการแคชแบบสอบถามสามารถแยกออกจากเซิร์ฟเวอร์ทั้งหมดได้ด้วยการเรียกใช้การกำหนดค่าด้วยตัวเลือก --without-query-cache

ดูhttp://dev.mysql.com/doc/refman/5.1/en/query-cache.html


24

คุณยังสามารถเรียกใช้คำสั่ง follow เพื่อรีเซ็ตแคชแบบสอบถาม

RESET QUERY CACHE

9
นี่น่าจะเกินความเป็นไปได้ ... โดยหลักแล้วคุณต้องการให้ MySQL เพิกเฉยแคชชั่วคราว
BMiner

3
คุณต้องมีการอนุญาตพิเศษสำหรับสิ่งนี้
Erick Robertson

19

ปัญหาหนึ่งกับ

SELECT SQL_NO_CACHE * FROM TABLE

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


1
แต่ถ้าแคชของคุณเต็มไปด้วยผู้อื่นคุณจะได้รับภาพลวงตาที่รวดเร็ว แต่บางครั้งก็ไม่
karatedog

14

ฉันจะใช้สิ่งต่อไปนี้:

SHOW VARIABLES LIKE 'query_cache_type';
SET SESSION query_cache_type = OFF;
SHOW VARIABLES LIKE 'query_cache_type';

3

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

SELECT t.*
FROM thetable t, (SELECT @a:=NULL) as init;

3
"ฉันพบว่ามันเป็นตัวบ่งชี้ที่ดีกว่าการใช้SQL_NO_CACHE" งั้นเหรอ ดูเหมือนว่าคุณจะต้องมีกรณีที่ค่อนข้างสวยสำหรับการใช้แฮ็คที่คลุมเครือมากกว่าคำหลักที่ชัดเจนยกเว้นว่าคำหลักที่ชัดเจนไม่ได้ทำในสิ่งที่มันอ้าง
Air

1
@Air ฉันพบว่าโซลูชันนี้ทำงานได้ดีกว่า SQL_NO_CACHE เช่นกัน SQL_NO_CACHE ทำงานเป็นครั้งแรกที่เรียกใช้แบบสอบถาม แต่หลังจากนั้นไม่ทำงานอีกครั้ง ฉันสมมติว่านี่เป็นเพราะกลไกการแคชอื่น ๆ ฉันคิดว่าวิธีนี้ใช้ได้ผลดีกว่าเพราะการค้นหาที่อาศัยตัวแปรไม่สามารถถูกแคชโดยเลเยอร์หรือกลไกใด ๆ - อย่างน้อยนั่นคือการคาดเดาที่ดีที่สุดของฉัน
คลิกที่

2

หากคุณต้องการปิดการใช้งาน Query cache ให้ตั้งค่า 'query_cache_size' เป็น 0 ในไฟล์กำหนดค่า mysql ของคุณ ถ้าตั้ง 0 mysql จะไม่ใช้แคชแบบสอบถาม

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