Useful knowledge, thank you, Shawn. Good to see confirmed that qcache_hits + 
com_select is the global total - that's not always very clear in the docs.

I just noticed that when I copied the list for extra exposure, I didn't 
actually say what I was exposing :-p

Gerhard Laußer, who maintains the check_mysql_health nagios plug-in, is 
currently re-factoring the code and has a poll open about whether to change the 
logic behind the query cache hit rate, and to what. The poll (and check) are at 
https://labs.consol.de/nagios/check_mysql_health/ .

/Johan

----- Original Message -----
> From: "Shawn Green" <shawn.l.gr...@oracle.com>
> To: "MySql" <mysql@lists.mysql.com>
> Sent: Friday, 15 July, 2016 18:30:39
> Subject: Re: check_mysql_health poll

> Excellent advice.
> 
> If you read through the code, you will find that every SELECT command
> will either hit the query cache (incrementing Qcache_hits) or require
> execution to evaluate (incrementing Com_select).  So for an average of
> your Query Cache efficiency since the last restart (or the last
> statistics reset) use this formula
> 
> Efficiency in % = (Qcache_hits)/(Qcache_hits + Com_select) * 100
> 
> To get an average efficiency over a span of time, execute a SHOW GLOBAL
> STATUS report at the start of the span and another at the end of the
> span then compute that formula comparing the changes in those counters
> (the deltas).
> 
> Another way to look at reuse rate is to estimate how quickly you are
> turning over the content of the Query Cache.  Let's say your
> Qcache_inserts rate is about 500/sec and on average you have about 5000
> queries in the cache.  This gives you a very rough lifetime of about 10
> seconds for any single query result in the cache.  If you are not seeing
> a lot of lowmem prunes during this period, then those existing query
> results are not being forced out of the cache due to space restrictions
> (age), they are most likely being removed automatically due to changes
> happening to the tables they are based on.
> 
> In most cases, you gain efficiency by removing the mutex that protects
> the content of the Query Cache and allowing all incoming commands to
> execute in parallel rather than being serialized via that cache mutex.
> You do this by setting --query-cache-type=0 (or OFF) not just by
> allocating no space to the buffer. This is particularly true if you
> * have a low reuse rate
> * have a high churn rate
> * do not have a large population of queries that are repeated (exactly)
> against sets of tables that change rarely.
> 
> --
> Shawn Green
> MySQL Senior Principal Technical Support Engineer
> Oracle USA, Inc. - Integrated Cloud Applications & Platform Services
> Office: Blountville, TN
> 
> Become certified in MySQL! Visit https://www.mysql.com/certification/
> for details.
> 
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/mysql

-- 
Unhappiness is discouraged and will be corrected with kitten pictures.

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql

Reply via email to