Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s...

41
Finding Bottlenecks: Benchmarking and Profiling Nilesh Birari 123059015 IIT Bombay August 31, 2013 Nilesh Birari 123059015 (IIT Bombay) Finding Bottlenecks: Benchmarking and Profiling 1 August 31, 2013 1 / 41

Transcript of Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s...

Page 1: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Finding Bottlenecks: Benchmarking and Profiling

Nilesh Birari123059015

IIT Bombay

August 31, 2013

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

1 August 31, 2013 1 / 41

Page 2: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Introduction

What should you try to improve? A particular query? Your schema?Your hardware?.

Find and strengthen the weakest link in your application.

Benchmarking and profiling are two essential practices for findingbottlenecks.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

2 August 31, 2013 2 / 41

Page 3: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Introduction

Benchmarking

– A benchmark measures your system’s performance. This can helpdetermine a system’s capacity, show you which changes matter andwhich don’t, or show how your application performs with different data.

Profiling

– profiling helps you find where your application spends the most time orconsumes the most resources.

In other words, benchmarking answers the question “How well doesthis perform?” and profiling answers the question “Why does itperform the way it does?”

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

3 August 31, 2013 3 / 41

Page 4: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Why Benchmark?

Measure how your application currently performs

Validate your system’s scalability

Plan for growth.Benchmarks help you estimate how much hardware,network capacity, and other resources you’ll need for your projectedfuture load.

Test your application’s ability to tolerate a changing environment.

Test different hardware, software, and operating systemconfigurations.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

4 August 31, 2013 4 / 41

Page 5: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Benchmarking Strategies

There are two primary benchmarking strategies: you can benchmark theapplication as a whole, or isolate MySQL. These two strategies are knownas full-stack and single-component benchmarking, respectively.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

5 August 31, 2013 5 / 41

Page 6: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Reasons to use Full-stack

You’re testing the entire application, including the web server, theapplication code, and the database. This is useful because you don’tcare about MySQL’s performance in particular; you care about thewhole application.

MySQL is not always the application bottleneck

Only by testing the full application can you see how each part’s cachebehaves.

Benchmarks are good only to the extent that they reflect your actualapplication’s behavior, which is hard to do when you’re testing onlypart of it.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

6 August 31, 2013 6 / 41

Page 7: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Reasons to use single-component

You want to compare different schemas or queries.

You want to benchmark a specific problem you see in the application.

You want to avoid a long benchmark in favor of a shorter one thatgives you a faster “cycle time” for making and measuring changes.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

7 August 31, 2013 7 / 41

Page 8: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

What to Measure

You need to identify your goals before you start benchmarking.

Your goals will determine the tools and techniques you’ll use to getaccurate, meaningful results.

Frame your goals as a questions, such as “Is this CPU better than thatone?” or “Do the new indexes work better than the current ones?”

you sometimes need different approaches to measure different things.For example, latency and throughput might require differentbenchmarks.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

8 August 31, 2013 8 / 41

Page 9: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Transactions per time unit

This is one of the all-time classics for benchmarking databaseapplications

Standardized benchmarks such as TPC-C

These benchmarks measure online transaction processing (OLTP)performance and are most suitable for interactive multiuserapplications.

The term throughput usually means the same thing as transactions(or another unit of work) per time unit.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

9 August 31, 2013 9 / 41

Page 10: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Response time or latency

This measures the total time a task requires.

It’s also not at all repeatable, as it’s likely to vary widely betweenruns. For this reason, many people use percentile response timesinstead.

It’s usually helpful to graph the results of these benchmarks

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

10 August 31, 2013 10 / 41

Page 11: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Scalability

Scalability measurements are useful for systems that need to maintainperformance under a changing workload.

Performance is typically measured by a metric such as throughput orresponse time, and the workload may vary along with changes indatabase size, number of concurrent connections, or hardware.

Scalability measurements are good for capacity planning

– For example, if you design your system to perform well on aresponse-time benchmark with a single connection (a poor benchmarkstrategy), your application might perform badly when there’s anydegree of concurrency. A benchmark that looks for consistent responsetimes under an increasing number of connections would show thisdesign flaw.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

