SlideShare uma empresa Scribd logo
1 de 61
Baixar para ler offline
10x Performance Improvements
                                 in 10 steps
                               A Case Study
                                     Ronald Bradford
                                http://ronaldbradford.com

                                   FOSDEM - 2010.02
Sunday, February 7, 2010
Application
              Typical Web 2.0 social media site (Europe based)

              • Users - Visitors, Free Members, Paying Members
              • Friends
              • User Content - Video, Pictures
              • Forums, Chat, Email

Sunday, February 7, 2010
Server Environment
                 • 1 Master Database Server (MySQL 5.0.x)
                 • 3 Slave Database Servers (MySQL 5.0.x)
                 • 5 Web Servers (Apache/PHP)
                 • 1 Static Content Server (Nginx)
                 • 1 Mail Server

Sunday, February 7, 2010
Step 1


                    Monitor, Monitor, Monitor



Sunday, February 7, 2010
1. Monitor, Monitor, Monitor
              • What’s happened?
              • What’s happening now?
              • What’s going to happen?

                           Past, Present, Future

Sunday, February 7, 2010
1. Monitor, Monitor, Monitor
                                                                            Action 1
              Monitoring Software

              • Installation of Cacti http://www.cacti.net/
                                         -



              • Installation of MySQL Cacti Templates       -
                      http://code.google.com/p/mysql-cacti-templates/

              • (Optional) Installation of MONyog     -   http://www.webyog.com/




Sunday, February 7, 2010
1. Monitor, Monitor, Monitor
                                                          Action 2
              Custom Dashboard

              • Most important - The state of NOW
              • Single Page Alerts - GREEN YELLOW   RED




Sunday, February 7, 2010
Screen print goes here




                                                    Dashboard
                                                     Example
Sunday, February 7, 2010
1. Monitor, Monitor, Monitor
                                                                Action 3
              Alerting Software

              • Installation of Nagios http://www.nagios.org/
                                     -



              • MONyog also has some DB specific alerts




Sunday, February 7, 2010
1. Monitor, Monitor, Monitor
                                             Action 4
              Application Metrics

              • Total page generation time




Sunday, February 7, 2010
Step 2


                             Identify problem SQL



Sunday, February 7, 2010
2. Identify Problem SQL
              Identify SQL Statements

              • Slow Query Log
              • Processlist
              • Binary Log
              • Status Statistics

Sunday, February 7, 2010
2. Identify Problem SQL
              Problems

              • Sampling
              • Granularity
              Solution

              • tcpdump + mk-query-digest

Sunday, February 7, 2010
2. Identify Problem SQL
                                                                              Action 1
              • Install maatkit - http://www.maatkit.org
              • Install OS tcpdump (if necessary)
              • Get sudo access to tcpdump

              http://ronaldbradford.com/blog/take-a-look-at-mk-query-digest-2009-10-08/




Sunday, February 7, 2010
# Rank Query ID           Response time    Calls    R/Call       Item
         # ==== ================== ================ ======= ==========    ====
         #    1 0xB8CE56EEC1A2FBA0    14.0830 26.8%       78   0.180552   SELECT   c u
         #    2 0x195A4D6CB65C4C53     6.7800 12.9%     257    0.026381   SELECT   u
         #    3 0xCD107808735A693C     3.7355 7.1%         8   0.466943   SELECT   c u
         #    4 0xED55DD72AB650884     3.6225 6.9%        77   0.047046   SELECT   u
         #    5 0xE817EFFFF5F6FFFD     3.3616 6.4%      147    0.022868   SELECT   UNION c
         #    6 0x15FD03E7DB5F1B75     2.8842 5.5%         2   1.442116   SELECT   c u
         #    7 0x83027CD415FADB8B     2.8676 5.5%        70   0.040965   SELECT   c u
         #    8 0x1577013C472FD0C6     1.8703 3.6%        61   0.030660   SELECT   c
         #    9 0xE565A2ED3959DF4E     1.3962 2.7%         5   0.279241   SELECT   c t u
         #   10 0xE15AE2542D98CE76     1.3638 2.6%         6   0.227306   SELECT   c
         #   11 0x8A94BB83CB730494     1.2523 2.4%      148    0.008461   SELECT   hv u
         #   12 0x959C3B3A967928A6     1.1663 2.2%         5   0.233261   SELECT   c t u
         #   13 0xBC6E3F701328E95E     1.1122 2.1%         4   0.278044   SELECT   c t u




Sunday, February 7, 2010
# Query 2: 4.94 QPS, 0.13x concurrency, ID 0x195A4D6CB65C4C53 at byte 4851683
    # This item is included in the report because it matches --limit.
    #              pct   total     min     max     avg     95% stddev median
    # Count          3      257
    # Exec time     10       7s   35us   492ms    26ms   189ms    78ms    332us
    # Time range 2009-10-16 11:48:55.896978 to 2009-10-16 11:49:47.760802
    # bytes          2 10.75k       41      43   42.85   42.48    0.67    42.48
    # Errors                  1   none
    # Rows affe      0        0       0      0       0       0        0       0
    # Warning c      0        0       0      0       0       0        0       0
    # Query_time distribution
    #   1us
    # 10us #
    # 100us ################################################################
    #   1ms ####
    # 10ms ###
    # 100ms ########
    #    1s
    # 10s+
    # Tables
    #    SHOW TABLE STATUS LIKE 'u'G
    #    SHOW CREATE TABLE `u`G
    # EXPLAIN
    SELECT ... FROM u ...G
Sunday, February 7, 2010
2. Identify Problem SQL
                                                        Action 2
              • Wrappers to capture SQL
              • Re-run on single/multiple servers
                • e.g. Different slave configurations




Sunday, February 7, 2010
2. Identify Problem SQL
                                                                  Tip

              • Enable General Query Log in Development/Testing
              • Great for testing Batch Jobs




Sunday, February 7, 2010
2. Identify Problem SQL
                                                                     Action 3
              Application Logic

              • Show total master/slave SQL statements executed
              • Show all SQL with execution time (admin user only)
                                                                      Tip

              • Have abstracted class/method to execute ALL SQL

Sunday, February 7, 2010
Step 3


                             Analyze problem SQL



Sunday, February 7, 2010
3. Analyze Problem SQL
              • Query Execution Plan (QEP)
                • EXPLAIN [EXTENDED] SELECT ...
              • Table/Index Structure
                • SHOW CREATE TABLE <tablename>
              • Table Statistics
                • SHOW TABLE STATUS <tablename>
Sunday, February 7, 2010
3. Analyze Problem SQL                                Good

              mysql> EXPLAIN SELECT id FROM example_table WHERE id=1G

              *************************** 1. row ***************************
                         id: 1
                select_type: SIMPLE
                      table: example_table
                       type: const
              possible_keys: PRIMARY
                        key: PRIMARY
                    key_len: 4
                        ref: const
                       rows: 1
                      Extra: Using index


Sunday, February 7, 2010
3. Analyze Problem SQL                                Bad

                     mysql> EXPLAIN SELECT * FROM example_tableG

              *************************** 1. row ***************************
                         id: 1
                select_type: SIMPLE
                      table: example_table
                       type: ALL
              possible_keys: NULL
                        key: NULL
                    key_len: NULL
                        ref: NULL
                       rows: 59
                      Extra:


