I have a Linux server that I use to run the DB of my application (MySql), the server have 8GB Ram and 4 cores. there are no other applications running on the server besides the MySql.

Most of the time the server disk I/O utilization is about 90-100%.

Here is some extra info:

Uptime: 2387312  Threads: 29  Questions: 344977869  Slow queries: 3380301  Opens: 200483225  Flush tables: 1  Open tables: 9  Queries per second avg: 144.504

the DB size is about 70GB, and if i had to define the queries type I would say 60% are plain queries and the rest are more complex (join few tables etc.)

I'm using New Relic go get the I/O utilization, according to Linode (where the server is hosted), the average I/O on the server is: IO rate of 10780 blocks per sec

is this normal?

  • 1
    Could be normal. Or then not. Please read your question and think about it one more time; if you would be the one answering, how on earth one could reply to you? You don't tell us anything useful; how big the databases are? How many queries/sec your server gets? What kind of queries they are - simple SELECTs or more complex queries with joins, unions...? Has the server always been like that or just recently started to perform lots of I/O? Be much more specific unless you want me to pick a random answer card. – Janne Pikkarainen Nov 11 '11 at 8:38
  • 1
    If it's really 100% it can't be normal. Which tool you use to monitor ? How it measures those percents ? – Sandman4 Nov 11 '11 at 8:40
  • added more info, hope the question is more focused now :) – Ran Nov 11 '11 at 9:00

The number of "slow queries" is a bit high. The disk load seems to indicate full table scans as well. My feeling is that your database is missing some indices on frequently used queries. Look closer at the queries - are they selection values from indexed tables?

| improve this answer | |

A pure guess: perhaps your server is generating lots of temporary tables to disk? Does SHOW GLOBAL STATUS LIKE '%tmp%'; return lots of disk tables created when compared to tmp tables?

If so, analyze the queries and/or consider raising tmp_table_size value if your server has room to breath memory-wise.

| improve this answer | |
  • Created_tmp_disk_tables = 61435, Created_tmp_tables = 5704248, is this a lot? – Ran Nov 11 '11 at 9:16
  • Not really, unless those have been created just recently and suddenly. :-) Around 1% of your queries lead to disk based temp tables. – Janne Pikkarainen Nov 11 '11 at 9:19
  • BTW, my current tmp_table_size is 16777216 – Ran Nov 11 '11 at 9:36

Most of the time the server disk I/O utilization is about 90-100%

Then your server is I/O-bound.

The usual solution is to add more disk I/O capacity (=spindles).

| improve this answer | |
  • ...or to improve the queries to reduce disk I/O. Sounds to me like a lot of full table scans. I say Indexes first, Spindles second. – ryandenki Dec 27 '11 at 1:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.