11 August 31, 2013 11 / 41

Page 12: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Concurrency

A more accurate measurement of concurrency on the web server ishow many requests per second the users generate at the peak time.

what you should really care about benchmarking is the workingconcurrency, or the number of threads or connections doing worksimultaneously. Measure whether performance drops much when theconcurrency increases; if it does, your application probably can’thandle spikes in load.

You need to either make sure that performance doesn’t drop badly, ordesign the application so it doesn’t create high concurrency in theparts of the application that can’t handle it.

Concurrency is completely different from response time andscalability: it’s not a result, but rather a property of how you set upthe benchmark.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

12 August 31, 2013 12 / 41

Page 13: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Benchmarking Tactics

Before we discuss how to do benchmarks well, though, let’s look atsome common mistakes that can lead to unusable or inaccurateresults:

– Using a subset of the real data size– Using incorrectly distributed data– Using unrealistically distributed parameters, such as pretending that all

user profiles are equally likely to be viewed.– Using a single-user scenario for a multiuser application.– Benchmarking a distributed application on a single server.– Failing to match real user behavior– Running identical queries in a loop– Failing to check for errors– Ignoring how the system performs when it’s not warmed up, such as

right after a restart.– Using default server settings

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

13 August 31, 2013 13 / 41

Page 14: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Designing and Planning a Benchmark

The first step in planning a benchmark is to identify the problem andthe goal. Next, decide whether to use a standard benchmark ordesign your own.

If you use a standard benchmark, be sure to choose one that matchesyour needs.

Designing your own benchmark is a complicated and iterative process.To get started, take a snapshot of your production data set. Makesure you can restore this data set for subsequent runs.

Next, you need queries to run against the data.

You can log queries at different levels. For example, you can log theHTTP requests on a web server if you need a full-stack benchmark.

You can also enable MySQL’s query log

It’s also important to create a separate thread for each connection inthe log, instead of shuffling queries among threads. The query logshows which connection ran each query.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

14 August 31, 2013 14 / 41

Page 15: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Getting Accurate Results

The best way to get accurate results is to design your benchmark toanswer the question you want to answer. Have you chosen the rightbenchmark? Are you capturing the data you need to answer thequestion? Are you benchmarking by the wrong criteria?.Next, make sure your benchmark results will be repeatable.If the benchmark changes data or schema, reset it with a freshsnapshot between runs. Inserting into a table with a thousand rowswill not give the same results as inserting into a table with a millionrows!.Watch out for external load, profiling and monitoring systems, verboselogging, periodic jobs, and other factors that can skew your results.Try to change as few parameters as possible each time you run abenchmark.You can’t get meaningful results from the default MySQLconfiguration settings either, because they’re tuned for tinyapplications that consume very little memory.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

15 August 31, 2013 15 / 41

Page 16: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Running the Benchmark and Analyzing Results

You’ll usually run a benchmark several times

Once you have your results, you need to analyze them that is, turnthe numbers into knowledge. The goal is to answer the question thatframes the benchmark. Ideally, you’d like to be able to make astatement such as “Upgrading to four CPUs increases throughput by50% with the same latency” or “The indexes made the queries faster.”

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

16 August 31, 2013 16 / 41

Page 17: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Benchmarking Tools

There are a wide variety of tools ready for you to use.

Full-Stack Tools

Single-Component Tools

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

17 August 31, 2013 17 / 41

Page 18: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Full-Stack Tools

ab

– ab is a well-known Apache HTTP server benchmarking tool. It showshow many requests per second your HTTP server is capable of serving.

– If you are benchmarking a web application, this translates to how manyrequests per second the entire application can satisfy.

– It’s a very simple tool, but its usefulness is also limited because it justhammers one URL as fast as it can.

http load

– This tool is similar in concept to ab; it is also designed to load a webserver, but it’s more flexible.

– You can create an input file with many different URLs, and http loadwill choose from among them at random.

– You can also instruct it to issue requests at a timed rate, instead ofjust running them as fast as it can

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

18 August 31, 2013 18 / 41

Page 19: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Full-Stack Tools- cont.

JMeter