Sunday, February 7, 2010
3. Analyze Problem SQL                       Tip

              • SQL Commenting
                 • Identify batch statement SQL
                 • Identify cached SQL

                      SELECT /* Cache: 10m */ ....
                      SELECT /* Batch: EOD report */ ...
                      SELECT /* Func: 123 */   ....

Sunday, February 7, 2010
Step 4


                               The Art of Indexes



Sunday, February 7, 2010
4. The Art of Indexes
              • Different Types
                • Column
                • Concatenated
                • Covering
                • Partial
              http://ronaldbradford.com/blog/understanding-different-mysql-index-implementations-2009-07-22/

Sunday, February 7, 2010
4. The Art of Indexes
                                      Action 1
              • EXPLAIN Output
                • Possible keys
                • Key used
                • Key length
                • Using Index

Sunday, February 7, 2010
4. The Art of Indexes                     Tip

              • Generally only 1 index used per table
              • Make column NOT NULL when possible
              • Statistics affects indexes
              • Storage engines affect operations


Sunday, February 7, 2010
Before (7.88 seconds)                  After (0.04 seconds)
    *************************** 2. row **   *************************** 2. row ***
               id: 2                                   id: 2
      select_type: DEPENDENT SUBQUERY         select_type: DEPENDENT SUBQUERY
            table: h_p                              table: h_p
             type: ALL                               type: index_subquery
    possible_keys: NULL                     possible_keys: UId
              key: NULL                               key: UId
          key_len: NULL                           key_len: 4
              ref: NULL                               ref: func
             rows: 33789                             rows: 2
            Extra: Using where                      Extra: Using index



                           ALTER TABLE h_p ADD INDEX (UId);


Sunday, February 7, 2010
mysql> explain SELECT UID, FUID, COUNT(*) AS Count FROM f
                                      GROUP BY UID, FUID ORDER BY Count DESC LIMIT 2000G
                       *************************** 1. row ***************************
                                  id: 1
                         select_type: SIMPLE
                               table: f
                                type: index
                       possible_keys: NULL
                                 key: UID
                             key_len: 8
                                 ref: NULL
                                rows: 2151326
                               Extra: Using index; Using temporary; Using filesort



                    ALTER TABLE f DROP INDEX UID,
                    ADD INDEX (UID,FUID)

Sunday, February 7, 2010
4. The Art of Indexes



                           Indexes can hurt performance


Sunday, February 7, 2010
Step 5


                            Offloading Master Load



Sunday, February 7, 2010
5. Offloading Master Load
              • Identify statements for READ ONLY slave(s)
                • e.g. Long running batch statements



                     Single point v scalable solution

Sunday, February 7, 2010
Step 6


                                    Improving SQL



Sunday, February 7, 2010
6. Improving SQL
              • Poor SQL Examples
                 • ORDER BY RAND()
                 • SELECT *
                 • Lookup joins
                 • ORDER BY
                           The database is best for storing
                            and retrieving data not logic
Sunday, February 7, 2010
Step 7


                                Storage Engines



Sunday, February 7, 2010
7. Storage Engines
              • MyISAM is default
              • Table level locking
                • Concurrent SELECT statements
                • INSERT/UPDATE/DELETE blocked by long running SELECT
                • All SELECT’s blocked by INSERT/UPDATE/DELETE
              • Supports FULLTEXT
Sunday, February 7, 2010
7. Storage Engines
              • InnoDB supports transactions
              • Row level locking with MVCC
              • Does not support FULLTEXT
              • Different memory management
              • Different system variables

Sunday, February 7, 2010
7. Storage Engines
              • There are other storage engines
                • Memory
                • Archive
                • Blackhole
                • Third party

Sunday, February 7, 2010
7. Storage Engines
              Using Multiple Engines

              • Different memory management
              • Different system variables
              • Different monitoring
              • Affects backup strategy

Sunday, February 7, 2010
7. Storage Engines
                                                   Action 1
              • Configure InnoDB correctly
                • innodb_buffer_pool_size
                • innodb_log_file_size
                • innodb_flush_log_at_trx_commit



Sunday, February 7, 2010
7. Storage Engines
                                                   Action 2
              • Converted the two primary tables
                 • Users
                 • Content

                            Locking eliminated

Sunday, February 7, 2010
Step 8


                                    Caching



Sunday, February 7, 2010
8. Caching
                                                                Action 1
              • Memcache is your friend http://memcached.org/
                                       -



                • Cache query results
                • Cache lookup data (eliminate joins)
                • Cache aggregated per user information
              • Caching Page Content
                • Top rated (e.g. for 5 minutes)
Sunday, February 7, 2010
8. Caching
                                                            Action 2
              • MySQL has a Query Cache
                • Determine the real benefit
                • Turn on or off dynamically
                • SET GLOBAL query_cache_size   = 1024*1024*32;




Sunday, February 7, 2010
8. Caching                                   Tip




                              The best performance
                             improvement for an SQL
                           statement is to eliminate it.


Sunday, February 7, 2010
Step 9


                                    Sharding



Sunday, February 7, 2010
9. Sharding
              • Application level horizontal and vertical partitioning
              • Vertical Partitioning
                • Grouping like structures together (e.g. logging, forums)
              • Horizontal Partitioning
                • Affecting a smaller set of users (i.e. not 100%)

Sunday, February 7, 2010
9. Sharding
                                                                Action 1
              • Separate Logging
                 • Reduced replication load on primary server




Sunday, February 7, 2010
Step 10


                            Database Management



Sunday, February 7, 2010
10. Database Management
              Database Maintenance

              • Adding indexes (e.g. ALTER)
              • OPTIMIZE TABLE
              • Archive/purging data (e.g DELETE)

                           Blocking Operations
Sunday, February 7, 2010
10. Database Maintenance
                                                        Action 1
              • Automate slave inclusion/exclusion
              • Ability to apply DB changes to slaves
              • Master still a problem




Sunday, February 7, 2010
10. Database Maintenance
                                                           Action 2
              • Install Fail-Over Master Server
                • Slave + Master features
                • Master extra configuration
              • Scripts to switch slaves
              • Scripts to enable/disable Master(s)
              • Scripts to change application connection
Sunday, February 7, 2010
10. Database Maintenance

                              Higher Availability
                                      &
                           Testing Disaster Recovery

Sunday, February 7, 2010
Bonus




                           Front End Improvements



Sunday, February 7, 2010
11. Front End Improvements
              • Know your total website load time http://getfirebug.com/
                                                 -



                • How much time is actually database related?
              • Reduce HTML page size - 15% improvement
                • Remove full URL’s, inline css styles
              • Reduce/combine css & js files
              • Identify blocking elements (e.g. js)
Sunday, February 7, 2010
11. Front End Improvements
              • Split static content to different ServerName
              • Spread static content over multiple ServerNames (e.g. 3)
              • Sprites - Combining lightweight images http://spriteme.org/
                                                      -



              • Cookie-less domain name for static content


Sunday, February 7, 2010
Conclusion



Sunday, February 7, 2010
Before
                 • Users experienced slow or unreliable load times
                 • Management could observe, but no quantifiable details
                 • Concern over load for increased growth
                 • Release of some new features on hold


Sunday, February 7, 2010
Now
                 • Users experienced consistent load times (~60ms)
                  • Quantifiable and visible real-time results
                 • Far greater load now supported (Clients + DB)
                 • Better testability and verification for scaling
                 • New features can be deployed

