SlideShare a Scribd company logo
Database Tuning and Caching
                       MySQL + memcached




        ผศ.ดร.เด่นพงษ์ สุดภักดี
                  ผู้ช่วยอธิการบดีฝ่ายวิชาการ และ
       ผู้อานวยการสานักนวัตกรรมการเรียนการสอน
                              มหาวิทยาลัยขอนแก่น


                                                    1
Outline
•   System performance
•   KKU e-Learning (MOODLE)
•   MySQL Tuning
•   Caching using memcached




                              2
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
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
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
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 and alert
   – Cacti
   – pingdom (pingdom.com)
     (push notification)
• Database monitoring and advisory
   – MySQL Enterprise Monitor
   – MONyog (webyog.com)
                                     8
MySQL
• ปัจจุบันเวอร์ชั่น 5.1.45 (ณ วันที่ 17 มีนาคม 2553)
• http://www.mysql.com/downloads/mysql




                                                       9
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
Database Tuning : MySQL
• การตั้งค่า my.cnf
• ตรวจสอบตัวแปรระบบ
  – mysql> SHOW VARIABLES;
  – mysql> SHOW STATUS;
• ผู้ใช้ส่วนใหญ่จะไม่ปรับแต่ง โดยอาจเข้าใจว่าค่า
  default เป็นค่าที่ดีทสุดอยู่แล้ว
                       ี่
• ค่า default บางค่าทาให้ระบบทางานช้า
• การทางานของ MyISAM และ InnoDB ไม่เหมือนกัน
• MySQL มีค่าที่สามารถปรับแต่งได้จานวนมาก
                                               11
ต่า 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/
key_buffer_size (MyISAM)
• ใช้สาหรับ cache index สาหรับ data จะ cache
  โดย OS
• ค่าควรอยู่ที่ประมาณ 30-40% ของหน่วยความจา
• ควรตรวจสอบขนาด key_buffer_size ที่ใช้งานจริง
  เพื่อให้สามารถตั้งค่าให้เหมาะสม ไม่น้อยและไม่มาก
  จนเกินไป
• แม้ว่ามี Table ไม่มาก ก็ควรจะตั้งค่าไว้อย่างน้อย
  16-32 MB สาหรับ indexes ของ temporary table
                                                 13
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
innodb_additional_mem_pool_size
• ค่านี้อาจไม่มีผลต่อสมรรถนะมากนัก โดยเฉพาะ
  อย่างยิ่งสาหรับความสามารถของหน่วยความจาใน
  ปัจจุบัน
• อย่างน้อยควรตั้งค่าไว้ประมาณ 20MB (หรือ
  มากกว่า) สาหรับการใช้งานทั่วๆ ไปของ MySQL
  ยามจาเป็น



                                              15
innodb_log_file_size
• เป็นค่าที่มีความสาคัญมาก โดยเฉพาะอย่างยิ่งใน
  ระบบที่มีการเขียนข้อมูลจานวนมาก
• ขนาด log file ที่ใหญ่ จะทาให้สมรรถนะการทางานดี
  แต่จะส่งผลต่อเวลาในการอ่านไฟล์ภายหลัง
• โดยปกติจะควรตั้งค่าประมาณ 64MB – 512MB




                                              16
innodb_log_buffer_size
• ค่า default มักจะใช้ได้ดี ในกรณีที่มีการเขียนข้อมูล
  ปานกลาง และมีการเรียกใช้เป็นระยะสั้นๆ
• ไม่จาเป็นต้องมีการตังค่าสูงจนเกินไป เนื่องจากจะมี
                       ้
  การ flush ทุกๆ 1 วินาทีอยู่แล้ว การตั้งสูงเกินไปจะ
  เปลืองหน่วยความจาโดยเปล่าประโยชน์
• โดยทั่วไป ขนาด 8MB - 16MB เพียงพอต่อการใช้
  งาน
• ในระบบขนาดเล็กสามารถตั้งค่าที่น้อยกว่านี้ได้
                                                        17
innodb_flush_log_at_trx_commit
• ค่า default คือ 1 จะทาให้มีการ flush log ไปเก็บไว้
  ในฮาร์ดดิสในทุกๆ transaction ซึ่งจะทาให้ต้องเขียน
  ฮาร์ดดิสบ่อย ทาให้การทางานช้า
