MySQL缓存查询的实际应用

php中文网
发布: 2016-06-07 16:13:28
原创
1071人浏览过

以下的文章主要讲述的是MySQL缓存查询与设置global query_cache_size的实际操作步骤,我们大家都知道其访问量一增加的话,MySQL数据库的压力就大!如果对其减小压力呢?首先缓存。 我这里有专业数据师来讲解。 设置缓存global query_cache_size setglobal qu

以下的文章主要讲述的是mysql缓存查询与设置global query_cache_size的实际操作步骤,我们大家都知道其访问量一增加的话,mysql数据库的压力就大!如果对其减小压力呢?首先缓存。

我这里有专业数据师来讲解。

设置缓存global query_cache_size

<ol class="dp-xml"><li class="alt"><span><span>set global </span><span class="attribute">query_cache_size</span><span> = </span><span class="attribute-value">102760448</span><span>;  </span></span></li><li><span>set global </span><span class="attribute">query_cache_limit</span><span> = </span><span class="attribute-value">2097152</span><span>;  </span></li><li class="alt"><span>set global </span><span class="attribute">query_cache_size</span><span> = </span><span class="attribute-value">600000</span><span>;  </span></li></ol>
登录后复制

缓存机制简单的说就是缓存sql文本及查询结果,如果运行相同的sql,服务器直接从缓存中取到结果,而不需要再去解析和执行sql。如果表更改了,那么使用这个表的所有缓冲查询将不再有效,查询缓存值的相关条目被清空。更改指的是表中任何数据或是结构的改变,包括INSERT、UPDATE、DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE等,也包括那些映射到改变了的表的使用MERGE表的查询。显然,这对于频繁更新的表,MySQL缓存查询缓存是不适合的,而对于一些不常改变数据且有大量相同sql查询的表,查询缓存会节约很大的性能。

查询必须是完全相同的(逐字节相同)才能够被认为是相同的。另外,同样的查询字符串由于其它原因可能认为是不同的。使用不同的数据库、不同的协议版本或者不同默认字符集的查询被认为是不同的查询并且分别进行缓存。

下面sql查询缓存认为是不同的:
 

<ol class="dp-xml"><li class="alt"><span><span>SELECT * FROM tbl_name  </span></span></li><li><span>Select * from tbl_name </span></li></ol>
登录后复制

查询缓存相关参数

<ol class="dp-xml"><li class="alt">MySQL<span><span class="tag">></span><span> SHOW VARIABLES LIKE '%query_cache%'; <br />+------------------------------+---------+ | Variable_name | Value | <br />+------------------------------+---------+ | have_query_cache | YES |  </span></span></li></ol>
登录后复制

查询缓存是否可用 | query_cache_limit | 1048576 | --可缓存具体查询结果的最大值 | query_cache_min_res_unit | 4096 | | query_cache_size | 599040 | --查询缓存的大小 | query_cache_type | ON | --阻止或是支持MySQL缓存查询缓存

<ol class="dp-xml"><li class="alt"><span><span>| query_cache_wlock_invalidate | OFF | +------------------------------+---------+  </span></span></li></ol>
登录后复制

下面是一个简单的例子:

<ol class="dp-xml"><li class="alt"><span>[MySQL@csdba1850 ~]$ </span>MySQL<span> -u root -p  </span></li><li><span>Enter password:  </span></li><li class="alt"><span>Welcome to the </span>MySQL<span> monitor. Commands end with ; or \g.  </span></li><li><span>Your </span>MySQL<span> connection id is 3  </span></li><li class="alt"><span>Server version: 5.0.45-community </span>MySQL<span> Community Edition (GPL)  </span></li><li><span>Type 'help;' or '\h' for help. Type '\c' to clear the buffer.  </span></li><li class="alt">MySQL<span class="tag">></span><span> set global </span><span class="attribute">query_cache_size</span><span> = </span><span class="attribute-value">600000</span><span>;   </span></li></ol>
登录后复制

设置缓存内存

What-the-Diff
What-the-Diff

检查请求差异,自动生成更改描述

What-the-Diff 103
查看详情 What-the-Diff
<ol class="dp-xml"><li class="alt"><span><span>Query OK, 0 rows affected (0.00 sec)  </span></span></li><li>MySQL<span class="tag">></span><span> set session </span><span class="attribute">query_cache_type</span><span> = </span><span class="attribute-value">ON</span><span>;  </span></li></ol>
登录后复制

