Database Tuning and Caching
                       MySQL + memcached




        ผศ.ดร.เด่นพงษ์ สุดภักดี
                 ...
Outline
•   System performance
•   KKU e-Learning (MOODLE)
•   MySQL Tuning
•   Caching using memcached




              ...
System Performance
• No exact solution for the best hardware
  configuration.
  – Focus on RAM  HDD  CPU
  – Separate we...
ระบบของมหาวิทยาลัยขอนแก่น




                            4
Khon Kaen University Equipment
• 5 web servers
• 1 main database server
• 1 database replication and network file sharing
...
Software
• Web server
  –   Ubuntu 9.10 64-bit server
  –   Apache
  –   PHP5
  –   eAccelerator
  –   Memcache
  –   Orac...
Average Load
• 3,000 users-visits per day
• 30,000 page-views per day




                               7
Monitoring and Alert
• Network Traffic
   – Load balancer software
   – Cacti
   – Google analytics
• Web server monitor a...
MySQL
• ปัจจุบันเวอร์ชั่น 5.1.45 (ณ วันที่ 17 มีนาคม 2553)
• http://www.mysql.com/downloads/mysql




                    ...
Additional Enterprise Features
• Partitioning               • Additional
• Row-based/Hybrid             INFORMATION_SCHEMA...
Database Tuning : MySQL
• การตั้งค่า my.cnf
• ตรวจสอบตัวแปรระบบ
  – mysql> SHOW VARIABLES;
  – mysql> SHOW STATUS;
• ผู้ใช...
ต่า Parameters ที่ควรต้องปรับตั้ง
•   key_buffer_size หรือ innodb_buffer_pool_size
•   innodb_additional_mem_pool_size
•  ...
key_buffer_size (MyISAM)
• ใช้สาหรับ cache index สาหรับ data จะ cache
  โดย OS
• ค่าควรอยู่ที่ประมาณ 30-40% ของหน่วยความจา...
innodb_buffer_pool_size
• Buffer มีความสาคัญสาหรับ Innodb มากกว่า
  MyISAM
• ค่า default ของ innodb_buffer_pool_size มักจะ...
innodb_additional_mem_pool_size
• ค่านี้อาจไม่มีผลต่อสมรรถนะมากนัก โดยเฉพาะ
  อย่างยิ่งสาหรับความสามารถของหน่วยความจาใน
  ...
innodb_log_file_size
• เป็นค่าที่มีความสาคัญมาก โดยเฉพาะอย่างยิ่งใน
  ระบบที่มีการเขียนข้อมูลจานวนมาก
• ขนาด log file ที่ใ...
innodb_log_buffer_size
• ค่า default มักจะใช้ได้ดี ในกรณีที่มีการเขียนข้อมูล
  ปานกลาง และมีการเรียกใช้เป็นระยะสั้นๆ
• ไม่...
innodb_flush_log_at_trx_commit
• ค่า default คือ 1 จะทาให้มีการ flush log ไปเก็บไว้
  ในฮาร์ดดิสในทุกๆ transaction ซึ่งจะท...
table_cache
• ในการเรียกใช้ table จาเป็นต้องเขียนไฟล์เพื่อใช้
  ทราบว่ามีการเปิดใช้งาน table ใช้งานนั้นอยู่แล้ว
  การต้องเ...
query_cache_size
• ในระบบที่มีการอ่าน database มากและไม่มีระบบ
  cache ของโปรแกรม การตั้งค่านี้จะทาให้ระบบ
  ทางานเร็วขึ้น...
สิบตัวแปรที่ต้องติดตามดู
1. Threads_connected
  – แสดงจานวน client ทั้งหมดที่กาลังติดต่อกับ server

  – เป็นข้อมูล real-ti...
สิบตัวแปรที่ต้องติดตามดู
2. Created_tmp_disk_tables
  – แสดงจานวน temporary table ทีถูกสร้างขึ้นใน
                       ...
สิบตัวแปรที่ต้องติดตามดู
3. Handler_read_first
  – แสดงจานวนครั้งที่ตัวจัดการตาราง (table handler)
    อ่านค่าแถวแรกของ in...
สิบตัวแปรที่ต้องติดตามดู
4. Innodb_buffer_pool_wait_free
  – แสดงจานวนครั้งที่ MySQL รอให้มีการ flush
    หน่วยความจา

  –...
สิบตัวแปรที่ต้องติดตามดู
5. Key_reads
  – แสดงจานวนครั้งที่ filesystem เรียกใช้ MySQL เพื่ออ่าน
    index

  – การที่ file...
สิบตัวแปรที่ต้องติดตามดู
6. Max_used_connections
  – แสดงจานวนการเชื่อมต่อที่มากที่สุดนับตั้งแต่ MySQL
    สตาร์ทครั้งล่าส...
สิบตัวแปรที่ต้องติดตามดู
7. Open_tables
  – แสดจานวน Table ที่เปิดอยู่ ณ ขณะนั้น

  – หากค่านี้มีค่าต่า ในขณะที่ค่า table_...
สิบตัวแปรที่ต้องติดตามดู
8. Select_full_join
  – แสดงจานวนของ full joins ที่ MySQL ได้ทาผ่านมา

  – หากค่านี้สูงแสดงว่ามีก...
สิบตัวแปรที่ต้องติดตามดู
9. Slow_queries
  – แสดงจานวน query ทีใช้เวลาในการประมวลผลนาน
                      ่
    กว่าปกต...
สิบตัวแปรที่ต้องติดตามดู
10. Uptime
  – แสดงจานวนวินาทีที่ MySQL สตาร์ทครั้งล่าสุด

  – หากค่านี้ต่าแสดงว่ามีการ restart M...
memcached
memcached เป็นโปรแกรมที่
มีสมรรถนะสูง ทาหน้าที่
กระจายค่าต่างๆ ไว้ใน
หน่วยความจาร่วม ซึ่งจะทาให้
สามารถเรียกใช้ ...
การ caching ข้อมูลด้วย memcached




                                   32
เครื่องมือในการตรวจสอบการทางาน
• tuning-primer
    https://launchpad.net/mysql-tuning-primer
• mysqlslap (สาหรับ MySQL 5.1...
MySQL Monitoring and Screenshots
•   MySQL Enterprise Monitoring (Subscription)
•   Cacti
•   MONyog
•   phpMyAdmin




  ...
Monitoring screenshots




                         35
Download this presentation
  http://slideshare.net/denpong
Contacts
  email:    denpong@kku.ac.th
  Twitter:  @denpong
  F...
Upcoming SlideShare
Loading in...5
×

Database Tuning for e-Learning

3,028

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
7 Likes
Statistics
Notes
No Downloads
Views
Total Views
3,028
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
3
Likes
7
Embeds 0
No embeds

No notes for slide

Transcript of "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

×