Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

12

Share

Database Tuning for e-Learning

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

Related Audiobooks

Free with a 30 day trial from Scribd

See all

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
  • jijej

    Jul. 16, 2019
  • fernniez

    Sep. 22, 2017
  • sukonkan

    Aug. 31, 2016
  • chuexiong

    Dec. 1, 2015
  • KarakadaKaewwongyai

    Oct. 28, 2015
  • GuIWoon

    Jul. 29, 2015
  • ShongponPiapengton

    Jul. 24, 2015
  • krusirom

    Jul. 26, 2014
  • wgw

    May. 10, 2012
  • spaghettikku

    Sep. 19, 2011
  • panuwattb

    Apr. 9, 2011
  • kullawat

    Apr. 5, 2010

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

Views

Total views

4,072

On Slideshare

0

From embeds

0

Number of embeds

14

Actions

Downloads

0

Shares

0

Comments

0

Likes

12

×