mysql scalability mistakes - otn

79
Common MySQL Scalability Mistakes Ronald Bradford OTN LAD Tour South America 2010.10 www.RonaldBradford.com Ronald Bradford http://ronaldbradford.com

Upload: ronald-bradford

Post on 20-May-2015

6.624 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Common MySQL

Scalability Mistakes

Ronald Bradford

OTN LAD TourSouth America

2010.10

www.RonaldBradford.com

Ronald Bradfordhttp://ronaldbradford.com

Page 2: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10 99

Page 3: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

My website seems to freeze or responds randomly?

PROBLEM

9

Page 4: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

The default MyISAM storage engine uses exclusive table locks for DML.

CAUSE

9

Page 5: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Optimize blocking query performance

Use a transactional engine with MVCC and row based locking to address the LOCKING issue

SOLUTION

9

Page 6: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

End user report that selects all customer, order, order lines and order history data and performs poor joins. This takes shared read locks blocking future write locks then future reads.

EXAMPLE

9

Page 7: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

MySQL is unique in that it offers different mechanisms for storing and retrieving data, each with strengths and weaknesses.

The DEFAULT is not always the best.

WHY

9

Page 8: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10 9MySQL PROCESSLIST

Blocked have State = LockedBlocker - Same table, larger Time

HOW

mysql> SHOW PROCESSLIST;+----+------+-----------+-------+---------+------+------------+---------------| Id | User | Host | db | Command | Time | State | Info +----+------+-----------+-------+---------+------+------------+---------------| 13 | app1 | localhost | odtug | Query | 144 | User sleep | UPDATE emp ...| 14 | app1 | localhost | odtug | Query | 116 | Locked | select c from emp | 15 | app1 | localhost | odtug | Query | 89 | Locked | select c from emp

Page 9: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Optimize Blocker

Indexes

Limit query

Summary table

Change storage engine

HOW

9

Page 10: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10 88

Page 11: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Why is my database so large?

PROBLEM

8

Page 12: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Don’t store large static objects in the database

SOLUTION

8

Page 13: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

80% of data is email content/attachments

60% of data is PDF documents

30% of data is uncompressed large XML objects

EXAMPLE

8

Page 14: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Maximize memory usage for important data

Reduce database recovery time

WHY

8

Page 15: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Compress large text data

90% saving on XML data

Store static data in files

Avoids DB handling overhead

HOW

8

Page 16: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

HOW

8Table Size per schema

# Schema Table UsageSELECT table_schema,table_name,engine,row_format, table_rows, avg_row_length, (data_length+index_length)/1024/1024 as total_mb, (data_length)/1024/1024 as data_mb, (index_length)/1024/1024 as index_mb, CURDATE() AS todayFROM information_schema.tables WHERE table_schema = DATABASE()ORDER BY 7 DESC;

http://ronaldbradford.com/mysql-dba/

Page 17: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10 77

Page 18: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

I can't access my website?

PROBLEM

7

Page 19: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

TRUE STORY

7

Page 20: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Question:

TRUE STORY

7

Page 21: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Question:

How do you know when your server is down or not accessible?

TRUE STORY

7

Page 22: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Question:

How do you know when your server is down or not accessible?

Answer:

TRUE STORY

7

Page 23: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Question:

How do you know when your server is down or not accessible?

Answer:

The users will let us know.

TRUE STORY

7

Page 24: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

SOLUTION

7Integrated monitoring including graphical interface, real time analysis and notification

Page 25: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Monitoring/Alerting

GraphicalHistoricalNecessaryGenerally missing/incompleteUseless for real-time analysis

HOW

7

Page 26: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

DashboardThe state of NOW

Sampling at 1s/3s/5s

e.g. 0.1% of throughput

HOW

7

Page 27: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

InstrumentationImportant to business viability

e.g. orders per minute

page load time

Seamless implementationi.e. no code changes to view real-time

extensible

HOW

7

Page 28: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10 66

Page 29: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

My replication slave can't keep up?

PROBLEM

6

Page 30: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Know the weakest link(s) of MySQL replication and don't exceed that,or cheat.