Sunday, February 7, 2010
Consulting Available Now


                           http://ronaldbradford.com



Sunday, February 7, 2010

Mais conteúdo relacionado

Mais procurados

MySQL Performance schema missing_manual_flossuk
MySQL Performance schema missing_manual_flossukMySQL Performance schema missing_manual_flossuk
MySQL Performance schema missing_manual_flossukValeriy Kravchuk
 
MySQL Replication Update - DEbconf 2020 presentation
MySQL Replication Update - DEbconf 2020 presentationMySQL Replication Update - DEbconf 2020 presentation
MySQL Replication Update - DEbconf 2020 presentationDave Stokes
 
Performance schema in_my_sql_5.6_pluk2013
Performance schema in_my_sql_5.6_pluk2013Performance schema in_my_sql_5.6_pluk2013
Performance schema in_my_sql_5.6_pluk2013Valeriy Kravchuk
 
UKOUG 2011: Practical MySQL Tuning
UKOUG 2011: Practical MySQL TuningUKOUG 2011: Practical MySQL Tuning
UKOUG 2011: Practical MySQL TuningFromDual GmbH
 
Perf Tuning Best Practices
Perf Tuning Best PracticesPerf Tuning Best Practices
Perf Tuning Best Practicesguest01bbdd
 
Performance Schema for MySQL Troubleshooting
 Performance Schema for MySQL Troubleshooting Performance Schema for MySQL Troubleshooting
Performance Schema for MySQL TroubleshootingSveta Smirnova
 
Mini Session - Using GDB for Profiling
Mini Session - Using GDB for ProfilingMini Session - Using GDB for Profiling
Mini Session - Using GDB for ProfilingEnkitec
 
Troubleshooting MySQL Performance
Troubleshooting MySQL PerformanceTroubleshooting MySQL Performance
Troubleshooting MySQL PerformanceSveta Smirnova
 
Flexviews materialized views for my sql
Flexviews materialized views for my sqlFlexviews materialized views for my sql
Flexviews materialized views for my sqlJustin Swanhart
 
MySQL 8.0 Operational Changes
MySQL 8.0 Operational ChangesMySQL 8.0 Operational Changes
MySQL 8.0 Operational ChangesDave Stokes
 
In Search of Plan Stability - Part 1
In Search of Plan Stability - Part 1In Search of Plan Stability - Part 1
In Search of Plan Stability - Part 1Enkitec
 
Developing Information Schema Plugins
Developing Information Schema PluginsDeveloping Information Schema Plugins
Developing Information Schema PluginsMark Leith
 
MySQL 8.0 New Features -- September 27th presentation for Open Source Summit
MySQL 8.0 New Features -- September 27th presentation for Open Source SummitMySQL 8.0 New Features -- September 27th presentation for Open Source Summit
MySQL 8.0 New Features -- September 27th presentation for Open Source SummitDave Stokes
 
Second Step to the NoSQL Side: MySQL JSON Functions
Second Step to the NoSQL Side: MySQL JSON FunctionsSecond Step to the NoSQL Side: MySQL JSON Functions
Second Step to the NoSQL Side: MySQL JSON FunctionsSveta Smirnova
 
Highload Perf Tuning
Highload Perf TuningHighload Perf Tuning
Highload Perf TuningHighLoad2009
 
Open Source World June '21 -- JSON Within a Relational Database
Open Source World June '21 -- JSON Within a Relational DatabaseOpen Source World June '21 -- JSON Within a Relational Database
Open Source World June '21 -- JSON Within a Relational DatabaseDave Stokes
 
database-querry-student-note
database-querry-student-notedatabase-querry-student-note
database-querry-student-noteLeerpiny Makouach
 
MySQL8.0.22リリースノートをみてわいわい言う勉強会
MySQL8.0.22リリースノートをみてわいわい言う勉強会 MySQL8.0.22リリースノートをみてわいわい言う勉強会
MySQL8.0.22リリースノートをみてわいわい言う勉強会 sakaik
 

Mais procurados (20)

My sql tutorial-oscon-2012
My sql tutorial-oscon-2012My sql tutorial-oscon-2012
My sql tutorial-oscon-2012
 
Optimizing MySQL
Optimizing MySQLOptimizing MySQL
Optimizing MySQL
 
MySQL Performance schema missing_manual_flossuk
MySQL Performance schema missing_manual_flossukMySQL Performance schema missing_manual_flossuk
MySQL Performance schema missing_manual_flossuk
 
MySQL Replication Update - DEbconf 2020 presentation
MySQL Replication Update - DEbconf 2020 presentationMySQL Replication Update - DEbconf 2020 presentation
MySQL Replication Update - DEbconf 2020 presentation
 
Performance schema in_my_sql_5.6_pluk2013
Performance schema in_my_sql_5.6_pluk2013Performance schema in_my_sql_5.6_pluk2013
Performance schema in_my_sql_5.6_pluk2013
 
UKOUG 2011: Practical MySQL Tuning
UKOUG 2011: Practical MySQL TuningUKOUG 2011: Practical MySQL Tuning
UKOUG 2011: Practical MySQL Tuning
 
Perf Tuning Best Practices
Perf Tuning Best PracticesPerf Tuning Best Practices
Perf Tuning Best Practices
 
Performance Schema for MySQL Troubleshooting
 Performance Schema for MySQL Troubleshooting Performance Schema for MySQL Troubleshooting
Performance Schema for MySQL Troubleshooting
 
Mini Session - Using GDB for Profiling
Mini Session - Using GDB for ProfilingMini Session - Using GDB for Profiling
Mini Session - Using GDB for Profiling
 
Troubleshooting MySQL Performance
Troubleshooting MySQL PerformanceTroubleshooting MySQL Performance
Troubleshooting MySQL Performance
 
Flexviews materialized views for my sql
Flexviews materialized views for my sqlFlexviews materialized views for my sql
Flexviews materialized views for my sql
 
MySQL 8.0 Operational Changes
MySQL 8.0 Operational ChangesMySQL 8.0 Operational Changes
MySQL 8.0 Operational Changes
 
In Search of Plan Stability - Part 1
In Search of Plan Stability - Part 1In Search of Plan Stability - Part 1
In Search of Plan Stability - Part 1
 
Developing Information Schema Plugins
Developing Information Schema PluginsDeveloping Information Schema Plugins
Developing Information Schema Plugins
 
MySQL 8.0 New Features -- September 27th presentation for Open Source Summit
MySQL 8.0 New Features -- September 27th presentation for Open Source SummitMySQL 8.0 New Features -- September 27th presentation for Open Source Summit
MySQL 8.0 New Features -- September 27th presentation for Open Source Summit
 
Second Step to the NoSQL Side: MySQL JSON Functions
Second Step to the NoSQL Side: MySQL JSON FunctionsSecond Step to the NoSQL Side: MySQL JSON Functions
Second Step to the NoSQL Side: MySQL JSON Functions
 
Highload Perf Tuning
Highload Perf TuningHighload Perf Tuning
Highload Perf Tuning
 
Open Source World June '21 -- JSON Within a Relational Database
Open Source World June '21 -- JSON Within a Relational DatabaseOpen Source World June '21 -- JSON Within a Relational Database
Open Source World June '21 -- JSON Within a Relational Database
 
database-querry-student-note
database-querry-student-notedatabase-querry-student-note
database-querry-student-note
 