• ในระบบที่มีการเปลี่ยนการใช้งานจาก MyISAM เช่น
  MOODLE ควรตั้งค่าเป็น 2 ซึ่งจะทาให้ทาการ flush
  log ไปไว้ที่ OS cache ก่อน แล้วจะเขียนลงฮาร์ดดิส
  ทุกๆ 1-2 วินาที

                                                   18
table_cache
• ในการเรียกใช้ table จาเป็นต้องเขียนไฟล์เพื่อใช้
  ทราบว่ามีการเปิดใช้งาน table ใช้งานนั้นอยู่แล้ว
  การต้องเรียกเปิดบ่อยๆ ทาให้สมรรถนะการทางาน
  ไม่ดี
• ขนาดของ table cache ควรจะมากพอในการเกิบค่า
  ตารางที่เปิดใช้งานไว้ได้
• การตั้งค่าไว้ประมาณ 1024 เพียงพอสาหรับระบบที่
  มี ประมาณ 200 – 400 ตาราง หรืออาจตั้งเพิ่มได้
  กรณีมีตารางจานวนมาก                           19
query_cache_size
• ในระบบที่มีการอ่าน database มากและไม่มีระบบ
  cache ของโปรแกรม การตั้งค่านี้จะทาให้ระบบ
  ทางานเร็วขึ้น
• การตั้งค่าที่มากเกินไปจะทาให้ระบบทางานช้าลงได้
• การตั้งค่าระหว่าง 32M - 512M เป็นค่าที่เหมาะสม




                                                   20
สิบตัวแปรที่ต้องติดตามดู
1. Threads_connected
  – แสดงจานวน client ทั้งหมดที่กาลังติดต่อกับ server

  – เป็นข้อมูล real-time ทีช่วยในการวิเคราะห์จานวนผู้ใช้
                           ่
    และสามารถตรวจสอบเวลาทีเหมาะสมในการ restart
                                 ่
    ระบบได้



                                                           21
สิบตัวแปรที่ต้องติดตามดู
2. Created_tmp_disk_tables
  – แสดงจานวน temporary table ทีถูกสร้างขึ้นใน
                                 ่
    ฮาร์ดดิสก์แทนทีจะเป็นในหน่วยความจา
                   ่

  – การใช้งาน table ที่เขียนไว้ในฮาร์ดดิสก์จะช้ากว่า table
    ในหน่วยความจา ดังนั้นการใช้ query CREATE
    TEMPORARY TABLE จะช้าโดยเฉพาะอย่างยิ่งหากค่านี้
    สูง

                                                        22
สิบตัวแปรที่ต้องติดตามดู
3. Handler_read_first
  – แสดงจานวนครั้งที่ตัวจัดการตาราง (table handler)
    อ่านค่าแถวแรกของ index ในตาราง

  – การอ่าน แถวแรกของ index นั้นหมายถึงการอ่าน scan
    index ทั้งตาราง ซึ่งแสดงว่าตาราง index ไว้ไม่ดี



                                                      23
สิบตัวแปรที่ต้องติดตามดู
4. Innodb_buffer_pool_wait_free
  – แสดงจานวนครั้งที่ MySQL รอให้มีการ flush
    หน่วยความจา

  – ถ้าค่านี้มีค่าสูง อาจจะเกิดจากการตั้งค่า buffer ของ
    หน่วยความจาไว้ไม่เหมาะสม



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

  – การที่ filesystem อ่าน index ของฐานข้อมูลจะทาให้
    สมรรถนะของ query ไม่ดี การที่คานี้สูงแสดงว่าค่า key
                                     ่
    cache ไม่เหมาะสม


                                                       25
สิบตัวแปรที่ต้องติดตามดู
6. Max_used_connections
  – แสดงจานวนการเชื่อมต่อที่มากที่สุดนับตั้งแต่ MySQL
    สตาร์ทครั้งล่าสุด

  – ใช้สาหรับวิเคราะห์การเชื่อมต่อเพื่อให้สามารถปรับปรุง
    server ให้รองรับการใช้งานได้อย่างเหมาะสม



                                                           26
