Properties:
| Applicable To | InnoDB | |||||
| Server Startup Option | --innodb_thread_concurrency=<value> | |||||
| Scope | Global | |||||
| Dynamic | Yes | |||||
| Possible Values |
Integer: Range: 0 - 1000 Interpretation:
|
Properties:
| Applicable To | InnoDB | |||||
| Server Startup Option | --innodb_thread_concurrency=<value> | |||||
| Scope | Global | |||||
| Dynamic | Yes | |||||
| Possible Values |
Integer: Range: 0 - 1000 Interpretation:
|
Properties:
| Applicable To | InnoDB |
| Server Startup Option | --innodb_buffer_pool_size=<value> |
| Scope | Global |
| Dynamic | No |
| Possible Values |
Integer Range: 1048576 (1MB) - 4294967295 (4GB) (more for 64 bit machines) |
| Default Value | 8388608 (8MB) |
| Category | Performance |
Description:
One of the Peter's "what to …
[Read more]Here is a situation I’ve run into a few times when dealing with mysql databases. We’re trying to run a one-off query against a high-traffic, large table and the WHERE condition is against a non-indexed field. Let’s say our table is 5GB in size. We issue the following:
SELECT count(*) from five_gb_myisam_table WHERE
non_idx_field = 'asdf';
and we wait…
and wait some more.
5GB is not a small table, but this ideally should not take more than a few minutes on a relatively modern system.
iostat is your friend
In cases like this, iostat -x 5 is your friend.
While the query was running, this was a typical 5 second
interval:
avg-cpu: %user %nice %sys %iowait %idle
2.30 0.00 1.30 96.40 0.00
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz
avgqu-sz await svctm %util
sda 0.00 0.70 …
Using callstacks to look at code is very useful. If you are not familiar with callstacks, I suggest you read my earlier blog about it. I was trying to understand the mysql code path using sysbench as the test and found something interesting. An image of the callstack is shown below. The SVG version, with much more information, is also available . The width of the block is proportional to the time it took for the function, and the height is the level (or depth) of the stack.
Mysql uses mysql_execute_command() to execute queries. Looking at the callstack you can see very clearly that mysql_execute_command() calls open_and_lock_tables which then tries to open tables via open_table(). The code path gets interesting here. As you can see in the image …
[Read more]Using callstacks to look at code is very useful. If you are not familiar with callstacks, I suggest you read my earlier blog about it. I was trying to understand the mysql code path using sysbench as the test and found something interesting. An image of the callstack is shown below. The SVG version, with much more information, is also available . The width of the block is proportional to the time it took for the function, and the height is the level (or depth) of the stack.
Mysql uses mysql_execute_command() to execute queries. Looking at the callstack you can see very clearly that mysql_execute_command() calls open_and_lock_tables which then tries to open tables via open_table(). The code path gets interesting here. As you can see in the …
[Read more]Using callstacks to look at code is very useful. If you are not familiar with callstacks, I suggest you read my earlier blog about it. I was trying to understand the mysql code path using sysbench as the test and found something interesting. An image of the callstack is shown below. The SVG version, with much more information, is also available . The width of the block is proportional to the time it took for the function, and the height is the level (or depth) of the stack.
Mysql uses mysql_execute_command() to execute queries. Looking at the callstack you can see very clearly that mysql_execute_command() calls open_and_lock_tables which then tries to open tables via open_table(). The code path gets interesting here. As you can see in …
[Read more]There's a relatively little known feature about Linux IO scheduling that has a pretty significant effect in large scale database deployments at least with MySQL that a recent article on MySQL Performance Blog prompted me to write about. This may have an effect on other databases and random I/O systems as well, but we've definitely seen it with MySQL 5.0 on RHEL 4 platform. I have not studied this on RHEL 5, and since the IO subsystem and the Completely Fair Queue scheduler that is default on RHEL kernels has received further tuning since, I can not say if it still exists.
Though I've heard YouTube discovered these same things, …
[Read more]Properties:
| Engine(s) | MyISAM |
| Server Startup Option | --key_buffer_size=<value> |
| Scope | Global |
| Dynamic | Yes |
| Possible Values |
Integer Range: 8 - 4294967295 (4 GB) |
| Default Value | 131072 (128 KB) |
| Category | Performance |
Description:
This is a global buffer where MySQL caches frequently used blocks of index data for MyISAM data. Maximum allowed size is 4GB on a 32 bit platform. Greater values are permitted for 64-bit platforms beyond MySQL …
[Read more]
The MySQL User's
conference will be held in less than a month from
now!!!
This year there is quite a good number of sessions on adding your own functions and procedures, such
as:
We’ve been running into a problem with one client:
SELECT COUNT(*) FROM tbl;
takes 0.25 seconds on one db, and 0.06 seconds on another.
Consistently. That’s a fourfold difference.
There aren’t any significant configuration differences (like query cache, etc.), the software versions are the same, and the table fits into memory. This has been looked at by at least 3 in-house MySQL experts, and the only thing we can determine is that it’s a hardware difference.
The table fits into memory so it’s not a disk issue, and the only other difference among the hardware is that the slower machine has Solaris virtualization in place in the form of “containers” (cpu is the same, etc). Is this something that’s known to cause issues with speed? The “tbl” in question is an InnoDB table, if that means anything. Is there something like the “speed” of RAM?
Note that Sun has already been …
[Read more]