Big Data/Analytics Zone is brought to you in partnership with:

I specialise MySQL Server performance as well as in performance of application stacks using MySQL, especially LAMP. Web sites handling millions of visitors a day dealing with terabytes of data and hundreds of servers is king of applications I love the most. Peter is a DZone MVB and is not an employee of DZone and has posted 272 posts at DZone. You can read more from them at their website. View Full User Profile

Some Fun with R Visualization

  • submit to reddit
Originally posted by

In my previous post
, I finished with a graph with unstable results. Now let's explore some different ways to present those results. I enjoy working with R, and though I'm not even close to being proficient in it, I want to share some graphs you can build with R + ggplot2.

The conditions of the benchmark are the same as in the previous post, with the difference being that there are results for 4 and 16 tables cases running MySQL 5.5.20.

Let me remind you how I do measurements. I run benchmarks for 1 hours, with measurements every 10 seconds.
So we have 360 points – metrics.

If we draw them all, it will look like:

I will also show my R code:

m <- ggplot(dv.ver,
            aes(x = sec, Throughput, color=factor(Tables)))
m + geom_point()

The previous graph is not very representative, so we may add some lines to see a trend.


m + geom_point() + geom_line()


This looks better, but still you may have hard time answering: which case shows the better throughput? what number we should take as the final result?

Jitter graph may help:


m <- ggplot(dv.ver,
            aes(x = factor(Tables), Throughput, color=factor(Tables)))
m + geom_jitter(alpha=0.75)


With jitter we see some dense areas, which shows "most likely" throughput.

So let's build density graphs:


m <- ggplot(dd,
            aes(x = Throughput,fill=factor(Tables)))
m+geom_density(alpha = 0.7)



m+geom_density(alpha = 0.7)+facet_wrap(~Tables,ncol=1)


In these graphs Axe X is Throughput and Axe Y represents density of hitting given Throughput.

That may give you an idea how to compare both results, and that the biggest density is around 3600-3800 tps.

And we are moving to numbers, we can build boxplots:


m <- ggplot(dd,
            aes(x = factor(Tables),y=Throughput,fill=factor(Tables)))


That may not be easy to read if you never saw boxplots. There's good reading on this way to represent data. In short - the middle line inside a box is median (line that divides top 50% and bottom 50%), the line that limits the top of a box - 75% quantile (divides 75% bottom and 25% top results), and correspondingly - the line at the bottom of a box - 25% quantile (you should have an idea already what does that mean). You may decide what measurements you want to take to compare the results - median, 75%, etc.

And finally we can combine jitter and boxplot to get:

m <- ggplot(dd,
            aes(x = factor(Tables),y=Throughput,color=factor(Tables)))


That's it for today.

The full script sysbench-4-16.R with data you can get on benchmarks launchpad

If you want to see more visualizations idea, you may check out Brendan's blog:

And if you're wondering what to do with such unstable results in MySQL, stay tuned. There is a solution.

Published at DZone with permission of Peter Zaitsev, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)