MySQL8.0.22リリースノートをみてわいわい言う勉強会
MySQL8.0.22リリースノートをみてわいわい言う勉強会 MySQL8.0.22リリースノートをみてわいわい言う勉強会
MySQL8.0.22リリースノートをみてわいわい言う勉強会
 

Destaque

Using Apache Spark and MySQL for Data Analysis
Using Apache Spark and MySQL for Data AnalysisUsing Apache Spark and MySQL for Data Analysis
Using Apache Spark and MySQL for Data AnalysisSveta Smirnova
 
Capturing, Analyzing and Optimizing MySQL
Capturing, Analyzing and Optimizing MySQLCapturing, Analyzing and Optimizing MySQL
Capturing, Analyzing and Optimizing MySQLRonald Bradford
 
淘宝数据库架构演进历程
淘宝数据库架构演进历程淘宝数据库架构演进历程
淘宝数据库架构演进历程zhaolinjnu
 
MySQL High Availability and Disaster Recovery with Continuent, a VMware company
MySQL High Availability and Disaster Recovery with Continuent, a VMware companyMySQL High Availability and Disaster Recovery with Continuent, a VMware company
MySQL High Availability and Disaster Recovery with Continuent, a VMware companyContinuent
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхSveta Smirnova
 
MySQL InnoDB 源码实现分析(一)
MySQL InnoDB 源码实现分析(一)MySQL InnoDB 源码实现分析(一)
MySQL InnoDB 源码实现分析(一)frogd
 
MySQL High Availability Solutions
MySQL High Availability SolutionsMySQL High Availability Solutions
MySQL High Availability SolutionsLenz Grimmer
 
Mysql参数-GDB
Mysql参数-GDBMysql参数-GDB
Mysql参数-GDBzhaolinjnu
 
MySQL InnoDB Cluster - A complete High Availability solution for MySQL
MySQL InnoDB Cluster - A complete High Availability solution for MySQLMySQL InnoDB Cluster - A complete High Availability solution for MySQL
MySQL InnoDB Cluster - A complete High Availability solution for MySQLOlivier DASINI
 
MySQL High Availability with Group Replication
MySQL High Availability with Group ReplicationMySQL High Availability with Group Replication
MySQL High Availability with Group ReplicationNuno Carvalho
 
MySQL Replication Performance Tuning for Fun and Profit!
MySQL Replication Performance Tuning for Fun and Profit!MySQL Replication Performance Tuning for Fun and Profit!
MySQL Replication Performance Tuning for Fun and Profit!Vitor Oliveira
 
MySQL Group Replication - HandsOn Tutorial
MySQL Group Replication - HandsOn TutorialMySQL Group Replication - HandsOn Tutorial
MySQL Group Replication - HandsOn TutorialKenny Gryp
 
MySQL innodb cluster and Group Replication in a nutshell - hands-on tutorial ...
MySQL innodb cluster and Group Replication in a nutshell - hands-on tutorial ...MySQL innodb cluster and Group Replication in a nutshell - hands-on tutorial ...
MySQL innodb cluster and Group Replication in a nutshell - hands-on tutorial ...Frederic Descamps
 
The nightmare of locking, blocking and isolation levels!
The nightmare of locking, blocking and isolation levels!The nightmare of locking, blocking and isolation levels!
The nightmare of locking, blocking and isolation levels!Boris Hristov
 
Mastering InnoDB Diagnostics
Mastering InnoDB DiagnosticsMastering InnoDB Diagnostics
Mastering InnoDB Diagnosticsguest8212a5
 
Mysql high availability and scalability
Mysql high availability and scalabilityMysql high availability and scalability
Mysql high availability and scalabilityyin gong
 

Destaque (20)

Using Apache Spark and MySQL for Data Analysis
Using Apache Spark and MySQL for Data AnalysisUsing Apache Spark and MySQL for Data Analysis
Using Apache Spark and MySQL for Data Analysis
 
Mysql For Developers
Mysql For DevelopersMysql For Developers
Mysql For Developers
 
Capturing, Analyzing and Optimizing MySQL
Capturing, Analyzing and Optimizing MySQLCapturing, Analyzing and Optimizing MySQL
Capturing, Analyzing and Optimizing MySQL
 
淘宝数据库架构演进历程
淘宝数据库架构演进历程淘宝数据库架构演进历程
淘宝数据库架构演进历程
 
Load Data Fast!
Load Data Fast!Load Data Fast!
Load Data Fast!
 
SQL Outer Joins for Fun and Profit
SQL Outer Joins for Fun and ProfitSQL Outer Joins for Fun and Profit
SQL Outer Joins for Fun and Profit
 
MySQL High Availability and Disaster Recovery with Continuent, a VMware company
MySQL High Availability and Disaster Recovery with Continuent, a VMware companyMySQL High Availability and Disaster Recovery with Continuent, a VMware company
MySQL High Availability and Disaster Recovery with Continuent, a VMware company
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потеряхМониторинг и отладка MySQL: максимум информации при минимальных потерях
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
 
MySQL InnoDB 源码实现分析(一)
MySQL InnoDB 源码实现分析(一)MySQL InnoDB 源码实现分析(一)
MySQL InnoDB 源码实现分析(一)
 
MySQL High Availability Solutions
MySQL High Availability SolutionsMySQL High Availability Solutions
MySQL High Availability Solutions
 
Mysql参数-GDB
Mysql参数-GDBMysql参数-GDB
Mysql参数-GDB
 
MySQL InnoDB Cluster - A complete High Availability solution for MySQL
MySQL InnoDB Cluster - A complete High Availability solution for MySQLMySQL InnoDB Cluster - A complete High Availability solution for MySQL
MySQL InnoDB Cluster - A complete High Availability solution for MySQL
 
MySQL High Availability with Group Replication
MySQL High Availability with Group ReplicationMySQL High Availability with Group Replication
MySQL High Availability with Group Replication
 
MySQL Replication Performance Tuning for Fun and Profit!
MySQL Replication Performance Tuning for Fun and Profit!MySQL Replication Performance Tuning for Fun and Profit!
MySQL Replication Performance Tuning for Fun and Profit!
 
MySQL Group Replication - HandsOn Tutorial
MySQL Group Replication - HandsOn TutorialMySQL Group Replication - HandsOn Tutorial
MySQL Group Replication - HandsOn Tutorial
 
MySQL innodb cluster and Group Replication in a nutshell - hands-on tutorial ...
MySQL innodb cluster and Group Replication in a nutshell - hands-on tutorial ...MySQL innodb cluster and Group Replication in a nutshell - hands-on tutorial ...
MySQL innodb cluster and Group Replication in a nutshell - hands-on tutorial ...
 
The nightmare of locking, blocking and isolation levels!
The nightmare of locking, blocking and isolation levels!The nightmare of locking, blocking and isolation levels!
The nightmare of locking, blocking and isolation levels!
 
Mastering InnoDB Diagnostics
Mastering InnoDB DiagnosticsMastering InnoDB Diagnostics
Mastering InnoDB Diagnostics
 
MySQL aio
MySQL aioMySQL aio
MySQL aio
 
Mysql high availability and scalability
Mysql high availability and scalabilityMysql high availability and scalability
Mysql high availability and scalability
 

Semelhante a 10x Performance Improvements - A Case Study

10x improvement-mysql-100419105218-phpapp02
10x improvement-mysql-100419105218-phpapp0210x improvement-mysql-100419105218-phpapp02
10x improvement-mysql-100419105218-phpapp02promethius
 
