Maison base de données tutoriel mysql mysql的查询缓存说明

mysql的查询缓存说明

Jun 07, 2016 pm 05:55 PM
查询缓存

mysql的Query Cache有其特殊的业务场景,也不像其他数据库产品,缓存查询语句的执行计划等信息,而是直接缓存查询语句的记录集和对应的SQL语句

对mysql查询缓存从五个角度进行详细的分析:Query Cache的工作原理、如何配置、如何维护、如何判断查询缓存的性能、适合的业务场景分析。

工作原理

查询缓存的工作原理,基本上可以概括为:
缓存SELECT操作或预处理查询(注释:5.1.17开始支持)的结果集和SQL语句;
新的SELECT语句或预处理查询语句,先去查询缓存,判断是否存在可用的记录集,判断标准:与缓存的SQL语句,是否完全一样,区分大小写;

查询缓存对什么样的查询语句,无法缓存其记录集,大致有以下几类:
查询语句中加了SQL_NO_CACHE参数;
查询语句中含有获得值的函数,包涵自定义函数,如:CURDATE()、GET_LOCK()、RAND()、CONVERT_TZ等;
对系统数据库的查询:mysql、information_schema
查询语句中使用SESSION级别变量或存储过程中的局部变量;
查询语句中使用了LOCK IN SHARE MODE、FOR UPDATE的语句
查询语句中类似SELECT …INTO 导出数据的语句;
事务隔离级别为:Serializable情况下,所有查询语句都不能缓存;
对临时表的查询操作;
存在警告信息的查询语句;
不涉及任何表或视图的查询语句;
某用户只有列级别权限的查询语句;

查询缓存的优缺点:

不需要对SQL语句做任何解析和执行,当然语法解析必须通过在先,直接从Query Cache中获得查询结果;
查询缓存的判断规则,不够智能,也即提高了查询缓存的使用门槛,降低其效率;
Query Cache的起用,会增加检查和清理Query Cache中记录集的开销,而且存在SQL语句缓存的表,每一张表都只有一个对应的全局锁;

配置

是否启用mysql查询缓存,可以通过2个参数:query_cache_type和query_cache_size,其中任何一个参数设置为0都意味着关闭查询缓存功能,但是正确的设置推荐query_cache_type=0。

query_cache_type
值域为:0 -– 不启用查询缓存;
值域为:1 -– 启用查询缓存,只要符合查询缓存的要求,客户端的查询语句和记录集斗可以
缓存起来,共其他客户端使用;
值域为:2 -– 启用查询缓存,只要查询语句中添加了参数:sql_cache,且符合查询缓存的要求,客户端的查询语句和记录集,则可以缓存起来,共其他客户端使用;

query_cache_size
允许设置query_cache_size的值最小为40K,对于最大值则可以几乎认为无限制,实际生产环境的应用经验告诉我们,该值并不是越大, 查询缓存的命中率就越高,也不是对服务器负载下降贡献大,反而可能抵消其带来的好处,甚至增加服务器的负载,至于该如何设置,下面的章节讲述,推荐设置 为:64M;

query_cache_limit
限制查询缓存区最大能缓存的查询记录集,可以避免一个大的查询记录集占去大量的内存区域,而且往往小查询记录集是最有效的缓存记录集,默认设置为1M,建议修改为16k~1024k之间的值域,不过最重要的是根据自己应用的实际情况进行分析、预估来设置;

query_cache_min_res_unit
设置查询缓存分配内存的最小单位,要适当地设置此参数,可以做到为减少内存块的申请和分配次数,但是设置过大可能导致内存碎片数值上升。默认值为4K,建议设置为1k~16K

query_cache_wlock_invalidate
该参数主要涉及MyISAM引擎,若一个客户端对某表加了写锁,其他客户端发起的查询请求,且查询语句有对应的查询缓存记录,是否允许直接读取查询缓存的记录集信息,还是等待写锁的释放。默认设置为0,也即允许;

维护

查询缓区的碎片整理

查询缓存使用一段时间之后,一般都会出现内存碎片,为此需要监控相关状态值,并且定期进行内存碎片的整理,碎片整理的操作语句:FLUSH QUERY CACHE;

清空查询缓存的数据
那些操作操作可能触发查询缓存,把所有缓存的信息清空,以避免触发或需要的时候,知道如何做,二类可触发查询缓存数据全部清空的命令:
(1).RESET QUERY CACHE;
(2).FLUSH TABLES;

性能监控

碎片率
查询缓存内存碎片率=Qcache_free_blocks / Qcache_total_blocks * 100%

命中率
查询缓存命中率=(Qcache_hits – Qcache_inserts) / Qcache_hits * 100%

内存使用率
查询缓存内存使用率=(query_cache_size – Qcache_free_memory) / query_cache_size * 100%

