Tuning MySQL Database

I am having a MySQL database which is running on a dedicated Ubuntu server having 2GB RAM and 500GB hard drive. I appreciate if anyone could help on fine tuning the database to increase the performance. Enhancements need to impact on CRUD tasks of the database, including procedure calls' and scheduled events' performances.

I have done searches on the web regarding this and found various mechanisms, tools and etc in various websites to do the job. But I need to know the proper way of escalating the performance (ex: execution time of an SQL query and etc) of a MySQL database itself without using any 3rd party tools or software. The database configurations which I am having are listed below.

MySQL version: 5.5
Used storage engine: MyISAM
Operating system: Ubuntu 12
Hard disk capacity: 500GB
Other: The database consists of Tables, Indexes, Stored Procedures, Scheduled Events and Views


You have said nothing about the specifics of your data, its distribution, the type of workload you use, the ratio of reads to writes, the variety of your queries, the complexity of your queries, and so on. This is a vital part of the tuning process for one simple reason:

Tuning is specific to your data and your workload.

The guys who make database platforms such as MySQL pay a lot of attention to making sure the default settings are good enough for the majority of users. If there was some easy route to improving the performance of a database, they'd already have done it at the factory.

The guys who make the third party tools, on the other hand, write code that reads your data and your logs to find out information about your tables, their contents, and your queries, and that code makes best-guess estimates about tuning based on your data and your workload. They're not perfect, but they sure beat having to do that stuff manually if you don't know how to.

Think of tuning a database like tuning a guitar: You start with an idea of what you want (Standard tuning? Drop D? DADGAD?) and then you make small adjustments to one string at a time, measuring it against your desired result. Once you've achieved the best possible result for that string, you move onto the next one and make small changes there etc. When you get to the final string, you might have adjusted the balance of the whole guitar so you might have to revisit the settings from the beginning to make tiny incremental changes until the whole lot is singing perfectly.

Read http://dev.mysql.com/doc/refman/5.5/en/server-parameters.html to get started on the most important "strings" to tune in MySQL 5.5. There are lots, but none of them are particularly difficult on their own.

As a tangent, tuning your server away from the defaults might give you a 5-10% boost in performance. You'd be much better spending your time looking at your database design, data types, and the indexes you're using. You can often make 50%-100% improvements in performance by doing that sort of thing.

You should find http://www.mysqlcalculator.com/ helpful for starters.

This will show you some critical general defaults and allow you to enter your own values as displayed by SHOW GLOBAL VARIABLES to calculate MySQL maximum memory usage.

This will only scratch the surface - and will be enlightening.

There is NO simple answer.

Need Your Help

Match facebook campaign objective with insights actions types

facebook facebook-graph-api facebook-php-sdk facebook-ads-api facebook-marketing-api

Facebook campaigns have an objective among those listed here (PAGE_LIKES, VIDEO_VIEWS, etc).

search results and facet results do not match

filter elasticsearch facets

I'm doing phrase_prefix search for 'engineer' and I get 36 count for term 'Engineering' in 'skills' field facet. Next I apply a term filter on that facet field for 'Engineering' and in the new filt...