AtlasCamp 2010: Implementing a custom JIRA UI using plugins 2.0 - Andreas Knecht
AtlasCamp 2010: Implementing a custom JIRA UI using plugins 2.0 - Andreas KnechtAtlasCamp 2010: Implementing a custom JIRA UI using plugins 2.0 - Andreas Knecht
AtlasCamp 2010: Implementing a custom JIRA UI using plugins 2.0 - Andreas KnechtAtlassian
 
Browser Fuzzing with a Twist (and a Shake) -- ZeroNights 2015
Browser Fuzzing with a Twist (and a Shake) -- ZeroNights 2015Browser Fuzzing with a Twist (and a Shake) -- ZeroNights 2015
Browser Fuzzing with a Twist (and a Shake) -- ZeroNights 2015Jeremy Brown
 
MySQL DW Breakfast
MySQL DW BreakfastMySQL DW Breakfast
MySQL DW BreakfastIvan Zoratti
 
What you wanted to know about MySQL, but could not find using inernal instrum...
What you wanted to know about MySQL, but could not find using inernal instrum...What you wanted to know about MySQL, but could not find using inernal instrum...
What you wanted to know about MySQL, but could not find using inernal instrum...Sveta Smirnova
 
State of the Framework Address: Recent Developments in the Metasploit Framework
State of the Framework Address: Recent Developments in the Metasploit FrameworkState of the Framework Address: Recent Developments in the Metasploit Framework
State of the Framework Address: Recent Developments in the Metasploit Frameworkegypt
 
Dev and Ops Collaboration and Awareness at Etsy and Flickr
Dev and Ops Collaboration and Awareness at Etsy and FlickrDev and Ops Collaboration and Awareness at Etsy and Flickr
Dev and Ops Collaboration and Awareness at Etsy and FlickrJohn Allspaw
 
WordCamp Fukuoka 2010
WordCamp Fukuoka 2010WordCamp Fukuoka 2010
WordCamp Fukuoka 2010Naoko Takano
 
Lecture 10 slides (february 4, 2010)
Lecture 10 slides (february 4, 2010)Lecture 10 slides (february 4, 2010)
Lecture 10 slides (february 4, 2010)Bruce Lee
 
State of jQuery June 2013 - Portland
State of jQuery June 2013 - PortlandState of jQuery June 2013 - Portland
State of jQuery June 2013 - Portlanddmethvin
 
jQuery Conference 2012 keynote
jQuery Conference 2012 keynotejQuery Conference 2012 keynote
jQuery Conference 2012 keynotedmethvin
 
Application Performance Troubleshooting 1x1 - Part 2 - Noch mehr Schweine und...
Application Performance Troubleshooting 1x1 - Part 2 - Noch mehr Schweine und...Application Performance Troubleshooting 1x1 - Part 2 - Noch mehr Schweine und...
Application Performance Troubleshooting 1x1 - Part 2 - Noch mehr Schweine und...rschuppe
 
Innodb plugin in MySQL 5.1
Innodb plugin in MySQL 5.1Innodb plugin in MySQL 5.1
Innodb plugin in MySQL 5.1Giuseppe Maxia
 
Kubernetes at Telekom Austria Group
Kubernetes at Telekom Austria Group Kubernetes at Telekom Austria Group
Kubernetes at Telekom Austria Group Oliver Moser
 
Red Dirt Ruby Conference
Red Dirt Ruby ConferenceRed Dirt Ruby Conference
Red Dirt Ruby ConferenceJohn Woodell
 
Introducing OWASP OWTF Workshop BruCon 2012
Introducing OWASP OWTF Workshop BruCon 2012Introducing OWASP OWTF Workshop BruCon 2012
Introducing OWASP OWTF Workshop BruCon 2012Abraham Aranguren
 
SoftServe's Hadoop Demo Lab
SoftServe's Hadoop Demo LabSoftServe's Hadoop Demo Lab
SoftServe's Hadoop Demo LabValentin Kropov
 

Semelhante a 10x Performance Improvements - A Case Study (20)

10x improvement-mysql-100419105218-phpapp02
10x improvement-mysql-100419105218-phpapp0210x improvement-mysql-100419105218-phpapp02
10x improvement-mysql-100419105218-phpapp02
 
AtlasCamp 2010: Implementing a custom JIRA UI using plugins 2.0 - Andreas Knecht
AtlasCamp 2010: Implementing a custom JIRA UI using plugins 2.0 - Andreas KnechtAtlasCamp 2010: Implementing a custom JIRA UI using plugins 2.0 - Andreas Knecht
AtlasCamp 2010: Implementing a custom JIRA UI using plugins 2.0 - Andreas Knecht
 
Noit ocon-2010
Noit ocon-2010Noit ocon-2010
Noit ocon-2010
 
Browser Fuzzing with a Twist (and a Shake) -- ZeroNights 2015
Browser Fuzzing with a Twist (and a Shake) -- ZeroNights 2015Browser Fuzzing with a Twist (and a Shake) -- ZeroNights 2015
Browser Fuzzing with a Twist (and a Shake) -- ZeroNights 2015
 
MySQL DW Breakfast
MySQL DW BreakfastMySQL DW Breakfast
MySQL DW Breakfast
 
What you wanted to know about MySQL, but could not find using inernal instrum...
What you wanted to know about MySQL, but could not find using inernal instrum...What you wanted to know about MySQL, but could not find using inernal instrum...
What you wanted to know about MySQL, but could not find using inernal instrum...
 
State of the Framework Address: Recent Developments in the Metasploit Framework
State of the Framework Address: Recent Developments in the Metasploit FrameworkState of the Framework Address: Recent Developments in the Metasploit Framework
State of the Framework Address: Recent Developments in the Metasploit Framework
 
Into The Box 2020 Keynote Day 1
Into The Box 2020 Keynote Day 1Into The Box 2020 Keynote Day 1
Into The Box 2020 Keynote Day 1
 
Dev and Ops Collaboration and Awareness at Etsy and Flickr
Dev and Ops Collaboration and Awareness at Etsy and FlickrDev and Ops Collaboration and Awareness at Etsy and Flickr
Dev and Ops Collaboration and Awareness at Etsy and Flickr
 
WordCamp Fukuoka 2010
WordCamp Fukuoka 2010WordCamp Fukuoka 2010
WordCamp Fukuoka 2010
 
Lecture 10 slides (february 4, 2010)
Lecture 10 slides (february 4, 2010)Lecture 10 slides (february 4, 2010)
Lecture 10 slides (february 4, 2010)
 
State of jQuery June 2013 - Portland
State of jQuery June 2013 - PortlandState of jQuery June 2013 - Portland
State of jQuery June 2013 - Portland
 
jQuery Conference 2012 keynote
jQuery Conference 2012 keynotejQuery Conference 2012 keynote
jQuery Conference 2012 keynote
 
Application Performance Troubleshooting 1x1 - Part 2 - Noch mehr Schweine und...
Application Performance Troubleshooting 1x1 - Part 2 - Noch mehr Schweine und...Application Performance Troubleshooting 1x1 - Part 2 - Noch mehr Schweine und...
Application Performance Troubleshooting 1x1 - Part 2 - Noch mehr Schweine und...
 