SOLUTION

6

Page 31: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

If replication can't catchup, slaves are useless.

Backup & recovery may also suffer.

WHY

6

Page 32: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Master

DML Statement

Write Data/Redo Log

Write Binary Log

Return OK to client

HOW

6

Page 33: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

SlaveDetect master log changeRetrieve binary log entryWrite relay log (IO_THREAD)Read relay logApply DML (SQL_THREAD)Write Data/redo log

HOW

6

Page 34: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Replication workaroundsRestrict queries executed

--ignoreDifferent storage enginesDifferent index structures

HOW

6

Page 35: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Advanced workarounds

RAID 0 (large number of slaves)

Pre fetch thread

EXPERT TIP

6

Page 36: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10 55

Page 37: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

My server has crashed with a hard drive failure

PROBLEM

5

Page 38: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Question:

Have you ever performed a database recovery?

Answer:

No, why?

TRUE STORY

5

Page 39: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Consultant:

Do you know that your daily backups only recover the data up to that time, e.g. 1am. You know you have lost all your sales and changes since then.

Customer:

No, I didn’t know that.

TRUE STORY

5

Page 40: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Have a DR Plan

Documented

Tested

Timed

Verified - End to End

SOLUTION

5

Page 41: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Do you pass the MySQL backup/recovery quiz?

http://rb42.com/mysql-backup-quiz

HOW

5

Page 42: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

1. Do you have MySQL backups in place? 2. Do you backup ALL your MySQL data? 3. Do you have consistent MySQL backups? 4. Do you have backups that include both static snapshot and point in time transactions? 5. Do you review your backup logs EVERY SINGLE day or have tested backup monitoring in place? 6. Do you perform a test recovery of your static backup? 7. Do you perform a test recovery to point in time? 8. Do you time your backup and recovery process and review over time? 9. Do you have off-site copies of your backups? 10. Do you backup your primary binary logs?

QUIZ

5http://rb42.com/mysql-backup-quiz

Page 43: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10 44

Page 44: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Why is my database executing 1,200 qps for 50 users?

PROBLEM

4

Page 45: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Determine what queries are running and why they are running?

SOLUTION

4

Page 46: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Excessive SQL statementsDuplicateRedundant CachableRow at a time (RAT)

CAUSE

4

Page 47: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Reducing SQL load both improves performance now and provides greater capacity as you scale

WHY

4

Page 48: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

EXAMPLE

4http://ronaldbradford.com/blog/optimizing-sql-performance-the-art-of-elimination-2010-07-08/

SELECT * FROM activities_theme WHERE theme_parent_id=0SELECT * FROM activities_theme WHERE theme_parent_id=1SELECT * FROM activities_theme WHERE theme_parent_id=2SELECT * FROM activities_theme WHERE theme_parent_id=11SELECT * FROM activities_theme WHERE theme_parent_id=16

SELECT *FROM activities_themeWHERE theme_parent_id in (0,1,2,11,16)

CAT

RAT

Page 49: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

EXAMPLE

4http://ronaldbradford.com/blog/optimizing-sql-performance-the-art-of-elimination-2010-07-08/

5 Query SELECT * FROM `artist`5 Query SELECT * FROM `artist`5 Query SELECT * FROM `artist`5 Query SELECT * FROM `artist`5 Query SELECT * FROM `artist`5 Query SELECT * FROM `artist` WHERE (ArtistID = 196 )5 Query SELECT * FROM `artist` WHERE (ArtistID = 2188 )5 Query SELECT * FROM `artist`5 Query SELECT * FROM `artist`5 Query SELECT * FROM `artist`

Duplicate

Unnecessary

Only 2 queries necessary or 1 CAT

Page 50: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

EXAMPLE

4http://ronaldbradford.com/blog/optimizing-sql-performance-the-art-of-elimination-2010-07-08/

SELECT pages_id, pages_livestats_code, pages_title, pages_parent, pages_exhibid, pages_theme, pages_accession_numFROM pages WHERE pages_id = 0

5 minutes

6000 executions

0 is out of bounds

Unnecessary

Page 51: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Capture & Analyze

DML is easy

