Database Tuning for e-Learning

3,704 views

Published on

Database tuning presentation for e-Learning admin conference at The Office of Commission of Higher Education of Thailand, 23 March 2010

3 Comments
10 Likes
Statistics
Notes
No Downloads
Views
Total views
3,704
On SlideShare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
0
Comments
3
Likes
10
Embeds 0
No embeds

No notes for slide

Database Tuning for e-Learning

  1. 1. Database Tuning and Caching MySQL + memcached ผศ.ดร.เด่นพงษ์ สุดภักดี ผู้ช่วยอธิการบดีฝ่ายวิชาการ และ ผู้อานวยการสานักนวัตกรรมการเรียนการสอน มหาวิทยาลัยขอนแก่น 1
  2. 2. Outline • System performance • KKU e-Learning (MOODLE) • MySQL Tuning • Caching using memcached 2
  3. 3. System Performance • No exact solution for the best hardware configuration. – Focus on RAM  HDD  CPU – Separate web server(s) from database server(s) – SAS HDD (more expensive) • Require system monitoring • Require software tuning (web server and database server) – Database tuning is a crucial task (no exact solution) • Require optimization and caching 3
  4. 4. ระบบของมหาวิทยาลัยขอนแก่น 4
  5. 5. Khon Kaen University Equipment • 5 web servers • 1 main database server • 1 database replication and network file sharing server • 1 system monitoring server • 1 media streaming server • 1 video encoding/rendering server • SAN storage (SAS: 1.5TB and SATA: 8TB) • Load balancer 5
  6. 6. Software • Web server – Ubuntu 9.10 64-bit server – Apache – PHP5 – eAccelerator – Memcache – Oracle Instant Connection – MOODLE • Database server – CentOS 64-bit – MySQL Enterprise 5.1.44 6
  7. 7. Average Load • 3,000 users-visits per day • 30,000 page-views per day 7
  8. 8. Monitoring and Alert • Network Traffic – Load balancer software – Cacti – Google analytics • Web server monitor and alert – Cacti – pingdom (pingdom.com) (push notification) • Database monitoring and advisory – MySQL Enterprise Monitor – MONyog (webyog.com) 8
  9. 9. MySQL • ปัจจุบันเวอร์ชั่น 5.1.45 (ณ วันที่ 17 มีนาคม 2553) • http://www.mysql.com/downloads/mysql 9
  10. 10. Additional Enterprise Features • Partitioning • Additional • Row-based/Hybrid INFORMATION_SCHEMA Replication objects • Event Scheduler • Faster data import • XPath Support operations (parallel file • Dynamic General/Slow load) Query Log • ACID Transactions • Performance/Load Testing • Stored Procedures Utility (mysqlslap) • Full Text Search • Triggers • Archive engine • Views • User session and problem • Information Schema SQL identification • Pluggable Storage Engine • MySQL embedded library Architecture (libmysqld) • Archive Storage Engine 10
  11. 11. Database Tuning : MySQL • การตั้งค่า my.cnf • ตรวจสอบตัวแปรระบบ – mysql> SHOW VARIABLES; – mysql> SHOW STATUS; • ผู้ใช้ส่วนใหญ่จะไม่ปรับแต่ง โดยอาจเข้าใจว่าค่า default เป็นค่าที่ดีทสุดอยู่แล้ว ี่ • ค่า default บางค่าทาให้ระบบทางานช้า • การทางานของ MyISAM และ InnoDB ไม่เหมือนกัน • MySQL มีค่าที่สามารถปรับแต่งได้จานวนมาก 11
  12. 12. ต่า Parameters ที่ควรต้องปรับตั้ง • key_buffer_size หรือ innodb_buffer_pool_size • innodb_additional_mem_pool_size • innodb_log_file_size • innodb_log_buffer_size • innodb_flush_log_at_trx_commit • table_cache • thread_cache • Threads_Created • query_cache_size • max_connections 12 Ref: http://www.mysqlperformanceblog.com/
  13. 13. key_buffer_size (MyISAM) • ใช้สาหรับ cache index สาหรับ data จะ cache โดย OS • ค่าควรอยู่ที่ประมาณ 30-40% ของหน่วยความจา • ควรตรวจสอบขนาด key_buffer_size ที่ใช้งานจริง เพื่อให้สามารถตั้งค่าให้เหมาะสม ไม่น้อยและไม่มาก จนเกินไป • แม้ว่ามี Table ไม่มาก ก็ควรจะตั้งค่าไว้อย่างน้อย 16-32 MB สาหรับ indexes ของ temporary table 13
  14. 14. innodb_buffer_pool_size • Buffer มีความสาคัญสาหรับ Innodb มากกว่า MyISAM • ค่า default ของ innodb_buffer_pool_size มักจะไม่ เหมาะสมกับการใช้งานจริง ซึ่งขึ้นกับจานวนและ ขนาดของ database ที่ใช้ • ค่า Innodb buffer pool จะ cache ทั้ง data และ index pages ดังนันไม่จาเป็นต้องกังวลเรื่อง OS ้ cache ทาให้สามารถตั้งค่าอยู่ระหว่าง 70-80% ของ เครื่อง สาหรับการใช้ Innodb เพียงอย่างเดียวใน เครื่อง 14
  15. 15. innodb_additional_mem_pool_size • ค่านี้อาจไม่มีผลต่อสมรรถนะมากนัก โดยเฉพาะ อย่างยิ่งสาหรับความสามารถของหน่วยความจาใน ปัจจุบัน • อย่างน้อยควรตั้งค่าไว้ประมาณ 20MB (หรือ มากกว่า) สาหรับการใช้งานทั่วๆ ไปของ MySQL ยามจาเป็น 15
  16. 16. innodb_log_file_size • เป็นค่าที่มีความสาคัญมาก โดยเฉพาะอย่างยิ่งใน ระบบที่มีการเขียนข้อมูลจานวนมาก • ขนาด log file ที่ใหญ่ จะทาให้สมรรถนะการทางานดี แต่จะส่งผลต่อเวลาในการอ่านไฟล์ภายหลัง • โดยปกติจะควรตั้งค่าประมาณ 64MB – 512MB 16
  17. 17. innodb_log_buffer_size • ค่า default มักจะใช้ได้ดี ในกรณีที่มีการเขียนข้อมูล ปานกลาง และมีการเรียกใช้เป็นระยะสั้นๆ • ไม่จาเป็นต้องมีการตังค่าสูงจนเกินไป เนื่องจากจะมี ้ การ flush ทุกๆ 1 วินาทีอยู่แล้ว การตั้งสูงเกินไปจะ เปลืองหน่วยความจาโดยเปล่าประโยชน์ • โดยทั่วไป ขนาด 8MB - 16MB เพียงพอต่อการใช้ งาน • ในระบบขนาดเล็กสามารถตั้งค่าที่น้อยกว่านี้ได้ 17
  18. 18. innodb_flush_log_at_trx_commit • ค่า default คือ 1 จะทาให้มีการ flush log ไปเก็บไว้ ในฮาร์ดดิสในทุกๆ transaction ซึ่งจะทาให้ต้องเขียน ฮาร์ดดิสบ่อย ทาให้การทางานช้า • ในระบบที่มีการเปลี่ยนการใช้งานจาก MyISAM เช่น MOODLE ควรตั้งค่าเป็น 2 ซึ่งจะทาให้ทาการ flush log ไปไว้ที่ OS cache ก่อน แล้วจะเขียนลงฮาร์ดดิส ทุกๆ 1-2 วินาที 18
  19. 19. table_cache • ในการเรียกใช้ table จาเป็นต้องเขียนไฟล์เพื่อใช้ ทราบว่ามีการเปิดใช้งาน table ใช้งานนั้นอยู่แล้ว การต้องเรียกเปิดบ่อยๆ ทาให้สมรรถนะการทางาน ไม่ดี • ขนาดของ table cache ควรจะมากพอในการเกิบค่า ตารางที่เปิดใช้งานไว้ได้ • การตั้งค่าไว้ประมาณ 1024 เพียงพอสาหรับระบบที่ มี ประมาณ 200 – 400 ตาราง หรืออาจตั้งเพิ่มได้ กรณีมีตารางจานวนมาก 19
  20. 20. query_cache_size • ในระบบที่มีการอ่าน database มากและไม่มีระบบ cache ของโปรแกรม การตั้งค่านี้จะทาให้ระบบ ทางานเร็วขึ้น • การตั้งค่าที่มากเกินไปจะทาให้ระบบทางานช้าลงได้ • การตั้งค่าระหว่าง 32M - 512M เป็นค่าที่เหมาะสม 20
  21. 21. สิบตัวแปรที่ต้องติดตามดู 1. Threads_connected – แสดงจานวน client ทั้งหมดที่กาลังติดต่อกับ server – เป็นข้อมูล real-time ทีช่วยในการวิเคราะห์จานวนผู้ใช้ ่ และสามารถตรวจสอบเวลาทีเหมาะสมในการ restart ่ ระบบได้ 21
  22. 22. สิบตัวแปรที่ต้องติดตามดู 2. Created_tmp_disk_tables – แสดงจานวน temporary table ทีถูกสร้างขึ้นใน ่ ฮาร์ดดิสก์แทนทีจะเป็นในหน่วยความจา ่ – การใช้งาน table ที่เขียนไว้ในฮาร์ดดิสก์จะช้ากว่า table ในหน่วยความจา ดังนั้นการใช้ query CREATE TEMPORARY TABLE จะช้าโดยเฉพาะอย่างยิ่งหากค่านี้ สูง 22
  23. 23. สิบตัวแปรที่ต้องติดตามดู 3. Handler_read_first – แสดงจานวนครั้งที่ตัวจัดการตาราง (table handler) อ่านค่าแถวแรกของ index ในตาราง – การอ่าน แถวแรกของ index นั้นหมายถึงการอ่าน scan index ทั้งตาราง ซึ่งแสดงว่าตาราง index ไว้ไม่ดี 23
  24. 24. สิบตัวแปรที่ต้องติดตามดู 4. Innodb_buffer_pool_wait_free – แสดงจานวนครั้งที่ MySQL รอให้มีการ flush หน่วยความจา – ถ้าค่านี้มีค่าสูง อาจจะเกิดจากการตั้งค่า buffer ของ หน่วยความจาไว้ไม่เหมาะสม 24
  25. 25. สิบตัวแปรที่ต้องติดตามดู 5. Key_reads – แสดงจานวนครั้งที่ filesystem เรียกใช้ MySQL เพื่ออ่าน index – การที่ filesystem อ่าน index ของฐานข้อมูลจะทาให้ สมรรถนะของ query ไม่ดี การที่คานี้สูงแสดงว่าค่า key ่ cache ไม่เหมาะสม 25
  26. 26. สิบตัวแปรที่ต้องติดตามดู 6. Max_used_connections – แสดงจานวนการเชื่อมต่อที่มากที่สุดนับตั้งแต่ MySQL สตาร์ทครั้งล่าสุด – ใช้สาหรับวิเคราะห์การเชื่อมต่อเพื่อให้สามารถปรับปรุง server ให้รองรับการใช้งานได้อย่างเหมาะสม 26
  27. 27. สิบตัวแปรที่ต้องติดตามดู 7. Open_tables – แสดจานวน Table ที่เปิดอยู่ ณ ขณะนั้น – หากค่านี้มีค่าต่า ในขณะที่ค่า table_cache สูงจะทาให้ สามารถลด cache ได้ ในทางกลับกันค่านี้สูงแต่ table_cache ต่า ควรเพิ่มค่า cache ได้ 27
  28. 28. สิบตัวแปรที่ต้องติดตามดู 8. Select_full_join – แสดงจานวนของ full joins ที่ MySQL ได้ทาผ่านมา – หากค่านี้สูงแสดงว่ามีการเรียกใช้ full table joins ซึ่ง สมรรถนะไม่ดี ควรแก้ไขให้ใช้ index มากขึ้น 28
  29. 29. สิบตัวแปรที่ต้องติดตามดู 9. Slow_queries – แสดงจานวน query ทีใช้เวลาในการประมวลผลนาน ่ กว่าปกติ – แสดงว่าการเขียนโปรแกรมเรียก query ไม่ดีจึงสามารถ หาแนวทางในการปรับเปลี่ยน query ได้ 29
  30. 30. สิบตัวแปรที่ต้องติดตามดู 10. Uptime – แสดงจานวนวินาทีที่ MySQL สตาร์ทครั้งล่าสุด – หากค่านี้ต่าแสดงว่ามีการ restart MySQL บ่อย ซึ่งเป็น โอกาสในการทางานของระบบทีไม่ดี ่ 30
  31. 31. memcached memcached เป็นโปรแกรมที่ มีสมรรถนะสูง ทาหน้าที่ กระจายค่าต่างๆ ไว้ใน หน่วยความจาร่วม ซึ่งจะทาให้ สามารถเรียกใช้ dynamic web เพื่อให้ลดภาระของ database ลงได้ (http://memcached.org/) 31
  32. 32. การ caching ข้อมูลด้วย memcached 32
  33. 33. เครื่องมือในการตรวจสอบการทางาน • tuning-primer https://launchpad.net/mysql-tuning-primer • mysqlslap (สาหรับ MySQL 5.1+) # ./mysqlslap --user=root --auto-generate-sql --concurrency=100 --iterations=5 • mysql-stress-test.pl MySQL Stress Test Program 33
  34. 34. MySQL Monitoring and Screenshots • MySQL Enterprise Monitoring (Subscription) • Cacti • MONyog • phpMyAdmin 34
  35. 35. Monitoring screenshots 35
  36. 36. Download this presentation http://slideshare.net/denpong Contacts email: denpong@kku.ac.th Twitter: @denpong Facebook: denpong 36

×