Innodb plugin in MySQL 5.1
Innodb plugin in MySQL 5.1Innodb plugin in MySQL 5.1
Innodb plugin in MySQL 5.1
 
Extended events
Extended eventsExtended events
Extended events
 
Kubernetes at Telekom Austria Group
Kubernetes at Telekom Austria Group Kubernetes at Telekom Austria Group
Kubernetes at Telekom Austria Group
 
Red Dirt Ruby Conference
Red Dirt Ruby ConferenceRed Dirt Ruby Conference
Red Dirt Ruby Conference
 
Introducing OWASP OWTF Workshop BruCon 2012
Introducing OWASP OWTF Workshop BruCon 2012Introducing OWASP OWTF Workshop BruCon 2012
Introducing OWASP OWTF Workshop BruCon 2012
 
SoftServe's Hadoop Demo Lab
SoftServe's Hadoop Demo LabSoftServe's Hadoop Demo Lab
SoftServe's Hadoop Demo Lab
 

Mais de Ronald Bradford

Successful Scalability Principles - Part 1
Successful Scalability Principles - Part 1Successful Scalability Principles - Part 1
Successful Scalability Principles - Part 1Ronald Bradford
 
MySQL Backup and Recovery Essentials
MySQL Backup and Recovery EssentialsMySQL Backup and Recovery Essentials
MySQL Backup and Recovery EssentialsRonald Bradford
 
The History and Future of the MySQL ecosystem
The History and Future of the MySQL ecosystemThe History and Future of the MySQL ecosystem
The History and Future of the MySQL ecosystemRonald Bradford
 
Lessons Learned Managing Large AWS Environments
Lessons Learned Managing Large AWS EnvironmentsLessons Learned Managing Large AWS Environments
Lessons Learned Managing Large AWS EnvironmentsRonald Bradford
 
Monitoring your technology stack with New Relic
Monitoring your technology stack with New RelicMonitoring your technology stack with New Relic
Monitoring your technology stack with New RelicRonald Bradford
 
MySQL Best Practices - OTN
MySQL Best Practices - OTNMySQL Best Practices - OTN
MySQL Best Practices - OTNRonald Bradford
 
MySQL Scalability Mistakes - OTN
MySQL Scalability Mistakes - OTNMySQL Scalability Mistakes - OTN
MySQL Scalability Mistakes - OTNRonald Bradford
 
My SQL Idiosyncrasies That Bite OTN
My SQL Idiosyncrasies That Bite OTNMy SQL Idiosyncrasies That Bite OTN
My SQL Idiosyncrasies That Bite OTNRonald Bradford
 
MySQL Best Practices - OTN LAD Tour
MySQL Best Practices - OTN LAD TourMySQL Best Practices - OTN LAD Tour
MySQL Best Practices - OTN LAD TourRonald Bradford
 
MySQL Idiosyncrasies That Bite SF
MySQL Idiosyncrasies That Bite SFMySQL Idiosyncrasies That Bite SF
MySQL Idiosyncrasies That Bite SFRonald Bradford
 
Successful MySQL Scalability
Successful MySQL ScalabilitySuccessful MySQL Scalability
Successful MySQL ScalabilityRonald Bradford
 
MySQL Idiosyncrasies That Bite 2010.07
MySQL Idiosyncrasies That Bite 2010.07MySQL Idiosyncrasies That Bite 2010.07
MySQL Idiosyncrasies That Bite 2010.07Ronald Bradford
 
MySQL Idiosyncrasies That Bite
MySQL Idiosyncrasies That BiteMySQL Idiosyncrasies That Bite
MySQL Idiosyncrasies That BiteRonald Bradford
 
LIFTOFF - MySQLCamp for the Oracle DBA
LIFTOFF - MySQLCamp for the Oracle DBALIFTOFF - MySQLCamp for the Oracle DBA
LIFTOFF - MySQLCamp for the Oracle DBARonald Bradford
 
IGNITION - MySQLCamp for the Oracle DBA
IGNITION - MySQLCamp for the Oracle DBAIGNITION - MySQLCamp for the Oracle DBA
IGNITION - MySQLCamp for the Oracle DBARonald Bradford
 
Dolphins Now And Beyond - FOSDEM 2010
Dolphins Now And Beyond - FOSDEM 2010Dolphins Now And Beyond - FOSDEM 2010
Dolphins Now And Beyond - FOSDEM 2010Ronald Bradford
 
Drizzle - Status, Principles and Ecosystem
Drizzle - Status, Principles and EcosystemDrizzle - Status, Principles and Ecosystem
Drizzle - Status, Principles and EcosystemRonald Bradford
 
MySQL for the Oracle DBA - Object Management
MySQL for the Oracle DBA - Object ManagementMySQL for the Oracle DBA - Object Management
MySQL for the Oracle DBA - Object ManagementRonald Bradford
 
Know Your Competitor - Oracle 10g Express Edition
Know Your Competitor - Oracle 10g Express EditionKnow Your Competitor - Oracle 10g Express Edition
Know Your Competitor - Oracle 10g Express EditionRonald Bradford
 

Mais de Ronald Bradford (20)

Successful Scalability Principles - Part 1
Successful Scalability Principles - Part 1Successful Scalability Principles - Part 1
Successful Scalability Principles - Part 1
 
MySQL Backup and Recovery Essentials
MySQL Backup and Recovery EssentialsMySQL Backup and Recovery Essentials
MySQL Backup and Recovery Essentials
 
The History and Future of the MySQL ecosystem
The History and Future of the MySQL ecosystemThe History and Future of the MySQL ecosystem
The History and Future of the MySQL ecosystem
 
Lessons Learned Managing Large AWS Environments
Lessons Learned Managing Large AWS EnvironmentsLessons Learned Managing Large AWS Environments
Lessons Learned Managing Large AWS Environments
 
Monitoring your technology stack with New Relic
Monitoring your technology stack with New RelicMonitoring your technology stack with New Relic
Monitoring your technology stack with New Relic
 
MySQL Best Practices - OTN
MySQL Best Practices - OTNMySQL Best Practices - OTN
MySQL Best Practices - OTN
 
MySQL Scalability Mistakes - OTN
MySQL Scalability Mistakes - OTNMySQL Scalability Mistakes - OTN
MySQL Scalability Mistakes - OTN
 
My SQL Idiosyncrasies That Bite OTN
My SQL Idiosyncrasies That Bite OTNMy SQL Idiosyncrasies That Bite OTN
My SQL Idiosyncrasies That Bite OTN
 
MySQL Best Practices - OTN LAD Tour
MySQL Best Practices - OTN LAD TourMySQL Best Practices - OTN LAD Tour
MySQL Best Practices - OTN LAD Tour
 
MySQL Idiosyncrasies That Bite SF
MySQL Idiosyncrasies That Bite SFMySQL Idiosyncrasies That Bite SF
MySQL Idiosyncrasies That Bite SF
 
Successful MySQL Scalability
Successful MySQL ScalabilitySuccessful MySQL Scalability
Successful MySQL Scalability
 
MySQL Idiosyncrasies That Bite 2010.07
MySQL Idiosyncrasies That Bite 2010.07MySQL Idiosyncrasies That Bite 2010.07
MySQL Idiosyncrasies That Bite 2010.07
 
MySQL Idiosyncrasies That Bite
MySQL Idiosyncrasies That BiteMySQL Idiosyncrasies That Bite
MySQL Idiosyncrasies That Bite
 
