Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Uses a PHP array instead of parsing a TXT file. Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
- Loading branch information
1 parent
5d5f149
commit 51ae4fa
Showing
9 changed files
with
973 additions
and
604 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
// phpcs:disable Generic.Files.LineLength.TooLong | ||
return [ | ||
// Query cache | ||
[ | ||
'name' => 'Query cache disabled', | ||
'formula' => 'query_cache_size', | ||
'test' => 'value == 0 || query_cache_type == \'OFF\' || query_cache_type == \'0\'', | ||
'issue' => 'The query cache is not enabled.', | ||
'recommendation' => 'The query cache is known to greatly improve performance if configured correctly. Enable it by setting {query_cache_size} to a 2 digit MiB value and setting {query_cache_type} to \'ON\'. <b>Note:</b> If you are using memcached, ignore this recommendation.', | ||
'justification' => 'query_cache_size is set to 0 or query_cache_type is set to \'OFF\'', | ||
], | ||
[ | ||
'name' => 'Query cache efficiency (%)', | ||
'precondition' => 'Com_select + Qcache_hits > 0 && !fired(\'Query cache disabled\')', | ||
'formula' => 'Qcache_hits / (Com_select + Qcache_hits) * 100', | ||
'test' => 'value < 20', | ||
'issue' => 'Query cache not running efficiently, it has a low hit rate.', | ||
'recommendation' => 'Consider increasing {query_cache_limit}.', | ||
'justification' => 'The current query cache hit rate of %s% is below 20% | round(value,1)', | ||
], | ||
[ | ||
'name' => 'Query Cache usage', | ||
'precondition' => '!fired(\'Query cache disabled\')', | ||
'formula' => '100 - Qcache_free_memory / query_cache_size * 100', | ||
'test' => 'value < 80', | ||
'issue' => 'Less than 80% of the query cache is being utilized.', | ||
'recommendation' => 'This might be caused by {query_cache_limit} being too low. Flushing the query cache might help as well.', | ||
'justification' => 'The current ratio of free query cache memory to total query cache size is %s%. It should be above 80% | round(value,1)', | ||
], | ||
[ | ||
'name' => 'Query cache fragmentation', | ||
'precondition' => '!fired(\'Query cache disabled\')', | ||
'formula' => 'Qcache_free_blocks / (Qcache_total_blocks / 2) * 100', | ||
'test' => 'value > 20', | ||
'issue' => 'The query cache is considerably fragmented.', | ||
'recommendation' => 'Severe fragmentation is likely to (further) increase Qcache_lowmem_prunes. This might be caused by many Query cache low memory prunes due to {query_cache_size} being too small. For a immediate but short lived fix you can flush the query cache (might lock the query cache for a long time). Carefully adjusting {query_cache_min_res_unit} to a lower value might help too, e.g. you can set it to the average size of your queries in the cache using this formula: (query_cache_size - qcache_free_memory) / qcache_queries_in_cache', | ||
'justification' => 'The cache is currently fragmented by %s% , with 100% fragmentation meaning that the query cache is an alternating pattern of free and used blocks. This value should be below 20%. | round(value,1)', | ||
], | ||
[ | ||
'name' => 'Query cache low memory prunes', | ||
'precondition' => 'Qcache_inserts > 0 && !fired(\'Query cache disabled\')', | ||
'formula' => 'Qcache_lowmem_prunes / Qcache_inserts * 100', | ||
'test' => 'value > 0.1', | ||
'issue' => 'Cached queries are removed due to low query cache memory from the query cache.', | ||
'recommendation' => 'You might want to increase {query_cache_size}, however keep in mind that the overhead of maintaining the cache is likely to increase with its size, so do this in small increments and monitor the results.', | ||
'justification' => 'The ratio of removed queries to inserted queries is %s%. The lower this value is, the better (This rules firing limit: 0.1%) | round(value,1)', | ||
], | ||
[ | ||
'name' => 'Query cache max size', | ||
'precondition' => '!fired(\'Query cache disabled\')', | ||
'formula' => 'query_cache_size', | ||
'test' => 'value > 1024 * 1024 * 128', | ||
'issue' => 'The query cache size is above 128 MiB. Big query caches may cause significant overhead that is required to maintain the cache.', | ||
'recommendation' => 'Depending on your environment, it might be performance increasing to reduce this value.', | ||
'justification' => 'Current query cache size: %s | ADVISOR_formatByteDown(value, 2, 2)', | ||
], | ||
[ | ||
'name' => 'Query cache min result size', | ||
'precondition' => '!fired(\'Query cache disabled\')', | ||
'formula' => 'query_cache_limit', | ||
'test' => 'value == 1024*1024', | ||
'issue' => 'The max size of the result set in the query cache is the default of 1 MiB.', | ||
'recommendation' => 'Changing {query_cache_limit} (usually by increasing) may increase efficiency. This variable determines the maximum size a query result may have to be inserted into the query cache. If there are many query results above 1 MiB that are well cacheable (many reads, little writes) then increasing {query_cache_limit} will increase efficiency. Whereas in the case of many query results being above 1 MiB that are not very well cacheable (often invalidated due to table updates) increasing {query_cache_limit} might reduce efficiency.', | ||
'justification' => 'query_cache_limit is set to 1 MiB', | ||
], | ||
]; |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
return [ | ||
[ | ||
'name' => 10, | ||
'formula' => 11, | ||
'test' => 12, | ||
'issue' => 13, | ||
'recommendation' => 14, | ||
'justification' => 15, | ||
], | ||
[ | ||
'name' => 17, | ||
'precondition' => 17, | ||
'formula' => 18, | ||
'test' => 19, | ||
'issue' => 20, | ||
'recommendation' => 21, | ||
'justification' => 22, | ||
], | ||
[ | ||
'name' => 24, | ||
'precondition' => 24, | ||
'formula' => 25, | ||
'test' => 26, | ||
'issue' => 27, | ||
'recommendation' => 28, | ||
'justification' => 29, | ||
], | ||
[ | ||
'name' => 31, | ||
'precondition' => 31, | ||
'formula' => 32, | ||
'test' => 33, | ||
'issue' => 34, | ||
'recommendation' => 35, | ||
'justification' => 36, | ||
], | ||
[ | ||
'name' => 38, | ||
'precondition' => 38, | ||
'formula' => 39, | ||
'test' => 40, | ||
'issue' => 41, | ||
'recommendation' => 42, | ||
'justification' => 43, | ||
], | ||
[ | ||
'name' => 45, | ||
'precondition' => 45, | ||
'formula' => 46, | ||
'test' => 47, | ||
'issue' => 48, | ||
'recommendation' => 49, | ||
'justification' => 50, | ||
], | ||
[ | ||
'name' => 52, | ||
'precondition' => 52, | ||
'formula' => 53, | ||
'test' => 54, | ||
'issue' => 55, | ||
'recommendation' => 56, | ||
'justification' => 57, | ||
], | ||
]; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.