Qcache_lowmem_prunes
该参数值对于检测查询缓存区的内存大小设置是否,有非常关键性的作用,其代表的意义为:查询缓存去因内存不足而不得不从查询缓存区删除的查询缓存信息,删除算法为LRU;
query_cache_min_res_unit

内存块分配的最小单元非常重要,设置过大可能增加内存碎片的概率发生,太小又可能增加内存分配的消耗,为此在系统平稳运行一个阶段性后,可参考公式的计算值:
查询缓存最小内存块 = (query_cache_size – Qcache_free_memory) / Qcache_queries_in_cache
query_cache_size

我们如何判断query_cache_size是否设置过小,依然也只有先预设置一个值,推荐为:32M~128M之间的区域,待系统平稳运行一个时间段(至少1周),并且观察这周内的相关状态值:
(1).Qcache_lowmem_prunes;
(2).命中率;
(3).内存使用率;

若整个平稳运行期监控获得的信息,为命中率高于80%,内存使用率超过80%,并且Qcache_lowmem_prunes的值不停地增加,而且增加的数值还较大,则说明我们为查询缓冲区分配的内存过小,可以适当地增加查询缓存区的内存大小;

若是整个平稳运行期监控获得的信息,为命中率低于40%,Qcache_lowmem_prunes的值也保持一个平稳状态,则说明我们的查询缓冲区的内 存设置过大,或者说业务场景重复执行一样查询语句的概率低,同时若还监测到一定量的freeing items,那么必须考虑把查询缓存的内存条小,甚至关闭查询缓存功能;

业务场景

通过上述的知识梳理和分析,我们至少知道查询缓存的以下几点:
查询缓存能够加速已经存在缓存的查询语句的速度,可以不用重新解析和执行而获得正确得记录集;
查询缓存中涉及的表,每一个表对象都有一个属于自己的全局性质的锁;
表若是做DDL、FLUSH TABLES 等类似操作,触发相关表的查询缓存信息清空;
表对象的DML操作,必须优先判断是否需要清理相关查询缓存的记录信息,将不可避免地出现锁等待事件;
查询缓存的内存分配问题,不可避免地产生一些内存碎片;
查询缓存对是否是一样的查询语句,要求非常苛刻,而且还不智能;

我们再重新回到本节的重点上,查询缓存适合什么样的业务场景呢?只要是清楚了查询缓存的上述优缺点,就不难罗列出来,业务场景要求:
整个系统以读为主的业务,比如门户型、新闻类、报表型、论坛等网站;
查询语句操作的表对象,非频繁地进行DML操作,可以使用query_cache_type=2模式,然后SQL语句加SQL_CACHE参数指定;

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment optimiser les performances de MySQL avec la mise en cache des requêtes Comment optimiser les performances de MySQL avec la mise en cache des requêtes May 11, 2023 pm 05:51 PM

MySQL est l'une des bases de données relationnelles couramment utilisées, et la haute disponibilité et les performances sont cruciales dans les applications. La mise en cache des requêtes est une stratégie d'optimisation des performances importante dans MySQL. Elle peut éviter les requêtes de base de données non valides et améliorer l'efficacité des requêtes. Cet article explique comment optimiser les performances de MySQL grâce à la mise en cache des requêtes. 1. Qu'est-ce que le cache de requêtes ? La mise en cache des requêtes consiste à mettre en cache les résultats des instructions SELECT dans MySQL Lorsque la même instruction SELECT est demandée, les résultats sont obtenus directement à partir du cache sans qu'il soit nécessaire d'interroger les données.

Améliorez les performances en utilisant le cache de requêtes MySQL Améliorez les performances en utilisant le cache de requêtes MySQL May 11, 2023 am 08:31 AM

Avec l’augmentation du volume et de l’accès aux données, les problèmes de performances des bases de données sont devenus un goulot d’étranglement pour de nombreux sites Web. Dans de nombreux cas, les requêtes de base de données sont l’une des opérations les plus gourmandes en ressources sur un site Web. En tant que système de gestion de bases de données relationnelles open source, MySQL est devenu la base de données de choix pour de nombreux sites Web. Dans MySQL, le cache de requêtes est un mécanisme de mise en cache qui peut améliorer considérablement les performances des requêtes. Cet article présentera le fonctionnement du cache de requêtes MySQL et fournira quelques suggestions pratiques pour vous aider à mieux utiliser le cache de requêtes MySQL.

Conseils d'optimisation des requêtes de base de données PHP : améliorez l'expérience de recherche Conseils d'optimisation des requêtes de base de données PHP : améliorez l'expérience de recherche Sep 18, 2023 pm 04:34 PM

Compétences d'optimisation des requêtes de base de données PHP : améliorer l'expérience de recherche Résumé : Cet article présentera certaines compétences d'optimisation des requêtes de base de données PHP pour aider les développeurs à améliorer l'expérience de recherche dans des projets réels. Il comprend des méthodes d'optimisation pour l'utilisation des index, la conception appropriée des structures de bases de données et l'écriture d'instructions de requête efficaces, et fournit des exemples de code spécifiques. Introduction : Dans le développement d'applications Web, les opérations de base de données sont l'un des maillons incontournables. L'opération de requête est l'une des opérations les plus fréquentes dans la base de données, notamment dans la fonction de recherche. Par conséquent, l’optimisation des requêtes de base de données ne