LIFTOFF - MySQLCamp for the Oracle DBA
LIFTOFF - MySQLCamp for the Oracle DBALIFTOFF - MySQLCamp for the Oracle DBA
LIFTOFF - MySQLCamp for the Oracle DBA
 
IGNITION - MySQLCamp for the Oracle DBA
IGNITION - MySQLCamp for the Oracle DBAIGNITION - MySQLCamp for the Oracle DBA
IGNITION - MySQLCamp for the Oracle DBA
 
Dolphins Now And Beyond - FOSDEM 2010
Dolphins Now And Beyond - FOSDEM 2010Dolphins Now And Beyond - FOSDEM 2010
Dolphins Now And Beyond - FOSDEM 2010
 
Drizzle - Status, Principles and Ecosystem
Drizzle - Status, Principles and EcosystemDrizzle - Status, Principles and Ecosystem
Drizzle - Status, Principles and Ecosystem
 
SQL v No SQL
SQL v No SQLSQL v No SQL
SQL v No SQL
 
MySQL for the Oracle DBA - Object Management
MySQL for the Oracle DBA - Object ManagementMySQL for the Oracle DBA - Object Management
MySQL for the Oracle DBA - Object Management
 
Know Your Competitor - Oracle 10g Express Edition
Know Your Competitor - Oracle 10g Express EditionKnow Your Competitor - Oracle 10g Express Edition
Know Your Competitor - Oracle 10g Express Edition
 

Último

A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 

Último (20)

A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 