SELECT is harder

HOW

4http://www.slideshare.net/ronaldbradford/capturing-analyzing-and-optimizing-mysql

Page 52: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

MySQL Binary Log (Archive Redo)

mysqlbinlog

mk-query-digest

One Liner

HOW

4http://ronaldbradford.com/blog/mysql-dml-stats-per-table-2009-09-09/

Page 53: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

HOW

4 55463 update sessions 25574 insert into sessions 12820 update items 11636 insert into item_categories 7532 update users 5168 delete from item_categories 4076 update extended_item_infos 3701 insert into sphinx_new_items 3701 insert into mini_items 2190 update sweet_bars 1922 update chat_users 1662 update item_shipping_infos 1265 update search_terms 1260 insert into images 931 delete from item_shipping_infos 825 update booths 713 update booth_stats 574 update topics 540 update offers

81k of 141k

Top 2 queries = 57%

Page 54: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Process List

General Log

tcpdump

Application

HOW

4

Page 55: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Capturing, Analyzing and Optimizing your SQL

http://www.slideshare.net/ronaldbradford/capturing-analyzing-and-optimizing-mysql

HOW

4

Page 56: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

/* Comment your queries */

The more products you have, the more developers you have, the more time you spend in code identification before you can even determine a resolution

EXPERT TIP

4

Page 57: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10 33

Page 58: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

The database is slow.

My webpage takes five seconds to load.

PROBLEM

3

Page 59: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Evaluate the time taken in the database and all stages in between

SOLUTION

3

Page 60: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Client example showed a webpage taking 5 seconds to load. The html component was taking only 400 ms. Any MySQL performance improvement will only tune 8% of the total time.

EXAMPLE

3

Page 61: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Performance is important to end user

Performance is perception

WHY

3

Page 62: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Firebug - http://getfirebug.com/

Httpwatch - http://httpwatch.com/

Page speed - http://code.google.com/speed/page-speed/

YSlow - http://developer.yahoo.com/yslow/

wget/curlApplication code instrumentation

HOW

3

Page 64: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10 22

Page 65: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

I want to add new H/W. How do I change my application to support this?

PROBLEM

2

Page 66: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Develop a seamless integration that requires no code changes, no downtime and very little additional physical resources.

SOLUTION

2

Page 67: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Integrated monitoring and instrumentation

Deployed from Day 1

HOW

2

Page 68: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Seamless automated server deployment

Version Control

Build & Release

Runtime config management

Automated discovery

HOW

2

Page 69: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

API

One code path for business functionality

Implied business documentation

Enforced data exchange standard

Testability

HOW

2

Page 70: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Different levels of data availability

Read & Write

Read Only

No Access

Cached

HOW

2

Page 71: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Different principles for scalability

Read Scalability

Write Scalability

Caching

HOW

2

Page 72: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Successful MySQL Scalability1. Integrated monitoring & instrumentation2. Seamless automated server deployment3. Disaster is inevitable4. Application Programming Interface5. Support different levels of data availability6. Support different scalability principles

REFERENCE

Rhttp://ronaldbradford.com/blog/successful-mysql-scalability-presentation-2010-09-17/

Page 73: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10 11

Page 74: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

My website is slow?

PROBLEM

1

Page 75: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Seek professional advice.Hire for example Ronald Bradford.

20+ years of system architecture, database design and performance tuning.

Employment as Consultant for Oracle Corporation (96-99)

Employment as Senior Consultant for MySQL Inc (06-08)

SOLUTION

1

Page 76: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

RR

Page 77: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

Monitoring. Before, during and after NOW.

You may not be able to predict the future but you can preempt the future.

Choose the best product and features for you needs.

The best SQL statement is the one you never have to execute.

RECAP

R

Page 78: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

3 levels of real time data access.Read/Write, Read and no access

3 aspects of scalability.Read, Write and Caching

Operate below 90% capacity. That 10% is your insurance.

RECAP

R

Page 79: MySQL Scalability Mistakes - OTN

Common MySQL Scalability Mistakes - 2010.10

http://ronaldbradford.com

[email protected]

CONTACT

C