สิบตัวแปรที่ต้องติดตามดู
7. Open_tables
  – แสดจานวน Table ที่เปิดอยู่ ณ ขณะนั้น

  – หากค่านี้มีค่าต่า ในขณะที่ค่า table_cache สูงจะทาให้
    สามารถลด cache ได้ ในทางกลับกันค่านี้สูงแต่
    table_cache ต่า ควรเพิ่มค่า cache ได้



                                                           27
สิบตัวแปรที่ต้องติดตามดู
8. Select_full_join
  – แสดงจานวนของ full joins ที่ MySQL ได้ทาผ่านมา

  – หากค่านี้สูงแสดงว่ามีการเรียกใช้ full table joins ซึ่ง
    สมรรถนะไม่ดี ควรแก้ไขให้ใช้ index มากขึ้น




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

  – แสดงว่าการเขียนโปรแกรมเรียก query ไม่ดีจึงสามารถ
    หาแนวทางในการปรับเปลี่ยน query ได้



                                                   29
สิบตัวแปรที่ต้องติดตามดู
10. Uptime
  – แสดงจานวนวินาทีที่ MySQL สตาร์ทครั้งล่าสุด

  – หากค่านี้ต่าแสดงว่ามีการ restart MySQL บ่อย ซึ่งเป็น
    โอกาสในการทางานของระบบทีไม่ดี ่




                                                       30
