How to Calculate MySQL Hit Rates

Download Report

Transcript How to Calculate MySQL Hit Rates

HOW TO CALCULATE
MYSQL HIT RATES
By Will Mayall
27-April-2015
1
7/21/2015

mysql> use information_schema;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like
'KEY_READ_REQUESTS' into @KEY_READ_REQUESTS;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like 'KEY_READS'
into @KEY_READS;

select 1 - (@KEY_READS/@KEY_READ_REQUESTS) * 1 AS KEY_CACHE_HIT_RATE;

+--------------------+

| KEY_CACHE_HIT_RATE |

+--------------------+

| 0.9975138662972965 |

+--------------------+

1 row in set (0.00 sec)

mysql>
CALCULATE KEY CACHE HIT RATE
2
7/21/2015

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like
'Key_write_requests' into @Key_write_requests;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like 'Key_writes'
into @Key_writes;

select 1 - (@Key_writes/@Key_write_requests) * 1 AS KEY_CACHE_WRITES;

+-------------------+

| KEY_CACHE_WRITES

+-------------------+

| 0.978793901714135 |

+-------------------+

1 row in set (0.00 sec)

mysql>
|
CACULATE KEY CACHE WRITES
3
7/21/2015

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like 'QCACHE_HITS' into
@VALUE1;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like 'QCACHE_INSERTS' into
@VALUE2;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like 'COM_SELECT' into
@VALUE3;

select @VALUE1/(@VALUE1 + @VALUE2) as QCACHE_HITS;

+--------------------+

| QCACHE_HITS

+--------------------+

| 0.3814596043317718 |

+--------------------+

1 row in set (0.00 sec)

mysql>
|
CALCULATE QUERY CACHE HIT RATE
4
7/21/2015

mysql> select @VALUE1/(@VALUE1 + @VALUE3) as OVERALL_QCACHE_HITS;

+---------------------+

| OVERALL_QCACHE_HITS |

+---------------------+

| 0.37696441588220664 |

+---------------------+

1 row in set (0.00 sec)

mysql>
CONTINUED…
5
7/21/2015

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like 'Select_full_join' into
@Select_full_join;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like 'Select_range_check' into
@Select_range_check;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like 'Select_scan' into @Select_scan;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like 'Com_select' into @Com_select;

select 1 - (@Select_full_join+@Select_range_check+@Select_scan)/(@Com_select) * 1 AS HEAVY_JOIN_RATE;

+--------------------+

| HEAVY_JOIN_RATE

+--------------------+

| 0.9969589922564667 |

+--------------------+

1 row in set (0.00 sec)

mysql>
|
CALCULATE HEAVY JOINS
6
7/21/2015

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like
'Created_tmp_disk_tables' into @Created_tmp_disk_tables;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like
'Created_tmp_tables' into @Created_tmp_tables;

select 1 - (@Created_tmp_disk_tables/@Created_tmp_tables) * 1 AS
TMP_TABLE_HIT_RATE;

+--------------------+

| TMP_TABLE_HIT_RATE |

+--------------------+

| 0.6969795037756203 |

+--------------------+

1 row in set (0.00 sec)

mysql>
CALCULATE TMP TABLE HIT RATE
7
7/21/2015

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like
'Threads_created' into @Threads_created;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like 'Connections'
into @Connections;

select 1- (@Threads_created/@Connections) * 1 AS THREAD_CACHE_HIT_RATE;

+-----------------------+

| THREAD_CACHE_HIT_RATE |

+-----------------------+

|

+-----------------------+

1 row in set (0.00 sec)

mysql>
0.9999125421801777 |
CALCULATE THREAD CACHE HIT RATE
8
7/21/2015

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like 'Handler_read_rnd'
into @Handler_read_rnd;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like
'Handler_read_rnd_next' into @Handler_read_rnd_next;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like 'Handler_read_last'
into @Handler_read_last;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like 'Handler_read_next'
into @Handler_read_next;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like 'Handler_read_prev'
into @Handler_read_prev;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like 'Handler_read_rnd'
into @Handler_read_rnd;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like
'Handler_read_rnd_next' into @Handler_read_rnd_next;