– It was designed for testing web applications, but you can also use it totest FTP servers and issue queries to a database via JDBC.

– JMeter is much more complex than ab and http load.– For example, it has features that let you simulate real users more

flexibly, by controlling such parameters as ramp-up time. It has agraphical user interface with built-in result graphing, and it offers theability to record and replay results offline

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

19 August 31, 2013 19 / 41

Page 20: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Single-Component Tools

mysqlslap

– mysqlslap simulates load on the server and reports timing information.– It is part of the MySQL 5.1 server distribution, but it should be

possible to run it against MySQL 4.1 and newer servers.– You can specify how many concurrent connections it should use, and

you can give it either a SQL statement on the command line or a filecontaining SQL statements to run. If you don’t give it statements, itcan also autogenerate SELECT statements by examining the server’sschema.

sysbench

– sysbench is a multithreaded system benchmarking tool.– Its goal is to get a sense of system performance, in terms of the factors

important for running a database server.– For example, you can measure the performance of file I/O, the OS

scheduler, memory allocation and transfer speed, POSIX threads, andthe database server itself.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

20 August 31, 2013 20 / 41

Page 21: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Single-Component Tools- cont.

Database Test Suite– The Database Test Suite, designed by The Open-Source Development

Labs (OSDL) and hosted on SourceForge athttp://sourceforge.net/projects/osdldbt/, is a test kit for runningbenchmarks similar to some industry-standard benchmarks, such asthose published by the Transaction Processing Performance Council(TPC).

MySQL Benchmark Suite (sql-bench)– It is single-threaded and measures how quickly the server executes

queries. The results show which operations the server performs well.– The main benefit of this benchmark suite is that it contains a lot of

predefined tests that are easy to use, so it makes it easy to comparedifferent storage engines or configurations.

– It’s useful as a high-level benchmark, to compare the overallperformance of two servers.

– The biggest disadvantages of this tool are that it’s single-user, it uses avery small dataset, you can’t test your site-specific data, and its resultsmay vary between runs.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

21 August 31, 2013 21 / 41

Page 22: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

benchmarking

Single-Component Tools- cont.

Super Smack

– Super Smack is a benchmarking, stress- testing, and load-generatingtool for MySQL and PostgreSQL.

– It is a complex, powerful tool that lets you simulate multiple users, loadtest data into the data- base, and populate tables with randomlygenerated data.

– Benchmarks are contained in “smack” files, which use a simplelanguage to define clients, tables, queries, and so on.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

22 August 31, 2013 22 / 41

Page 23: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

Introduction

Profiling shows you how much each part of a system contributes to thetotal cost of producing a result. The simplest cost metric is time, butprofiling can also measure the number of function calls, I/O operations,database queries, and so forth. The goal is to understand why a systemperforms the way it does.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

23 August 31, 2013 23 / 41

Page 24: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

Profiling an Application

Application-level profiling usually yields better insight into how tooptimize the application and provides more accurate results, becausethe results include the work done by the whole application.

You’ll typically need to profile the application globally to see how thesystem is loaded, but you’ll probably also want to isolate some sub-systems of interest.

Any expensive subsystem is a good candidate for profiling in isolation.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

24 August 31, 2013 24 / 41

Page 25: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

Profiling an Application-cont.

Database access is often, but not always, the bottleneck in applications.Bottlenecks can also be caused by any of the following:

External resources, such as calls to web services or search engines

Operations that require processing large amounts of data in theapplication, such as parsing big XML files

Expensive operations in tight loops, such as abusing regularexpressions

Badly optimized algorithms, such as naıve search algorithms to finditems in lists

Before looking at MySQL queries, you should figure out the actual sourceof your performance problems.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

25 August 31, 2013 25 / 41

Page 26: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

How and what to measure

Time is an appropriate profiling metric for most applications, becausethe end user cares most about time.

In web applications, we like to have a debug mode that makes eachpage display its queries along with their times and number of rows.We can then run EXPLAIN on slow queries.

Include profiling code in every new project.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

26 August 31, 2013 26 / 41

Page 27: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

How and what to measure-cont.

Your profiling code should gather and log at least the following:

Total execution time, or “wall-clock time” (in web applications, this isthe total page render time)

Each query executed, and its execution time.

Each connection opened to the MySQL server.

Every call to an external resource, such as web services, memcached,and externally invoked scripts.

Potentially expensive function calls, such as XML parsing.

User and system CPU time.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

27 August 31, 2013 27 / 41

Page 28: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

How and what to measure-cont.

This information will help you monitor performance much more easily. Itwill give you insight into aspects of performance you might not captureotherwise, such as:

Overall performance problems

Sporadically increased response times

System bottlenecks, which might not be MySQL

Execution time of “invisible” users, such as search engine spiders

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

28 August 31, 2013 28 / 41

Page 29: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

A PHP profiling example

We start with the code you’ll need to capture the profilinginformation.

simplified example of a basic PHP 5 logging class, class.Timer.php,which uses built-in functions such as getrusage( ) to determine thescript’s resource usage:

It’s easy to use the Timer class in your application. You just need towrap a timer around potentially expensive (or otherwise interesting)calls.

PHP’s new mysqli interface lets you extend the basic mysqli class andredeclare the query method.

This technique requires very few code changes. You can simplychange mysqli to mysqlx globally, and your whole application willbegin logging all queries.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

29 August 31, 2013 29 / 41

Page 30: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

Next, let’s see how to log the data you’re gathering.

Once we’ve logged some data, we can analyze the logs. The beautyof using MySQL for logging is that you get the flexibility of SQL foranalysis, so you can easily write queries to get any report you wantfrom the logs.

If you compare the wtime (wall-clock time) and the query time, you’llsee that MySQL query execution time was responsible for the slowresponse time in some of the all pages.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

30 August 31, 2013 30 / 41

Page 31: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

MySQL Profiling

some techniques you can use to capture and analyze informationabout the different kinds of work MySQL does to execute queries.

You can work at whatever level of granularity suits your purposes: youcan profile the server as a whole or examine individual queries orbatches of queries. The kinds of information you can glean include:

– Which data MySQL accesses most– What kinds of queries MySQL executes most– What states MySQL threads spend the most time in– What subsystems MySQL uses most to execute a query– What kinds of data accesses MySQL does during a query– How much of various kinds of activities, such as index scans, MySQL

does

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

31 August 31, 2013 31 / 41

Page 32: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

Logging queries

MySQL has two kinds of query logs: the general log and the slow log.

The general log writes out every query as the server receives it, so itcontains queries that may not even be executed due to errors. Thegeneral log captures all queries, as well as some non- query eventssuch as connecting and disconnecting.

In contrast, the slow log contains only queries that have executed. Inparticular, it logs queries that take more than a specified amount oftime to execute.

Both logs can be helpful for profiling, but the slow log is the primarytool for catching problematic queries

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

32 August 31, 2013 32 / 41

Page 33: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

The default value for long query time is 10 seconds. This is too longfor most setups, so we usually use two seconds.

A related configuration variable, log queries not using indexes, makesthe server log to the slow log any queries that don’t use indexes, nomatter how quickly they execute.

queries that don’t use indexes can be frequent and very fast.Thus,logging them can cause the server to slow down, and even use a lot ofdisk space for the log.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

33 August 31, 2013 33 / 41

Page 34: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

Finer control over logging

The slow query log in MySQL 5.0 and earlier has a few limitationsthat make it useless for some purposes.

One problem is that its granularity is only in seconds, and theminimum value for long query time in MySQL 5.0 is one second.

For most interactive applications, this is way too long. If you’redeveloping a high-performance web application, you probably wantthe whole page to be generated in much less than a second, and thepage will probably issue many queries while it’s being generated.

In this context, a query that takes 150 milliseconds to execute wouldprobably be considered a very slow query indeed.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

34 August 31, 2013 34 / 41

Page 35: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

Another problem is that you cannot log all queries the server executesinto the slow log.

The general log does log all queries, but it logs them before they’reeven parsed, so it doesn’t contain information such as the executiontime, lock time, and number of rows examined. Only the slow logcontains that kind of information about a query.