memcached
memcached เป็นโปรแกรมที่
มีสมรรถนะสูง ทาหน้าที่
กระจายค่าต่างๆ ไว้ใน
หน่วยความจาร่วม ซึ่งจะทาให้
สามารถเรียกใช้ dynamic
web เพื่อให้ลดภาระของ
database ลงได้
        (http://memcached.org/)
                                  31
การ caching ข้อมูลด้วย memcached




                                   32
เครื่องมือในการตรวจสอบการทางาน
• 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
MySQL Monitoring and Screenshots
•   MySQL Enterprise Monitoring (Subscription)
•   Cacti
•   MONyog
•   phpMyAdmin




                                                 34
Monitoring screenshots




                         35
Download this presentation
  http://slideshare.net/denpong
Contacts
  email:    denpong@kku.ac.th
  Twitter:  @denpong
  Facebook: denpong               36

More Related Content

PDF
Efficient Pagination Using MySQL
PDF
45 ways to speed up firebird database
PPTX
Sql joins
PDF
[Pgday.Seoul 2020] SQL Tuning
PDF
MySQL InnoDB Cluster - Group Replication
PDF
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
PDF
B+Tree Indexes and InnoDB
PDF
Improve speed & performance of informix 11.xx part 1
Efficient Pagination Using MySQL
45 ways to speed up firebird database
Sql joins
[Pgday.Seoul 2020] SQL Tuning
MySQL InnoDB Cluster - Group Replication
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
B+Tree Indexes and InnoDB
Improve speed & performance of informix 11.xx part 1

What's hot (18)

PDF
Gpfs introandsetup
PPT
Single row functions
PDF
InnoDB MVCC Architecture (by 권건우)
PDF
Sap abap material
PPT
Ibm cognos10 bi_セルフスタディーキットのご紹介
PPTX
Garbage First Garbage Collector (G1 GC): Current and Future Adaptability and ...
PPT
MySQL源码分析.01.代码结构与基本流程
PPTX
Advanced MySql Data-at-Rest Encryption in Percona Server
PPT
Module pool programming
PDF
PostgreSQL Internals (1) for PostgreSQL 9.6 (English)
PDF
MySQL Server Settings Tuning
PPT
Ab1011 module pool programming
PDF
Deep dive into PostgreSQL statistics.
DOCX
MySQL_SQL_Tunning_v0.1.3.docx
PDF
Using ZFS file system with MySQL
PDF
Episode 2 DB2 pureScale Installation, Instance Management & Monitoring
PPTX
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...
PDF
Xdc command-to-print-job-output-and-syslog-from-sdsf
Gpfs introandsetup
Single row functions
InnoDB MVCC Architecture (by 권건우)
Sap abap material
Ibm cognos10 bi_セルフスタディーキットのご紹介
Garbage First Garbage Collector (G1 GC): Current and Future Adaptability and ...
MySQL源码分析.01.代码结构与基本流程
Advanced MySql Data-at-Rest Encryption in Percona Server
Module pool programming
PostgreSQL Internals (1) for PostgreSQL 9.6 (English)
MySQL Server Settings Tuning
Ab1011 module pool programming
Deep dive into PostgreSQL statistics.
MySQL_SQL_Tunning_v0.1.3.docx
Using ZFS file system with MySQL
Episode 2 DB2 pureScale Installation, Instance Management & Monitoring
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...
Xdc command-to-print-job-output-and-syslog-from-sdsf
Ad

Viewers also liked (20)

PDF
การเพิ่มประสิทธิภาพ Instance memory - Oracle 11G
 
DOC
บทที่ 2 (1)
PPT
Spat Db 3 Intro Sql
PPTX
ภาษา Sql
PDF
07 sql
PDF
การสร้างเอกสาร Rdfs ของ University Taxonomy และ การ Query โดยใช้ Sesame
PDF
Basic - Oracle Edition Based Redefinition Presentation
 
PDF
Web 2.0 สู่ Library 2.0
PDF
Oracle Database 11g Product Family
 
PDF
Unit1 1
PDF
วันที่3 opd@seasun
PDF
วันที่2 การบันทึกข้อมูล ncd เพื่อส่งออก 43 แฟ้ม
PDF
การบันทึกข้อมูล 43 แฟ้ม แฟ้ม 7 d
DOCX
การตรวจเช็คฐานข้อมูล Oracle v1 draft
 
PDF
ออราเคิล (Oracle) Statspack (ติดตั้งและใช้งานเบื้องต้น)
 
PPTX
EbookPictureFormat
PDF
Semantic web and library
PDF
1 system setting&กำหนดรหัสมาตรฐาน
PPTX
บทที่ 4
PDF
lesson3 JSP
การเพิ่มประสิทธิภาพ Instance memory - Oracle 11G
 
บทที่ 2 (1)
Spat Db 3 Intro Sql
ภาษา Sql
07 sql
การสร้างเอกสาร Rdfs ของ University Taxonomy และ การ Query โดยใช้ Sesame
Basic - Oracle Edition Based Redefinition Presentation
 
Web 2.0 สู่ Library 2.0
Oracle Database 11g Product Family
 
Unit1 1
วันที่3 opd@seasun
วันที่2 การบันทึกข้อมูล ncd เพื่อส่งออก 43 แฟ้ม
การบันทึกข้อมูล 43 แฟ้ม แฟ้ม 7 d
การตรวจเช็คฐานข้อมูล Oracle v1 draft
 
ออราเคิล (Oracle) Statspack (ติดตั้งและใช้งานเบื้องต้น)
 
EbookPictureFormat
Semantic web and library
1 system setting&กำหนดรหัสมาตรฐาน
บทที่ 4
lesson3 JSP
Ad

Similar to Database Tuning for e-Learning (20)

PDF
MySQL Multi-Master Replication Using Tungsten Replicator 2.0.5
PPT
PPT
Operating System Chapter 1
PPT
Lecture9
PPTX
Computer systemarchitecture
PDF
Managing Big Data with Apache Hadoop.pdf
PPTX
PDF
PPT
10 ca-mass-storage system structure (wichet p.'s conflicted copy 2012-12-17)
PDF
Hardware
 
DOC
บทที่ 2 (21 02-56) okรันเลขแล้ว(แก้เหมายเลขหน้าด้วย ตั้งแต่หน้า 9 เป็นต้นไป )...
PPT
Scalable Distributed Data Structures for Internet Construction
PDF
Kafka for developer
PDF
Ch10 web servers
PDF
คำศัพท์เกี่ยวกับคอมพิวเตอร์ที่น่าสนใจ
PDF
บทที่ 1
PDF
บทที่ 1 แนวคิดทั่วไปเกี่ยวกับฐานข้อมูล
PDF
บทที่ 1 แนวคิดทั่วไปเกี่ยวกับฐานข้อมูล
PPT
หน่วยประมวลผลของเครื่องคอมพิวเตอร์
PPT
หน่วยประมวลผลของเครื่องคอมพิวเตอร์
MySQL Multi-Master Replication Using Tungsten Replicator 2.0.5
Operating System Chapter 1
Lecture9
Computer systemarchitecture
Managing Big Data with Apache Hadoop.pdf
10 ca-mass-storage system structure (wichet p.'s conflicted copy 2012-12-17)
Hardware
 
บทที่ 2 (21 02-56) okรันเลขแล้ว(แก้เหมายเลขหน้าด้วย ตั้งแต่หน้า 9 เป็นต้นไป )...
Scalable Distributed Data Structures for Internet Construction
Kafka for developer
Ch10 web servers
คำศัพท์เกี่ยวกับคอมพิวเตอร์ที่น่าสนใจ
บทที่ 1
บทที่ 1 แนวคิดทั่วไปเกี่ยวกับฐานข้อมูล
บทที่ 1 แนวคิดทั่วไปเกี่ยวกับฐานข้อมูล
หน่วยประมวลผลของเครื่องคอมพิวเตอร์
หน่วยประมวลผลของเครื่องคอมพิวเตอร์

More from Denpong Soodphakdee (20)

PDF
Graduate Skills for Digital Age Employability
PDF
Smart Living, Learning, & Working @KKU
PDF
Balancing Graduate Skills for Digital Age Employability
PDF
Living, Learning, & Working Smart @KKU
PDF
New Media in Digital Age
PDF
21st century learning skills
PDF
ICT in Modern Education
PDF
New Learning Paradigm
PDF
Concept of e-Learning and its Applications
PDF
KKU General Education 3.0
PDF
ICT Administration in Modern Education Institute
PDF
Communication in Modern Organization
PDF
Social Medias in Library Service
PDF
Net Zero Energy Building @ Khon Kaen University
PDF
Higher Education for 21st Century Learners
PDF
Flipped Classroom at Khon Kaen University
PDF
Technology Skills Required to be a Success Secretary
PDF
Google Apps - KKU Experiences
PDF
Video the Major Player in OERs
PDF
Cloud Computing and Open Educational Resources
Graduate Skills for Digital Age Employability
Smart Living, Learning, & Working @KKU
Balancing Graduate Skills for Digital Age Employability
Living, Learning, & Working Smart @KKU
New Media in Digital Age
21st century learning skills
ICT in Modern Education
New Learning Paradigm
Concept of e-Learning and its Applications
KKU General Education 3.0
ICT Administration in Modern Education Institute
Communication in Modern Organization
Social Medias in Library Service
Net Zero Energy Building @ Khon Kaen University
Higher Education for 21st Century Learners
Flipped Classroom at Khon Kaen University
Technology Skills Required to be a Success Secretary
Google Apps - KKU Experiences
Video the Major Player in OERs
Cloud Computing and Open Educational Resources

Database Tuning for e-Learning

  • 1. Database Tuning and Caching MySQL + memcached ผศ.ดร.เด่นพงษ์ สุดภักดี ผู้ช่วยอธิการบดีฝ่ายวิชาการ และ ผู้อานวยการสานักนวัตกรรมการเรียนการสอน มหาวิทยาลัยขอนแก่น 1
  • 2. Outline • System performance • KKU e-Learning (MOODLE) • MySQL Tuning • Caching using memcached 2
  • 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
  • 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. 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. Average Load • 3,000 users-visits per day • 30,000 page-views per day 7
  • 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. MySQL • ปัจจุบันเวอร์ชั่น 5.1.45 (ณ วันที่ 17 มีนาคม 2553) • http://www.mysql.com/downloads/mysql 9
  • 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. Database Tuning : MySQL • การตั้งค่า my.cnf • ตรวจสอบตัวแปรระบบ – mysql> SHOW VARIABLES; – mysql> SHOW STATUS; • ผู้ใช้ส่วนใหญ่จะไม่ปรับแต่ง โดยอาจเข้าใจว่าค่า default เป็นค่าที่ดีทสุดอยู่แล้ว ี่ • ค่า default บางค่าทาให้ระบบทางานช้า • การทางานของ MyISAM และ InnoDB ไม่เหมือนกัน • MySQL มีค่าที่สามารถปรับแต่งได้จานวนมาก 11
  • 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. key_buffer_size (MyISAM) • ใช้สาหรับ cache index สาหรับ data จะ cache โดย OS • ค่าควรอยู่ที่ประมาณ 30-40% ของหน่วยความจา • ควรตรวจสอบขนาด key_buffer_size ที่ใช้งานจริง เพื่อให้สามารถตั้งค่าให้เหมาะสม ไม่น้อยและไม่มาก จนเกินไป • แม้ว่ามี Table ไม่มาก ก็ควรจะตั้งค่าไว้อย่างน้อย 16-32 MB สาหรับ indexes ของ temporary table 13
  • 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. innodb_additional_mem_pool_size • ค่านี้อาจไม่มีผลต่อสมรรถนะมากนัก โดยเฉพาะ อย่างยิ่งสาหรับความสามารถของหน่วยความจาใน ปัจจุบัน • อย่างน้อยควรตั้งค่าไว้ประมาณ 20MB (หรือ มากกว่า) สาหรับการใช้งานทั่วๆ ไปของ MySQL ยามจาเป็น 15
  • 16. innodb_log_file_size • เป็นค่าที่มีความสาคัญมาก โดยเฉพาะอย่างยิ่งใน ระบบที่มีการเขียนข้อมูลจานวนมาก • ขนาด log file ที่ใหญ่ จะทาให้สมรรถนะการทางานดี แต่จะส่งผลต่อเวลาในการอ่านไฟล์ภายหลัง • โดยปกติจะควรตั้งค่าประมาณ 64MB – 512MB 16
  • 17. innodb_log_buffer_size • ค่า default มักจะใช้ได้ดี ในกรณีที่มีการเขียนข้อมูล ปานกลาง และมีการเรียกใช้เป็นระยะสั้นๆ • ไม่จาเป็นต้องมีการตังค่าสูงจนเกินไป เนื่องจากจะมี ้ การ flush ทุกๆ 1 วินาทีอยู่แล้ว การตั้งสูงเกินไปจะ เปลืองหน่วยความจาโดยเปล่าประโยชน์ • โดยทั่วไป ขนาด 8MB - 16MB เพียงพอต่อการใช้ งาน • ในระบบขนาดเล็กสามารถตั้งค่าที่น้อยกว่านี้ได้ 17
  • 18. innodb_flush_log_at_trx_commit • ค่า default คือ 1 จะทาให้มีการ flush log ไปเก็บไว้ ในฮาร์ดดิสในทุกๆ transaction ซึ่งจะทาให้ต้องเขียน ฮาร์ดดิสบ่อย ทาให้การทางานช้า • ในระบบที่มีการเปลี่ยนการใช้งานจาก MyISAM เช่น MOODLE ควรตั้งค่าเป็น 2 ซึ่งจะทาให้ทาการ flush log ไปไว้ที่ OS cache ก่อน แล้วจะเขียนลงฮาร์ดดิส ทุกๆ 1-2 วินาที 18
  • 19. table_cache • ในการเรียกใช้ table จาเป็นต้องเขียนไฟล์เพื่อใช้ ทราบว่ามีการเปิดใช้งาน table ใช้งานนั้นอยู่แล้ว การต้องเรียกเปิดบ่อยๆ ทาให้สมรรถนะการทางาน ไม่ดี • ขนาดของ table cache ควรจะมากพอในการเกิบค่า ตารางที่เปิดใช้งานไว้ได้ • การตั้งค่าไว้ประมาณ 1024 เพียงพอสาหรับระบบที่ มี ประมาณ 200 – 400 ตาราง หรืออาจตั้งเพิ่มได้ กรณีมีตารางจานวนมาก 19
  • 20. query_cache_size • ในระบบที่มีการอ่าน database มากและไม่มีระบบ cache ของโปรแกรม การตั้งค่านี้จะทาให้ระบบ ทางานเร็วขึ้น • การตั้งค่าที่มากเกินไปจะทาให้ระบบทางานช้าลงได้ • การตั้งค่าระหว่าง 32M - 512M เป็นค่าที่เหมาะสม 20
  • 21. สิบตัวแปรที่ต้องติดตามดู 1. Threads_connected – แสดงจานวน client ทั้งหมดที่กาลังติดต่อกับ server – เป็นข้อมูล real-time ทีช่วยในการวิเคราะห์จานวนผู้ใช้ ่ และสามารถตรวจสอบเวลาทีเหมาะสมในการ restart ่ ระบบได้ 21
  • 22. สิบตัวแปรที่ต้องติดตามดู 2. Created_tmp_disk_tables – แสดงจานวน temporary table ทีถูกสร้างขึ้นใน ่ ฮาร์ดดิสก์แทนทีจะเป็นในหน่วยความจา ่ – การใช้งาน table ที่เขียนไว้ในฮาร์ดดิสก์จะช้ากว่า table ในหน่วยความจา ดังนั้นการใช้ query CREATE TEMPORARY TABLE จะช้าโดยเฉพาะอย่างยิ่งหากค่านี้ สูง 22
  • 23. สิบตัวแปรที่ต้องติดตามดู 3. Handler_read_first – แสดงจานวนครั้งที่ตัวจัดการตาราง (table handler) อ่านค่าแถวแรกของ index ในตาราง – การอ่าน แถวแรกของ index นั้นหมายถึงการอ่าน scan index ทั้งตาราง ซึ่งแสดงว่าตาราง index ไว้ไม่ดี 23
  • 24. สิบตัวแปรที่ต้องติดตามดู 4. Innodb_buffer_pool_wait_free – แสดงจานวนครั้งที่ MySQL รอให้มีการ flush หน่วยความจา – ถ้าค่านี้มีค่าสูง อาจจะเกิดจากการตั้งค่า buffer ของ หน่วยความจาไว้ไม่เหมาะสม 24
  • 25. สิบตัวแปรที่ต้องติดตามดู 5. Key_reads – แสดงจานวนครั้งที่ filesystem เรียกใช้ MySQL เพื่ออ่าน index – การที่ filesystem อ่าน index ของฐานข้อมูลจะทาให้ สมรรถนะของ query ไม่ดี การที่คานี้สูงแสดงว่าค่า key ่ cache ไม่เหมาะสม 25
  • 26. สิบตัวแปรที่ต้องติดตามดู 6. Max_used_connections – แสดงจานวนการเชื่อมต่อที่มากที่สุดนับตั้งแต่ MySQL สตาร์ทครั้งล่าสุด – ใช้สาหรับวิเคราะห์การเชื่อมต่อเพื่อให้สามารถปรับปรุง server ให้รองรับการใช้งานได้อย่างเหมาะสม 26
  • 27. สิบตัวแปรที่ต้องติดตามดู 7. Open_tables – แสดจานวน Table ที่เปิดอยู่ ณ ขณะนั้น – หากค่านี้มีค่าต่า ในขณะที่ค่า table_cache สูงจะทาให้ สามารถลด cache ได้ ในทางกลับกันค่านี้สูงแต่ table_cache ต่า ควรเพิ่มค่า cache ได้ 27
  • 28. สิบตัวแปรที่ต้องติดตามดู 8. Select_full_join – แสดงจานวนของ full joins ที่ MySQL ได้ทาผ่านมา – หากค่านี้สูงแสดงว่ามีการเรียกใช้ full table joins ซึ่ง สมรรถนะไม่ดี ควรแก้ไขให้ใช้ index มากขึ้น 28
  • 29. สิบตัวแปรที่ต้องติดตามดู 9. Slow_queries – แสดงจานวน query ทีใช้เวลาในการประมวลผลนาน ่ กว่าปกติ – แสดงว่าการเขียนโปรแกรมเรียก query ไม่ดีจึงสามารถ หาแนวทางในการปรับเปลี่ยน query ได้ 29
  • 30. สิบตัวแปรที่ต้องติดตามดู 10. Uptime – แสดงจานวนวินาทีที่ MySQL สตาร์ทครั้งล่าสุด – หากค่านี้ต่าแสดงว่ามีการ restart MySQL บ่อย ซึ่งเป็น โอกาสในการทางานของระบบทีไม่ดี ่ 30
  • 31. memcached memcached เป็นโปรแกรมที่ มีสมรรถนะสูง ทาหน้าที่ กระจายค่าต่างๆ ไว้ใน หน่วยความจาร่วม ซึ่งจะทาให้ สามารถเรียกใช้ dynamic web เพื่อให้ลดภาระของ database ลงได้ (http://memcached.org/) 31
  • 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. MySQL Monitoring and Screenshots • MySQL Enterprise Monitoring (Subscription) • Cacti • MONyog • phpMyAdmin 34
  • 36. Download this presentation http://slideshare.net/denpong Contacts email: [email protected] Twitter: @denpong Facebook: denpong 36