MySQL内存分配
MySQL实例的组成包括许多内存共享快,以及大量的后台线程。MySQL的内存共享块包括:
- 索引缓冲(Key Buffer)
- 查询高速缓存(Query Cache)
- 表缓存(Table Cache)
线程缓存(Thread Cache)
还可能包含:二进制日志缓存区(Binlog Buffer)
- InnoDB日志缓冲区(InnoDB Log Buffer)
用户会话也需要服务器端的内存。此内存不共享,称为线程内存区域或TMA(Thread Memory Area)。
内存共享块
索引缓冲
MySQL为MyISAM表的索引分配了缓冲区,由所有线程共享。增加该值,你可以获得更好的索引处理(所有读和多个写操作)。从性能试验的角度,通常为运行MySQL服务器机器内存的25%。
MySQL通过哈希和反向链表算法快速地缓存最近使用的索引块。同时又能快速地将变动内容写入磁盘。
查询缓存(Query Cache)
查询缓存用来缓存特定查询的结果集(Result Set),且共享给所有客户端。通过对查询语句进行特定哈希计算与结果集对应并存放在查询缓存中,以提高完全相同的查询语句的速度。
注:当一个表的数据发生任何变化之后,与该表相关的所有的Query Cache都全部失效。