Cinq techniques pour améliorer les performances de recherche dans la base de données PHP Cinq techniques pour améliorer les performances de recherche dans la base de données PHP Sep 18, 2023 pm 02:07 PM

Résumé de cinq techniques pour améliorer les performances de recherche dans les bases de données PHP : Avec le développement continu des applications Web, les performances de recherche dans les bases de données sont devenues un problème important auquel les développeurs doivent prêter attention. Lorsque nous utilisons PHP pour les recherches dans des bases de données, nous pouvons utiliser certaines techniques efficaces pour améliorer les performances. Cet article présentera cinq techniques pour améliorer les performances de recherche dans la base de données PHP et fournira des exemples de code spécifiques. Utilisation des index L'ajout d'index à votre base de données peut grandement améliorer les performances de recherche. Les index peuvent accélérer les requêtes de base de données et réduire le temps d'analyse des données. Pour les recherches fréquentes

Comment implémenter l'optimisation sous-jacente de MySQL : utilisation du cache de requêtes et analyse des performances Comment implémenter l'optimisation sous-jacente de MySQL : utilisation du cache de requêtes et analyse des performances Nov 08, 2023 pm 07:35 PM

Comment réaliser l'optimisation sous-jacente de MySQL : utilisation du cache de requêtes et analyse des performances MySQL est un système de gestion de base de données relationnelle couramment utilisé dans les scénarios avec de grandes quantités de données, l'optimisation des performances de la base de données est très importante. Parmi eux, le cache de requêtes est un composant important qui peut contribuer à améliorer les performances de MySQL. Cet article explique comment utiliser le cache de requêtes et effectuer une analyse des performances, et fournit des exemples de code spécifiques. Le rôle du cache de requêtes Le cache de requêtes est un mécanisme permettant de mettre en cache les résultats d'une requête Lorsque la même requête est exécutée, MySQL.

Comment implémenter l'optimisation sous-jacente MySQL : utilisation avancée et analyse des performances du cache de requêtes Comment implémenter l'optimisation sous-jacente MySQL : utilisation avancée et analyse des performances du cache de requêtes Nov 08, 2023 pm 08:49 PM

Comment réaliser une optimisation sous-jacente de MySQL : utilisation avancée et analyse des performances du cache de requêtes Résumé : MySQL est un système de gestion de base de données relationnelle largement utilisé, et sa fonction de cache de requêtes peut améliorer efficacement les performances des requêtes. Cet article présentera l'utilisation avancée et l'analyse des performances du cache de requêtes MySQL, y compris l'activation du cache de requêtes, l'utilisation des instances de cache de requêtes, les causes et les solutions des échecs du cache de requêtes, etc., et donne également des exemples de code spécifiques pour aider les lecteurs à mieux comprendre et mettre en pratique. Mots-clés : MySQL, cache de requêtes, optimisation, performances

Comment améliorer les performances en optimisant le cache des requêtes MySQL Comment améliorer les performances en optimisant le cache des requêtes MySQL May 11, 2023 am 08:16 AM

MySQL est un système de gestion de base de données open source populaire largement utilisé dans de nombreux sites Web et applications. L'un des mécanismes importants d'amélioration des performances est la mise en cache des requêtes. La mise en cache des requêtes est le mécanisme utilisé par MySQL pour mettre en cache le jeu de résultats d'une instruction SELECT. Lorsqu'une requête est mise en cache, MySQL stocke l'ensemble de résultats en mémoire et renvoie les résultats mis en cache lorsque la même requête est à nouveau demandée, plutôt que de réexécuter la requête. Dans des circonstances idéales, la mise en cache des requêtes peut améliorer considérablement les performances des requêtes. Cependant, s'il n'est pas configuré correctement

Comment fonctionne la mise en cache des requêtes dans le framework Hibernate ? Comment fonctionne la mise en cache des requêtes dans le framework Hibernate ? Apr 17, 2024 pm 10:12 PM

La fonction de mise en cache des requêtes dans le framework Hibernate peut améliorer les performances des requêtes et éviter l'exécution répétée des requêtes en mettant en cache les résultats des requêtes. Son principe de fonctionnement est une mise en cache à deux niveaux, y compris le niveau session et le niveau global, et la mise en cache est activée via l'annotation @Cacheable. Les données mises en cache peuvent être partagées par toutes les sessions jusqu'à ce qu'elles soient explicitement effacées ou expirées. Les méthodes permettant de vider explicitement le cache incluent session.clear() ou session.evict(). La suppression transparente est automatiquement effectuée lorsque les résultats de la requête changent.

See all articles