开启查询缓存
 

<ol class="dp-xml"><li class="alt"><span><span>Query OK, 0 rows affected (0.00 sec)  </span></span></li><li>MySQL<span class="tag">></span><span> use test Reading table information for completion <br />of table and column names You can turn off this feature to <br />get a quicker startup with -A Database changed </span>mysql<span class="tag">></span><span> show tables; <br />+----------------+ | Tables_in_test | +----------------+ | animals | <br />| person | +----------------+ 5 rows in set (0.00 sec) <br /></span>mysql<span class="tag">></span><span> select count(*) from animals; +----------+ | count(*) <br />| +----------+ | 6 | +----------+ 1 row in set (0.00 sec)   </span></li></ol>
登录后复制

Qcache_hits表示mysql缓存查询在缓存中命中的累计次数,是累加值。

<ol class="dp-xml"><li class="alt"><span><span>mysql</span><span class="tag">></span><span> SHOW STATUS LIKE 'Qcache_hits'; +---------------+-------+ <br />| Variable_name | Value | +---------------+-------+ | Qcache_hits <br />| 0 | --0次 +---------------+-------+ 8 rows in set (0.00 sec) <br />mysql</span><span class="tag">></span><span> select count(*) from animals; +----------+ | count(*) <br />| +----------+ | 6 | +----------+ 1 row in set (0.00 sec) <br />mysql</span><span class="tag">></span><span> SHOW STATUS LIKE 'Qcache%'; +---------------+-------+ <br />| Variable_name | Value | +---------------+-------+ | Qcache_hits | 1 |  </span></span></li></ol>
登录后复制

表示sql在缓存中直接得到结果,不需要再去解析

<ol class="dp-xml"><li class="alt"><span><span>+---------------+-------+ 8 rows in set (0.00 sec) <br />mysql</span><span class="tag">></span><span> select count(*) from animals; +----------+ <br />| count(*) | +----------+ | 6 | +----------+ 1 row in set (0.00 sec) <br />mysql</span><span class="tag">></span><span> select count(*) from animals; +----------+ | count(*) <br />| +----------+ | 6 | +----------+ 1 row in set (0.00 sec) <br />mysql</span><span class="tag">></span><span> SHOW STATUS LIKE 'Qcache_hits'; +---------------+-------+ <br />| Variable_name | Value | +---------------+-------+ | Qcache_hits | 3 |  </span></span></li></ol>
登录后复制

上面的sql也是是从缓存中直接取到结果

<ol class="dp-xml"><li class="alt"><span><span>+---------------+-------+ 1 row in set (0.00 sec) mysql</span><span class="tag">></span><span> insert into animals select 9,'testsds' ;  </span></span></li></ol>
登录后复制

插入数据后,跟这个表所有相关的sql缓存就会被清空掉

<ol class="dp-xml"><li class="alt"><span><span>Query OK, 1 row affected (0.00 sec) Records: <br />1 Duplicates: 0 Warnings: 0 mysql</span><span class="tag">></span><span> select count(*) from animals; <br />+----------+ | count(*) | +----------+ | 7 | +----------+ <br />1 row in set (0.00 sec) mysql</span><span class="tag">></span><span> SHOW STATUS LIKE 'Qcache_hits'; <br />+---------------+-------+ | Variable_name | Value | <br />+---------------+-------+ | Qcache_hits | 3 |  </span></span></li></ol>
登录后复制

还是等于3,说明上一条sql是没有直接从缓存中直接得到的

<ol class="dp-xml"><li class="alt"><span><span>+---------------+-------+ 1 row in set (0.00 sec) <br />mysql</span><span class="tag">></span><span> select count(*) from animals; +----------+ <br />| count(*) | +----------+ | 7 | +----------+ <br />1 row in set (0.00 sec) mysql</span><span class="tag">></span><span> SHOW STATUS LIKE 'Qcache_hits'; <br />+---------------+-------+ | Variable_name | Value | +---------------+-------+ <br />| Qcache_hits | 4 | +---------------+-------+ 1 row in set (0.00 sec)  </span></span></li></ol>
登录后复制

以上的相关内容就是对mysql缓存查询和设置的介绍,望你能有所收获。
 


相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号