select 1 (@Handler_read_rnd+@Handler_read_rnd_next)/(@Handler_read_rnd+@Handler_read_rnd_next+@H
andler_read_last+@Handler_read_next+@Handler_read_prev+@Handler_read_rnd+@Handler_read_
rnd_next) * 1 AS INDEX_HIT_RATE;
CALCULATE INDEX HIT RATE
9
7/21/2015

+--------------------+

| INDEX_HIT_RATE

+--------------------+

| 0.9369443667114482 |

+--------------------+

1 row in set (0.00 sec)

mysql>
|
CONTINUED…
10
7/21/2015

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like
'innodb_buffer_pool_reads' into @VALUE10;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like
'innodb_buffer_pool_read_requests' into @innodb_buffer_pool_read_requests;

select 1 - (@VALUE10/@innodb_buffer_pool_read_requests) * 1 AS
INNODB_BUFFER_POOL_HIT_RATE;

+-----------------------------+

| INNODB_BUFFER_POOL_HIT_RATE |

+-----------------------------+

|

+-----------------------------+

1 row in set (0.00 sec)

mysql>
0.9999993741148261 |
CALCULATE INNODB BUFFER POOL
HIT RATE
11
7/21/2015

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like
'innodb_buffer_pool_pages_data' into @VALUE11;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like
'innodb_buffer_pool_pages_total' into @VALUE12;

select 1 - (@VALUE11/@VALUE12) * 1 AS INNODB_BUFFER_POOL_USAGE;

+--------------------------+

| INNODB_BUFFER_POOL_USAGE |

+--------------------------+

|

+--------------------------+

1 row in set (0.00 sec)

mysql>
0.9084971309974362 |
CALCULATE BUFFER POOL USAGE
12
7/21/2015

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like
'innodb_buffer_pool_wait_free' into @VALUE13;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like
'innodb_buffer_pool_write_requests' into @VALUE14;

select 1 - (@VALUE13/@VALUE14) * 1 AS INNODB_CACHE_WRITE_HIT_RATE;

+-----------------------------+

| INNODB_CACHE_WRITE_HIT_RATE |

+-----------------------------+

|

+-----------------------------+

1 row in set (0.00 sec)

mysql>
1 |
CALCULATE INNODB CACHE WRITE
HIT RATE
13
7/21/2015

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like
'innodb_log_writes' into @VALUE15;

select VARIABLE_VALUE from GLOBAL_STATUS where VARIABLE_NAME like
'innodb_log_write_requests' into @VALUE16;

select 1 - (@VALUE15/@VALUE16) * 1 AS INNODB_LOG_CACHE_HIT_RATE;

+---------------------------+

| INNODB_LOG_CACHE_HIT_RATE |

+---------------------------+

|

+---------------------------+

1 row in set (0.00 sec)

mysql>
0.8735020135258925 |
CALCULATE LOG CACHE HIT RATE
14
7/21/2015

SELECT
innodb_os_log_written_per_minute*60

AS estimated_innodb_os_log_written_per_hour,

CONCAT(ROUND(innodb_os_log_written_per_minute*60/1024/1024/2, 1), 'MB')

AS a_good_value_for_innodb_log_size_value


FROM
(SELECT SUM(value) AS innodb_os_log_written_per_minute FROM (

SELECT -VARIABLE_VALUE AS value


FROM INFORMATION_SCHEMA.GLOBAL_STATUS

WHERE VARIABLE_NAME = 'innodb_os_log_written'

UNION ALL

SELECT SLEEP(60)
FROM DUAL


UNION ALL

SELECT VARIABLE_VALUE

FROM INFORMATION_SCHEMA.GLOBAL_STATUS

WHERE VARIABLE_NAME = 'innodb_os_log_written'
) s1


) s2

;
CALCULATE THE BINARY LOG SIZE
15
7/21/2015

+------------------------------------------+----------------------------------------+

| estimated_innodb_os_log_written_per_hour | a_good_value_for_innodb_log_size_value |

+------------------------------------------+----------------------------------------+

|

+------------------------------------------+----------------------------------------+

1 row in set (1 min 0.01 sec)

mysql>
11550720 | 5.5MB
|
CONTINUED…
16
7/21/2015