ในปัจจุบันมีการใช้งาน database กันอย่างแพร่หลายเป็นวงกว้าง โดย database ที่ได้รับความนิยมเป็นอันดับต้นๆ นั่นก็คือ MySQL

สำหรับในบนความนี้ จะกล่าวถึงเครื่องมือที่จะใช้ในการตรวจสอบประสิทธิภาพ การทำงานของ MySQL server คือ mysqlslap ซึ่งเป็นโปรแกรมที่เริ่มมีการใช้งานตั้งแต่ MySQL 5.1.4 ขึ้นไป โดยใช้ในการจำลองการใช้งาน สำหรับ MySQL เช่น กรณีที่มี connection หรือ มีการเรียกใช้งาน query จำนวนมาก ทั้งนี้เป็นการเตรียมการรองรับ connection ที่สูงขึ้น หรือหาแนวทางการแก้ไขปัญหาสำหรับกรณี ที่ database มีการเรียกใช้งานทรัพยากรสูงเกินกว่ากว่าระบบรองรับได้ สาเหตุอาจเกิดได้จากการออกแบบ database ที่ไม่สอดคล้องกับการใช้งาน ซึ่งอาจส่งผลกระทบกับระบบโดยรวมได้

สำหรับ mysqlslap นั้น จะสามารถวิเคราะห์และแสดงผล ตัวอย่าง ค่าเฉลี่ย, ค่าสูงสุดของเวลาที่ใช้ในการประมวลผลตามคำสั่งนั้นๆ ในบทความนี้ จะนำเสนอการทดสอบประสิทธิภาพของ database โดยใช้ mysqlslap ด้วยคำสั่ง พื้นฐานต่างๆ และแสดงผลการดำเนินการ

เตรียมการทดสอบด้วย

หมายเหตุ

  • เพื่อป้องกันผลกระทบจากการทดสอบ ผู้ทดสอบควรเลือกทดสอบบน server ที่ไม่มีการใช้งานจริง เนื่องจากการรับ connection และ query จำนวนมากในขณะทดสอบ อาจส่งผลกระทบต่อผู้ใช้งาน server ในขณะนั้นได้
  • กรณีที่ต้องการทดสอบโดยใช้คำสั่งที่ซับซ้อน อาจะจำเป็นจะต้องใช้ resource ที่เพิ่มสูงขึ้น

ติดตั้งโปรแกรมเพื่อการทดสอบ

ติดตั้ง yum repository ของ mysql

ตรวจสอบการติดตั้ง repository

ติดตั้ง mysql server และตรวจสอบ status เมื่อมีการติดตั้งเรียบร้อย

สั่ง start service กำหนดให้ MySQL server  เริ่มทำงานตั้งแต่มีการเปิดเครื่อง และกำหนดความปลอดภัยเบื้องต้นเพิ่มขึ้นให้กับ MySQL server

หากแสดงข้อความดังกล่าว แสดงว่าดำเนินการเรียบร้อยแล้ว

ทดสอบ login จากนั้นตรวจสอบและปรับ connection ของ MySQL เพิ่มขึ้นเพื่อการทดสอบใช้งาน

เมื่อสามารถ login ได้เรียบร้อย เราจะสร้าง user สำหรับใช้ทดสอบแทนการใช้งาน root user ดังนี้

ติดตั้ง database เพื่อใช้ในการทดสอบ โดยลองใช้ database ในการทดสอบ จาก MySQLtutorial.org

เริ่มติดตั้ง database classicmodels

เข้าตรวจสอบ เมื่อติดตั้ง database classicmodels เรียบร้อย

จาก output ด้านบน จะเห็นได้ว่ามีการติดตั้ง database : classicmodels เรียบร้อยแล้ว และขั้นตอนต่อไป เราจะทำการทดสอบเรียกใช้งาน database

การทดสอบด้วย mysqlslap

ก่อนเริ่มการทดสอบ เราจะขอแนะนำ option บางส่วนสำหรับ mysqlslap เพื่อใช้ในการทดสอบ

 

เริ่มต้นการทดสอบ

ตัวอย่างที่ 1 : สำหรับการเริ่มต้น จะเป็นการจำลองการทดสอบเสมือน client 1 เครื่อง จากการสร้างคำสั่ง SQL ขึ้นโดยอัตโนมัติ

จะเห็นได้ว่า ค่า output ที่ออกมาจะแสดงถึงสถิติของเวลาที่ดำเนินการ query ข้อมูล เช่น

  • ค่าเฉลียของการ run คำสั่ง คือ 0.010 วินาที
  • ค่าน้อยที่สุดของการ run คำสั่ง คือ 0.010 วินาที
  • ค่าสูงที่สุดของการ run คำสั่ง คือ 0.010 วินาที
  • จำนวน client ที่มีการเรียกใช้งาน และ จำนวน query เฉลี่ยต่อ 1 client  
  • ตัวอย่างที่ 2 : จะมีการเพิ่มจำนวน client เป็น 10 connection และมีการเรียกคำสั่งจำนวน 100 ครั้ง

โดยในการทดสอบ ยังคงเป็นการสร้างคำสั่ง SQL ขึ้นโดยอัตโนมัติเช่นตัวอย่างแรก

