Mysql缓存机制

·  阅读 346

1.MySQL缓存规则是什么?

MySQL缓存机制即缓存sql 文本及缓存结果,用KV形式保存再服务器内存中,如果运行相同的sql,服务器直接从缓存中去获取结果,不需要再去解析、优化、执行sql

  1. 服务器接收SQL,以SQL和一些其他条件为key查找缓存表 
  2. 如果缓存命中,则直接返回缓存
  3. 如果缓存没有命中,则执行SQL查询,包括SQL解析、优化等。
  4. 执行完SQL查询结果以后,将SQL查询结果写入缓存表

2.MySQL缓存使用场景

  1. 对于频繁更新的表查,询缓存不合适
  2. 对于一些不变的数据且有大量相同sql查询的表,查询缓存可以大大提高查询的性能

3.MySQL缓存的优缺点

优点:

不需要对sql语句做任何解析和执行,直接从Query Cache中获取查询结果,提高效率

缺点:

Query Cache的起用,会增加检查和清理Query Cache中记录集的开销,而且存在SQL语句缓存的表,

4.缓存的内存管理

Query Cache的应用会占用内存

  1. MySQL缓存机制会在内存中开辟一块内存(query_cache_size)区来维护缓存数据,其中大概有40K的空间是用来维护缓存数据的元数据的,例如空间内存、数据表和查询结果的映射,SQL和查询结果的映射。
  2. MySQL缓存机制将大内存块分为小内存块(query_cache_min_res_unit),每个小块中存储自身的类型、大小和查询结果数据,还有前后内存块的指针。
  3. MySQL缓存机制会在SQL查询开始(还未得到结果)时就去申请一块内存空间,所以即使缓存数据没有达到这个大小也需要占用申请的内存块空间(like linux filesystem’s block)。如果超出申请内存块的大小,则需要再申请一个内存块。当查询完成发现申请的内存有富余,则会将富余的内存空间释放掉,因而可能会造成内存碎片。

5.内存碎片

内部碎片

内部碎片是由于采用固定大小的内存分区,当一个进程不能完全使用分给它的固定内存区域时就产生了内部碎片,通常内部碎片难以完全避免;

外部碎片

由于某些未分配的连续内存区域太小,以至于不能满足任意进程的内存分配请求,从而不能被进程利用的内存区域

分类:
后端
标签: