Scalability Happiness – A Quiet Query Log
There’s a lot of talk on the web about scalability. Making web applications scale is not easy. The modern web architecture has so many moving parts. How can we grapple with the underlying problem?
The LAMP Stack Scales Well
The truth is half right. True there are a lot of moving parts and a lot to setup. The internet stack is made up of Linux, Apache, MySQL & PHP. LAMP as it’s called, was built to be resilient, dynamic, and scalable. It’s essentially why Amazon works. Why what they’re doing is possible? Windows & .NET for example don’t scale well. Strange to see Oracle mating with them, but I digress…
Linux and LAMP that is built on top of it, are highly scalable and dynamic to begin with. |
Ok, so what’s this got to do with MySQL? Well, a LOT.
The webserver tier, the caching layers like memcache & varnish, as well as the search tier solr. These all scale fairly easily because their assets are fixed. Or almost so.
The database tier is different. So, what affects the performance of a database server? Server size? Main memory? Disk speed? The truth is all of those. But
After you setup the server – set memory settings and so forth, it’s a fairly fixed object. True there are parameters to tweak but on the whole, there isn’t a ton of day-to-day tuning to do.
Well, if that’s true, why does performance take a hit?! As applications grow, the db server slows down, don’t we need to tweak server settings? Do we need new hardware?
Read this: A CTO Must Never Do This
The answer is possibly, but 9 times out of 10 what really needs to happen is queries must be tuned.
In 17 years of consulting that is the single largest cause of scalability problems. Fix those queries and your problems are over. |
The Elephant in The Room – Query Tuning
I was talking with a colleague today at AppNexus. He said, so should we do some of that work inside the application, instead of doing a huge UNION or a large JOIN? I said yes you can move work onto the application, but it makes the application more complex. On the flip side, the webserver tier is easier to scale. So, there are tradeoffs.
I said this:
By and large, if scalability is our goal, we should work to quiet the activity in the slow query log. This is an active project for developers & DBAs. Keep it quiet and your server will run well. |
Yet I still talk to teams where this is mysterious. It’s unclear. There’s no conviction there. And that’s where I think DBAs are failing. Because this is our subject matter expertise, and if we haven’t convinced developer teams of this, we’re not working together enough. API teams aren’t separate from DBA and operations. Siloing technology departments is a killer…
As you roll out new code, if some queries show up, then those need attention. Tweak the code until the queries drop out. This is the primary project of scalability.
When Should I Think About Upgrading Hardware?
If your code is stable, but you’re seeing a steady line rising on load average of the server, *THEN* go up in hardware. Load average means cpu & disk are being taxed. The server can’t keep up.
Devops Means Work Together! | Conclusion
I close with a final point. Devops means bring dev & ops together! Don’t silo them off in different wings. Communicate. DBAs it’s your job to educate Developers about scalability and help with query tuning. Devs, profile new SQL code, test with large datasets & for god sakes don’t use an ORM – it’s one of 5 things toxic to scalability. Run explain and be sure to index all the right columns.
Together we can tackle this scalability thing!