10x Performance Improvements - A Case Study

  • 1. 10x Performance Improvements in 10 steps A Case Study Ronald Bradford http://ronaldbradford.com FOSDEM - 2010.02 Sunday, February 7, 2010
  • 2. Application Typical Web 2.0 social media site (Europe based) • Users - Visitors, Free Members, Paying Members • Friends • User Content - Video, Pictures • Forums, Chat, Email Sunday, February 7, 2010
  • 3. Server Environment • 1 Master Database Server (MySQL 5.0.x) • 3 Slave Database Servers (MySQL 5.0.x) • 5 Web Servers (Apache/PHP) • 1 Static Content Server (Nginx) • 1 Mail Server Sunday, February 7, 2010
  • 4. Step 1 Monitor, Monitor, Monitor Sunday, February 7, 2010
  • 5. 1. Monitor, Monitor, Monitor • What’s happened? • What’s happening now? • What’s going to happen? Past, Present, Future Sunday, February 7, 2010
  • 6. 1. Monitor, Monitor, Monitor Action 1 Monitoring Software • Installation of Cacti http://www.cacti.net/ - • Installation of MySQL Cacti Templates - http://code.google.com/p/mysql-cacti-templates/ • (Optional) Installation of MONyog - http://www.webyog.com/ Sunday, February 7, 2010
  • 7. 1. Monitor, Monitor, Monitor Action 2 Custom Dashboard • Most important - The state of NOW • Single Page Alerts - GREEN YELLOW RED Sunday, February 7, 2010
  • 8. Screen print goes here Dashboard Example Sunday, February 7, 2010
  • 9. 1. Monitor, Monitor, Monitor Action 3 Alerting Software • Installation of Nagios http://www.nagios.org/ - • MONyog also has some DB specific alerts Sunday, February 7, 2010
  • 10. 1. Monitor, Monitor, Monitor Action 4 Application Metrics • Total page generation time Sunday, February 7, 2010
  • 11. Step 2 Identify problem SQL Sunday, February 7, 2010
  • 12. 2. Identify Problem SQL Identify SQL Statements • Slow Query Log • Processlist • Binary Log • Status Statistics Sunday, February 7, 2010
  • 13. 2. Identify Problem SQL Problems • Sampling • Granularity Solution • tcpdump + mk-query-digest Sunday, February 7, 2010
  • 14. 2. Identify Problem SQL Action 1 • Install maatkit - http://www.maatkit.org • Install OS tcpdump (if necessary) • Get sudo access to tcpdump http://ronaldbradford.com/blog/take-a-look-at-mk-query-digest-2009-10-08/ Sunday, February 7, 2010
  • 15. # Rank Query ID Response time Calls R/Call Item # ==== ================== ================ ======= ========== ==== # 1 0xB8CE56EEC1A2FBA0 14.0830 26.8% 78 0.180552 SELECT c u # 2 0x195A4D6CB65C4C53 6.7800 12.9% 257 0.026381 SELECT u # 3 0xCD107808735A693C 3.7355 7.1% 8 0.466943 SELECT c u # 4 0xED55DD72AB650884 3.6225 6.9% 77 0.047046 SELECT u # 5 0xE817EFFFF5F6FFFD 3.3616 6.4% 147 0.022868 SELECT UNION c # 6 0x15FD03E7DB5F1B75 2.8842 5.5% 2 1.442116 SELECT c u # 7 0x83027CD415FADB8B 2.8676 5.5% 70 0.040965 SELECT c u # 8 0x1577013C472FD0C6 1.8703 3.6% 61 0.030660 SELECT c # 9 0xE565A2ED3959DF4E 1.3962 2.7% 5 0.279241 SELECT c t u # 10 0xE15AE2542D98CE76 1.3638 2.6% 6 0.227306 SELECT c # 11 0x8A94BB83CB730494 1.2523 2.4% 148 0.008461 SELECT hv u # 12 0x959C3B3A967928A6 1.1663 2.2% 5 0.233261 SELECT c t u # 13 0xBC6E3F701328E95E 1.1122 2.1% 4 0.278044 SELECT c t u Sunday, February 7, 2010
  • 16. # Query 2: 4.94 QPS, 0.13x concurrency, ID 0x195A4D6CB65C4C53 at byte 4851683 # This item is included in the report because it matches --limit. # pct total min max avg 95% stddev median # Count 3 257 # Exec time 10 7s 35us 492ms 26ms 189ms 78ms 332us # Time range 2009-10-16 11:48:55.896978 to 2009-10-16 11:49:47.760802 # bytes 2 10.75k 41 43 42.85 42.48 0.67 42.48 # Errors 1 none # Rows affe 0 0 0 0 0 0 0 0 # Warning c 0 0 0 0 0 0 0 0 # Query_time distribution # 1us # 10us # # 100us ################################################################ # 1ms #### # 10ms ### # 100ms ######## # 1s # 10s+ # Tables # SHOW TABLE STATUS LIKE 'u'G # SHOW CREATE TABLE `u`G # EXPLAIN SELECT ... FROM u ...G Sunday, February 7, 2010
  • 17. 2. Identify Problem SQL Action 2 • Wrappers to capture SQL • Re-run on single/multiple servers • e.g. Different slave configurations Sunday, February 7, 2010
  • 18. 2. Identify Problem SQL Tip • Enable General Query Log in Development/Testing • Great for testing Batch Jobs Sunday, February 7, 2010
  • 19. 2. Identify Problem SQL Action 3 Application Logic • Show total master/slave SQL statements executed • Show all SQL with execution time (admin user only) Tip • Have abstracted class/method to execute ALL SQL Sunday, February 7, 2010
  • 20. Step 3 Analyze problem SQL Sunday, February 7, 2010
  • 21. 3. Analyze Problem SQL • Query Execution Plan (QEP) • EXPLAIN [EXTENDED] SELECT ... • Table/Index Structure • SHOW CREATE TABLE <tablename> • Table Statistics • SHOW TABLE STATUS <tablename> Sunday, February 7, 2010
  • 22. 3. Analyze Problem SQL Good mysql> EXPLAIN SELECT id FROM example_table WHERE id=1G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: example_table type: const possible_keys: PRIMARY key: PRIMARY key_len: 4 ref: const rows: 1 Extra: Using index Sunday, February 7, 2010
  • 23. 3. Analyze Problem SQL Bad mysql> EXPLAIN SELECT * FROM example_tableG *************************** 1. row *************************** id: 1 select_type: SIMPLE table: example_table type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 59 Extra: Sunday, February 7, 2010
  • 24. 3. Analyze Problem SQL Tip • SQL Commenting • Identify batch statement SQL • Identify cached SQL SELECT /* Cache: 10m */ .... SELECT /* Batch: EOD report */ ... SELECT /* Func: 123 */ .... Sunday, February 7, 2010
  • 25. Step 4 The Art of Indexes Sunday, February 7, 2010
  • 26. 4. The Art of Indexes • Different Types • Column • Concatenated • Covering • Partial http://ronaldbradford.com/blog/understanding-different-mysql-index-implementations-2009-07-22/ Sunday, February 7, 2010
  • 27. 4. The Art of Indexes Action 1 • EXPLAIN Output • Possible keys • Key used • Key length • Using Index Sunday, February 7, 2010
  • 28. 4. The Art of Indexes Tip • Generally only 1 index used per table • Make column NOT NULL when possible • Statistics affects indexes • Storage engines affect operations Sunday, February 7, 2010
  • 29. Before (7.88 seconds) After (0.04 seconds) *************************** 2. row ** *************************** 2. row *** id: 2 id: 2 select_type: DEPENDENT SUBQUERY select_type: DEPENDENT SUBQUERY table: h_p table: h_p type: ALL type: index_subquery possible_keys: NULL possible_keys: UId key: NULL key: UId key_len: NULL key_len: 4 ref: NULL ref: func rows: 33789 rows: 2 Extra: Using where Extra: Using index ALTER TABLE h_p ADD INDEX (UId); Sunday, February 7, 2010
  • 30. mysql> explain SELECT UID, FUID, COUNT(*) AS Count FROM f GROUP BY UID, FUID ORDER BY Count DESC LIMIT 2000G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: f type: index possible_keys: NULL key: UID key_len: 8 ref: NULL rows: 2151326 Extra: Using index; Using temporary; Using filesort ALTER TABLE f DROP INDEX UID, ADD INDEX (UID,FUID) Sunday, February 7, 2010
  • 31. 4. The Art of Indexes Indexes can hurt performance Sunday, February 7, 2010
  • 32. Step 5 Offloading Master Load Sunday, February 7, 2010
  • 33. 5. Offloading Master Load • Identify statements for READ ONLY slave(s) • e.g. Long running batch statements Single point v scalable solution Sunday, February 7, 2010
  • 34. Step 6 Improving SQL Sunday, February 7, 2010
  • 35. 6. Improving SQL • Poor SQL Examples • ORDER BY RAND() • SELECT * • Lookup joins • ORDER BY The database is best for storing and retrieving data not logic Sunday, February 7, 2010
  • 36. Step 7 Storage Engines Sunday, February 7, 2010
  • 37. 7. Storage Engines • MyISAM is default • Table level locking • Concurrent SELECT statements • INSERT/UPDATE/DELETE blocked by long running SELECT • All SELECT’s blocked by INSERT/UPDATE/DELETE • Supports FULLTEXT Sunday, February 7, 2010
  • 38. 7. Storage Engines • InnoDB supports transactions • Row level locking with MVCC • Does not support FULLTEXT • Different memory management • Different system variables Sunday, February 7, 2010
  • 39. 7. Storage Engines • There are other storage engines • Memory • Archive • Blackhole • Third party Sunday, February 7, 2010
  • 40. 7. Storage Engines Using Multiple Engines • Different memory management • Different system variables • Different monitoring • Affects backup strategy Sunday, February 7, 2010
  • 41. 7. Storage Engines Action 1 • Configure InnoDB correctly • innodb_buffer_pool_size • innodb_log_file_size • innodb_flush_log_at_trx_commit Sunday, February 7, 2010
  • 42. 7. Storage Engines Action 2 • Converted the two primary tables • Users • Content Locking eliminated Sunday, February 7, 2010
  • 43. Step 8 Caching Sunday, February 7, 2010
  • 44. 8. Caching Action 1 • Memcache is your friend http://memcached.org/ - • Cache query results • Cache lookup data (eliminate joins) • Cache aggregated per user information • Caching Page Content • Top rated (e.g. for 5 minutes) Sunday, February 7, 2010
  • 45. 8. Caching Action 2 • MySQL has a Query Cache • Determine the real benefit • Turn on or off dynamically • SET GLOBAL query_cache_size = 1024*1024*32; Sunday, February 7, 2010
  • 46. 8. Caching Tip The best performance improvement for an SQL statement is to eliminate it. Sunday, February 7, 2010
  • 47. Step 9 Sharding Sunday, February 7, 2010
  • 48. 9. Sharding • Application level horizontal and vertical partitioning • Vertical Partitioning • Grouping like structures together (e.g. logging, forums) • Horizontal Partitioning • Affecting a smaller set of users (i.e. not 100%) Sunday, February 7, 2010
  • 49. 9. Sharding Action 1 • Separate Logging • Reduced replication load on primary server Sunday, February 7, 2010
  • 50. Step 10 Database Management Sunday, February 7, 2010
  • 51. 10. Database Management Database Maintenance • Adding indexes (e.g. ALTER) • OPTIMIZE TABLE • Archive/purging data (e.g DELETE) Blocking Operations Sunday, February 7, 2010
  • 52. 10. Database Maintenance Action 1 • Automate slave inclusion/exclusion • Ability to apply DB changes to slaves • Master still a problem Sunday, February 7, 2010
  • 53. 10. Database Maintenance Action 2 • Install Fail-Over Master Server • Slave + Master features • Master extra configuration • Scripts to switch slaves • Scripts to enable/disable Master(s) • Scripts to change application connection Sunday, February 7, 2010
  • 54. 10. Database Maintenance Higher Availability & Testing Disaster Recovery Sunday, February 7, 2010
  • 55. Bonus Front End Improvements Sunday, February 7, 2010
  • 56. 11. Front End Improvements • Know your total website load time http://getfirebug.com/ - • How much time is actually database related? • Reduce HTML page size - 15% improvement • Remove full URL’s, inline css styles • Reduce/combine css & js files • Identify blocking elements (e.g. js) Sunday, February 7, 2010
  • 57. 11. Front End Improvements • Split static content to different ServerName • Spread static content over multiple ServerNames (e.g. 3) • Sprites - Combining lightweight images http://spriteme.org/ - • Cookie-less domain name for static content Sunday, February 7, 2010
  • 59. Before • Users experienced slow or unreliable load times • Management could observe, but no quantifiable details • Concern over load for increased growth • Release of some new features on hold Sunday, February 7, 2010
  • 60. Now • Users experienced consistent load times (~60ms) • Quantifiable and visible real-time results • Far greater load now supported (Clients + DB) • Better testability and verification for scaling • New features can be deployed Sunday, February 7, 2010
  • 61. Consulting Available Now http://ronaldbradford.com Sunday, February 7, 2010