MySQL缓存配置

发布时间: 2023-11-21 11:10 阅读: 文章来源:1MUMB1100PS
查询缓存配置query_ cache_ type

是否打开查询缓存。可以设置成OFF、ON或DEMAND. DEMAND 表示只有在查询语句中明确写明SQL_ CACHE 的语句才放入查询缓存。这个变量可以是会话级别的也可以是全局级别的。

query_ cache_ size

查询缓存使用的总内存空间,单位是字节。这个值必须是1024的整数倍,否则MySQL实际分配的数据会和你指定的略有不同。

query_ cache_ min_ res_ unit

在查询缓存中分配内存块时的最小单位。

query_ cache_ limit

MySQL能够缓存的最大查询结果。如果查询结果大于这个值,则不会被缓存。因为查询缓存在数据生成的时候就开始尝试缓存数据,所以只有当结果全部返回后,MySQL才知道查询结果是否超出限制。如果超出,MySQL则增加状态值Qcache_ not_ cached, 并将结果从查询缓存中删除。如果你事先知道有很多这样的情况发生,那么建议在查询语句中加入SQL_ NO_ CACHE来避免查询缓存带来的额外消耗。

query_ cache_wlock_invalidate

如果某个数据表被其他的连接锁住,是否仍然从查询缓存中返回结果。这个参数默认是OFF,这可能在一定程序上会改变服务器的行为,因为这使得数据库可能返回其他线程锁住的数据。将参数设置成ON,则不会从缓存中读取这类数据,但是这可能会增加锁等待。对于绝大数应用来说无须注意这个细节,所以默认设置通常是没有问题的。

减少内存碎片

没什么办法能够完全避免碎片,但是选择合适的query_ cache_ min_ res_ _unit 可以帮你减少由碎片导致的内存空间浪费。设置合适的值可以平衡每个数据块的大小和每次存储结果时内存块申请的次数。这个值太小,则浪费的空间更少,但是会导致更频繁的内存块申请操作;如果这个值设置得太大,那么碎片会很多。调整合适的值其实是在平衡内存浪费和CPU消耗。

这个参数的最合适的大小和应用程序的查询结果的平均大小直接相关。可以通过内存实

际消耗(query_ cache_ size Qcache_ free. .memory)除以Qcache_ queries_ in_ cache 计算单个查询的平均缓存大小。如果你的应用程序的查询结果很不均匀,有的结果很大,有的结果很小,那么碎片和反复的内存块分配可能无法避免。如果你发现缓存一个非常大的结果并没有什么意义(通常确实是这样),那么你可以通过参数query_ cache_ limit 限制可以缓存的最大查询结果,借此大大减少大的查询结果的缓存,最终减少内存碎片的发生。

点击关注发私信或评论交流文章中有问题的地方,相互学习和答疑
•••展开全文