Finally, if you enable the log queries not using indexes option, yourslow log may be flooded with entries for fast, efficient queries thathappen to do full table scans.

When profiling for the purpose of performance optimization, you’relooking for queries that cause the most work for the MySQL server.This doesn’t always mean slow queries, so the notion of logging“slow” queries might not be useful.

As an example, a 10-millisecond query that runs a 1,000 times persecond will load the server more than a 10-second query that runsonce every second. To identify such a problem, you’d need to logevery query and analyze the results.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

35 August 31, 2013 35 / 41

Page 36: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

It’s usually a good idea to look both at slow queries (even if they’renot executed often) and at the queries that, in total, cause the mostwork for the server.

This will help you find different types of problems, such as queriesthat cause a poor user experience.

patch to the MySQL server, based on work by Georg Richter, that letsyou specify slow query times in microseconds instead of seconds. Italso lets you log all queries to the slow log, by settinglong query time=0. The patch is available fromhttp://www.mysqlperformanceblog.com/mysql-patches/.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

36 August 31, 2013 36 / 41

Page 37: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

Using the slow query log to troubleshoot slow queries is not alwaysstraightforward. Although the log contains a lot of useful information,one very important bit of information is missing: an idea of why aquery was slow. Sometimes it’s obvious. If the log says 12,000,000rows were examined and 1,200,000 were sent to the client, you knowwhy it was slow to execute—it was a big query! However, it’s rarelythat clear.

Be careful not to read too much into the slow query log. If you seethe same query in the log many times, there’s a good chance that it’sslow and needs optimization. But just because a query appears in thelog doesn’t mean it’s a bad query, or even necessarily a slow one.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

37 August 31, 2013 37 / 41

Page 38: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

You may find a slow query, run it yourself, and find that it executes ina fraction of a second. Appearing in the log simply means the querytook a long time then; it doesn’t mean it will take a long time now orin the future. There are many reasons why a query can be slowsometimes and fast at other times:

– A table may have been locked, causing the query to wait. TheLock time indicates how long the query waited for locks to be released.

– The data or indexes may not have been cached in memory yet. This iscommon when MySQL is first started or hasn’t been well tuned.

– A backup process may have been running, making all disk I/O slower.– The server may have been running other queries at the same time,

slowing down this query.

As a result, you should view the slow query log as only a partial recordof what’s happened. You can use it to generate a list of possiblesuspects, but you need to investigate each of them in more depth.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

38 August 31, 2013 38 / 41

Page 39: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

Log analysis tools

mysqldumpslow– MySQL provides mysqldumpslow with the MySQL server.– It’s a Perl script that can summarize the slow query log and show you

how many times each query appears in the log.– That way, you won’t waste time trying to optimize a 30- second slow

query that runs once a day when there are many other shorter slowqueries that run thousands of time per day.

– the disadvantage is that it’s a little less flexible than some of the othertools. and it doesn’t understand logs from servers that are patchedwith the microsecond slow-log patch.

mysql slow log filter– This tool understand the microsecond log format.– You can use it to extract queries that are longer than a given threshold

or that examine more than a given number of rows.– It’s great for “tailing” your log file if you’re running the microsecond

patch, which can make your log grow too quickly to follow withoutfiltering.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

39 August 31, 2013 39 / 41

Page 40: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

mysql slow log parser

– This is another tool, available fromhttp://www.mysqlperformanceblog.com/files/utils/mysql slow log parser,that can aggregate the microsecond slow log.

– In addition to aggregating and reporting, it shows minimum andmaximum values for execution time and number of rows analyzed

mysqlsla

– The MySQL Statement Log Analyzer, available fromhttp://hackmysql.com/ mysqlsla, can analyze not only the slow log butalso the general log and “raw” logs containing delimited SQLstatements.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

40 August 31, 2013 40 / 41

Page 41: Finding Bottlenecks: Benchmarking and Profiling · 2020. 11. 4. · ect your actual application’s behavior, which is hard to do when you’re testing only ... You want to avoid

Profiling

Thank You.

Nilesh Birari 123059015 (IIT Bombay)Finding Bottlenecks: Benchmarking and Profiling

41 August 31, 2013 41 / 41