原创

Mysql 缓存启动方法及相关参数详解

在许多大中型网站时都是html页面静态化来实现访问的,为了减少数据库的访问量;但如果是实时访问数据,当数据量相对庞大时会造成数据请求访问缓慢,因此需要进行缓存数据、Mysql数据库优化以及语句优化等操作。

1、针对同一数据请求避免重复检索,减少访问mysql数据库请求

在访问相同表时尽量在同一sql中提取数据结果,减少对数据库的直接访问次数。

2、使用mysql query cache

作用:查询缓存存储SELECT查询的文本以及发送给客户端的相应结果。如果随后收到一个相同的查询,服务器从查询缓存中重新得到查询结果,而不再需要解析和执行查询。

适用范围:不发生数据更新的表。当表更改(包括表结构和表数据)后,查询缓存值的相关条目被清空。

1)执行show variables like '%query_cache%';查询语句结果如下:

have_query_cache	YES
query_cache_limit	1048576
query_cache_min_res_unit	4096
query_cache_size	1048576
query_cache_type	OFF
query_cache_wlock_invalidate	OFF

各个参数含义如下:

have_query_cache表明服务器在安装使已经配置了高速缓存
query_cache_size表明缓存区大小,单位为M
query_cache_type的变量值从0到2,含义分别为0或者off(缓存关闭);1或者on(缓存打开,使用sql_no_cache的select除外);2或者demand(只有带sql_cache的select语句提供高速缓存)

2)执行show status like '%Qcache%';查询语句结果如下:

Qcache_free_blocks	1
Qcache_free_memory	1031352
Qcache_hits	0
Qcache_inserts	0
Qcache_lowmem_prunes	0
Qcache_not_cached	727044
Qcache_queries_in_cache	0
Qcache_total_blocks	1

各个参数含义如下:

Qcache_free_blocks:表示查询缓存中目前还有多少剩余的blocks,如果该值显示较大,则说明查询缓存中的内存碎片过多了,可能在一定的时间进行整理。
Qcache_free_memory:查询缓存的内存大小,通过这个参数可以很清晰的知道当前系统的查询内存是否够用,是多了,还是不够用,DBA可以根据实际情况做出调整。
Qcache_hits:表示有多少次命中缓存。我们主要可以通过该值来验证我们的查询缓存的效果。数字越大,缓存效果越理想。
Qcache_inserts: 表示多少次未命中然后插入,意思是新来的SQL请求在缓存中未找到,不得不执行查询处理,执行查询处理后把结果insert到查询缓存中。这样的情况的次 数,次数越多,表示查询缓存应用到的比较少,效果也就不理想。当然系统刚启动后,查询缓存是空的,这很正常。
Qcache_lowmem_prunes:该参数记录有多少条查询因为内存不足而被移除出查询缓存。通过这个值,用户可以适当的调整缓存大小。
Qcache_not_cached: 表示因为query_cache_type的设置而没有被缓存的查询数量。
Qcache_queries_in_cache:当前缓存中缓存的查询数量。
Qcache_total_blocks:当前缓存的block数量。

3)执行SHOW STATUS;查询语句显示所有状态下结果,下面只是列举了部分结果:

Aborted_clients	11027
Aborted_connects	0
Binlog_cache_disk_use	0
Binlog_cache_use	0
Binlog_stmt_cache_disk_use	0
Binlog_stmt_cache_use	0
Bytes_received	1500
Bytes_sent	135210
Com_admin_commands	0
...

3、加cache缓存层

Cache(高速缓存)、Memory(内存)、Hard disk(硬盘)都是数据存取单元,但存取速度却有很大差异,呈依次递减的顺序。对于CPU来说,它可以从距离自己最近的Cache高速地存取数据,而不是从内存和硬盘以低几个数量级的速度来存取数据。而Cache中所存储的数据,往往是CPU要反复存取的数据,有特定的机制(或程序)来保证Cache内数据的命中率(Hit Rate)。因此,CPU存取数据的速度在应用高速缓存后得到了巨大的提高。

开启MySQL的select cache,使用命令如下:

SET GLOBAL query_cache_size = 102400000;

query_cache_size默认为0时,是不开启MySQL cache功能。

~阅读全文-人机检测~

微信公众号“Java精选”(w_z90110),专注Java技术干货分享!让你从此路人变大神!回复关键词领取资料:如Mysql、Hadoop、Dubbo、Spring Boot等,免费领取视频教程、资料文档和项目源码。微信搜索小程序“Java精选面试题”,内涵3000+道Java面试题!

涵盖:互联网那些事、算法与数据结构、SpringMVC、Spring boot、Spring Cloud、ElasticSearch、Linux、Mysql、Oracle等

评论

分享:

支付宝

微信