จากค่า output ที่ออกมาจะแสดง เช่น ค่าเฉลี่ยของ query ข้อมูลจาก 10 connection จะใช้เวลาสูงขึ้นในการดำเนินการ จากเดิมที่มีการใช้งานเพียงเครื่องเดียวเล็กน้อย ทั้งนี้การใช้งาน option –auto-generate-sql จะเป็นการสร้าง table ขนาดเล็กเพื่อทดสอบเท่านั้น ผู้ทดสอบสามารถกำหนดค่าของ table โดยใช้ option –number-char-cols และ –number-int-col ได้ ดังตัวอย่าง

ตัวอย่างที่ 3

*ทั้งนี้การทดสอบเพิ่มจำนวน connection หรือ iteration ที่สูงขึ้น จะส่งผลต่อการเรียกใช้ resource ของ server ที่เพิ่มขึ้น*

หลังจากที่ได้มีการทดสอบด้วย การสร้างคำสั่งขึ้นโดยอัตโนมัติแล้ว ตัวอย่างต่อไป จะเป็นการทดสอบด้วย การกำหนดชุดคำสั่ง mysql ขึ้นเอง โดยจะเรียกใช้งาน database: classicmodels ซึ่งมีการติดตั้งไปก่อนหน้านี้

ตัวอย่างที่ 4 :

 

ตัวอย่างที่ 5

จากตัวอย่างที่ 4 และ 5 นั้น จะเห็นว่า มีการกำหนดค่าต่างๆ เช่นเดียวกัน โดยจะมี option ที่แตกต่างกันคือ –number-of-queries เท่านั้น ซึ่งการกำหนด number-of-queries จะมีผลให้เครื่อง client มีการ query ข้อมูลต่อ client เพิ่มขึ้น ดังนั้นค่าเวลาที่ได้จึงเพิ่มสูงขึ้นไปด้วย

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

ตัวอย่างที่ 6 : เพิ่มชุดคำสั่งที่ใช้งานเป็น 2 ชุดคำสั่ง

ทั้งนี้หากมีชุดคำสั่งที่ต้องทดสอบเพิ่มมากขึ้น ผู้ทดสอบสามารถสร้างไฟล์ ชุดคำสั่งของ mysql ขึ้นก่อน แล้วจึงทำการสั่ง คำสั่งผ่าน command line เช่น

และทำการทดสอบด้วยคำสั่งดังนี้

จากตัวอย่างนี้จะมีการใช้ option debug-info เพิ่มเติม ซึ่ง option นี้จะแสดงค่าของ CPU และ RAM  ของ server ที่มีการเรียกใช้งาน และจะเห็นได้ว่าเมื่อมีการเพิ่มจำนวน connection และ number-of-queries ผลที่ได้คือเวลาที่เพิ่มขึ้นเป็น 3.152  วินาที โดยค่า Non-physical pagefaults จะอ้างอิงส่วนของ memory ว่าเพียงพอหรือไม่ และ context switches จะอ้างอิงข้อมูลของ CPU

ทั้งนี้ตัวอย่างที่นำเสนอไปด้านบน ผู้ดูแลระบบสามารถนำไปประยุกต์ ใช้ในการทดสอบเปรียบเทียบ โดยมีแนวทางดังนี้

  1. สามารถตรวจสอบหา คำสั่งต่างๆ ของ MySQL จาก server ที่ใช้งานได้จาก
    • คำสั่ง “mysqladmin pro –v” จะแสดง process ของ mysql ทีมีการทำงานอยู่ในขณะนั้น และเป็นคำสั่งในรูปเต็ม
    • สามารถเปิด slow query log เพื่อตรวจสอบหาคำสั่งที่ใช้งาน และนำมาใช้ในการทดสอบได้
  2. ทดสอบโดยการเปลี่ยน engine ที่ใช้งานระหว่าง innodb และ myisam ทั้งนี้ประเภทของ database อาจมีความเหมาะสมที่แตกต่างกันไป ซึ่งขึ้นอยู่กันการใช้ออกแบบและการใช้งาน
  3. ทดสอบทำ index หรือ key กับ field ที่มีการเรียกใช้งานบ่อย ซึ่งหลังจากการดำเนินการดังกล่าว การทำงานอาจเร็วขึ้นหรือไม่เปลี่ยนแปลง ทั้งนี้ขึ้นอยู่กับการออกแบบ database และคำสั่งที่เรียกใช้งาน
  4. เพื่อให้เห็นผลการทดสอบที่ชัดเจน ควรเลือกเครื่อง server สำหรับทดสอบให้มี spec ที่ใกล้เคียงกับเครื่องที่มีการใช้งานจริง

ทั้งนี้เมื่อมีการปรับค่าต่างๆ  ที่เกี่ยวข้องแล้ว ผู้ดูแลระบบสามารถทดสอบประสิทธิภาพของ mysql ก่อนและหลังดำเนินการ เพื่อปรับปรุงให้ระบบดีขึ้นได้

ข้อมูลเพิ่มเติม: http://dev.mysql.com/doc/refman/5.5/en/mysqlslap.html

Share this:Share on FacebookTweet about this on TwitterShare on Google+Pin on Pinterest