在PolarDB中,我们数据库中午都没人访问,怎么还是占这么高的内存?
查询缓存(Query Cache)是为了提高查询性能而实现的一种缓存策略,它通过节约CPU资源来达到查询加速的目标,是一项非常实用的技术。其基本思想是:对于每个符合条件的查询语句,直接对结果集进行缓存。当该结果集被再次查询命中时,直接从缓存中读取对应的结果集并返回,不需要经历SQL的分析、优化、执行等复杂的过程。
MySQL原生Query Cache在设计和实现上存在较多的严重问题,具体如下:
并发处理较差,在多核情况下,并发度越高性能降低可能越严重。
内存管理较差,内存利用率低且回收不及时,造成内存浪费。
当缓存命中率较低时,性能无提升甚至严重降低。
基于以上问题,MySQL原生Query Cache没有得到广泛应用,在最新版的MySQL 8.0中,取消了此功能。PolarDB对Query Cache进行重新设计和全新实现,进行了如下优化:
优化并发控制
取消全局锁同步机制,采用无锁机制,重新设计并发场景下的同步问题,能够充分利用多核的处理能力,保证高并发场景下的性能。
优化内存管理
取消内存预分配机制,采用更加灵活的动态内存分配机制,及时回收无效的内存,保证内存的真实利用率。
优化缓存机制
动态检测缓存利用率,实时调整缓存策略,解决命中率偏低或读写混合等场景下的性能降低问题。
相比MySQL原生Query Cache,您可以在不同的业务场景中开启Fast Query Cache以提高查询性能。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云关系型数据库主要有以下几种:RDS MySQL版、RDS PostgreSQL 版、RDS SQL Server 版、PolarDB MySQL版、PolarDB PostgreSQL 版、PolarDB分布式版 。