การเพิ่มประสิทธิภาพการทำงานของ MySQL เกี่ยวข้องกับหลายแง่มุม บทความนี้จะอธิบายพารามิเตอร์หลักบางประการใน MySQL ในระดับหนึ่ง พารามิเตอร์เหล่านี้คือพารามิเตอร์หลักที่กำหนดประสิทธิภาพของฐานข้อมูล MySQL เรามักจะประสบปัญหาด้านประสิทธิภาพในระหว่างการจัดการและพัฒนาฐานข้อมูล ซึ่งเกี่ยวข้องกับการเพิ่มประสิทธิภาพการทำงานของ MySQL จากการค้นหาข้อมูลบนอินเทอร์เน็ตและความพยายามของผู้เขียนเอง ฉันคิดว่าพารามิเตอร์ระบบต่อไปนี้มีความสำคัญมากกว่า:
พารามิเตอร์หลักที่หนึ่ง: back_log
จำนวนการเชื่อมต่อที่ MySQL จำเป็นต้องมี วิธีนี้ใช้งานได้เมื่อเธรด MySQL หลักได้รับคำขอเชื่อมต่อจำนวนมากในช่วงเวลาสั้น ๆ จากนั้นเธรดหลักจะใช้เวลาระยะหนึ่ง (แม้ว่าจะเป็นเวลาสั้นๆ) ในการตรวจสอบการเชื่อมต่อและเริ่มเธรดใหม่
ค่า back_log ระบุจำนวนคำขอที่สามารถจัดเก็บในสแต็กในช่วงเวลาสั้นๆ ก่อนที่ MySQL จะหยุดตอบคำขอใหม่ชั่วคราว เฉพาะในกรณีที่คุณคาดว่าจะมีการเชื่อมต่อจำนวนมากในช่วงเวลาสั้นๆ เท่านั้น คุณจะต้องเพิ่มการเชื่อมต่อ กล่าวคือ ค่านี้คือขนาดของคิวการฟังสำหรับการเชื่อมต่อ TCP/IP ขาเข้า ระบบปฏิบัติการของคุณมีขีดจำกัดของตัวเองสำหรับขนาดคิวนี้ การพยายามตั้งค่า back_log ให้สูงกว่าขีดจำกัดของระบบปฏิบัติการของคุณจะไม่มีผลใดๆ
เมื่อคุณสังเกตรายการกระบวนการโฮสต์ของคุณและพบกระบวนการ 264084 |. ที่ไม่ได้รับการรับรองความถูกต้องจำนวนมาก คุณจะต้องเพิ่มค่าของ back_log ค่าเริ่มต้นคือ 50 ฉันเปลี่ยนเป็น 500
พารามิเตอร์หลักที่สอง: Interactive_timeout
จำนวนวินาทีที่เซิร์ฟเวอร์รอการดำเนินการกับการเชื่อมต่อแบบโต้ตอบก่อนที่จะปิด ไคลเอนต์แบบโต้ตอบถูกกำหนดให้เป็นไคลเอนต์ที่ใช้ตัวเลือก CLIENT_INTERACTIVE เพื่อ mysql_real_connect() ค่าเริ่มต้นคือ 28800 ฉันเปลี่ยนเป็น 7200
พารามิเตอร์คีย์ที่สาม: key_buffer_size
บล็อกดัชนีถูกบัฟเฟอร์และแบ่งปันโดยเธรดทั้งหมด key_buffer_size คือขนาดบัฟเฟอร์ที่ใช้สำหรับบล็อกดัชนี ให้เพิ่มขนาดเพื่อให้จัดการดัชนีได้ดีขึ้น (สำหรับการอ่านทั้งหมดและการเขียนหลายรายการ) ให้มากที่สุดเท่าที่คุณจะจ่ายได้ หากคุณทำให้มันใหญ่เกินไป ระบบจะเริ่มเพจและช้าลงมาก ค่าเริ่มต้นคือ 8388600 (8M) และโฮสต์ MySQL ของฉันมีหน่วยความจำ 2GB ดังนั้นฉันจึงเปลี่ยนเป็น 402649088 (400MB)
พารามิเตอร์หลักที่สี่: max_connections
จำนวนไคลเอนต์พร้อมกันที่อนุญาต การเพิ่มค่านี้จะเพิ่มจำนวนตัวอธิบายไฟล์ที่ mysqld ต้องการ ควรเพิ่มจำนวนนี้ ไม่เช่นนั้นคุณจะเห็นข้อผิดพลาดในการเชื่อมต่อมากเกินไปบ่อยครั้ง ค่าเริ่มต้นคือ 100 ฉันเปลี่ยนเป็น 1024
พารามิเตอร์หลักที่ห้า: record_buffer
แต่ละเธรดที่ทำการสแกนตามลำดับจะจัดสรรบัฟเฟอร์ขนาดนี้สำหรับแต่ละตารางที่สแกน หากคุณทำการสแกนตามลำดับหลายครั้ง คุณอาจต้องการเพิ่มค่านี้ ค่าเริ่มต้นคือ 131072 (128K) ฉันเปลี่ยนเป็น 16773120 (16M)
พารามิเตอร์หลักที่หก: sort_buffer
แต่ละเธรดที่ต้องเรียงลำดับจะได้รับการจัดสรรบัฟเฟอร์ขนาดนี้ การเพิ่มค่านี้จะทำให้การดำเนินการ ORDER BY หรือ GROUP BY เร็วขึ้น ค่าเริ่มต้นคือ 2097144 (2M) ฉันเปลี่ยนเป็น 16777208 (16M)
พารามิเตอร์หลักที่เจ็ด: table_cache
จำนวนตารางที่เปิดสำหรับเธรดทั้งหมด การเพิ่มค่านี้จะเพิ่มจำนวนตัวอธิบายไฟล์ที่ mysqld ต้องการ MySQL ต้องการตัวอธิบายไฟล์ 2 ตัวสำหรับแต่ละตารางที่เปิดไม่ซ้ำกัน ค่าเริ่มต้นคือ 64 ฉันเปลี่ยนเป็น 512
พารามิเตอร์หลักแปด: thread_cache_size
จำนวนเธรดที่เก็บไว้ในที่สามารถนำมาใช้ซ้ำได้ หากมี เธรดใหม่จะถูกดึงมาจากแคช และหากมีพื้นที่ว่างเมื่อการเชื่อมต่อถูกตัดการเชื่อมต่อ เธรดของไคลเอ็นต์จะถูกวางในแคช หากมีเธรดใหม่จำนวนมาก สามารถใช้ค่าตัวแปรนี้เพื่อปรับปรุงประสิทธิภาพได้ โดยการเปรียบเทียบตัวแปรในสถานะ Connections และ Threads_created คุณสามารถดูบทบาทของตัวแปรนี้ได้ ผมตั้งไว้ที่ 80
พารามิเตอร์หลักที่เก้า: wait_timeout
จำนวนวินาทีที่เซิร์ฟเวอร์รอการดำเนินการกับการเชื่อมต่อก่อนที่จะปิด ค่าเริ่มต้นคือ 28800 ฉันเปลี่ยนเป็น 7200
หมายเหตุ: การปรับพารามิเตอร์สามารถทำได้โดยการแก้ไขไฟล์ /etc/my.cnf และรีสตาร์ท MySQL นี่เป็นงานที่ค่อนข้างระมัดระวัง และผลลัพธ์ข้างต้นเป็นเพียงความคิดเห็นบางส่วนของฉัน คุณสามารถแก้ไขเพิ่มเติมได้ตามเงื่อนไขฮาร์ดแวร์ของโฮสต์ของคุณ (โดยเฉพาะขนาดหน่วยความจำ)