MySQL的内存都用在了哪里

  • InnoDB buffer pool:主要用于缓存InnoDB的表、索引数据。通常缓冲池(buffer pool)的大小设置为服务器系统内存大小的50%~75%。如果系统有大量的内存,可以通过将其分配给多个缓冲池实例(buffer pool instances),来提高并发性。缓冲池不宜设置过小或过大,过小会照成缓冲池里面的页不断进行刷新,过大会因为内存争用导致发生交换(swap)。

  • MyISAM key buffer:用于缓冲MyISAM表的索引,被所有的线程共享。

  • 内存表:如果是一个内部使用的临时内存表,当表增大时,会将其转换成磁盘表。如果是由MEMORY引擎创建的表,则不会转换成磁盘表。

  • MySQL Performance Schema :用于监控mysql的执行性能,随着服务器的实际负载变化,动态分配使用内存。一旦内存被分配,只有在下次服务器重启时才会释放。

  • 客户端连接线程:每个线程会使用到连接缓冲、结果缓冲和线程堆栈。连接缓冲和结果缓冲会进行动态增长。每个连接线程也会使用内存用于计算语句摘要。

  • 全部线程:所有的线程共享相同的基础内存。当一个线程不再使用,如果线程没有回到线程缓存里,它分配的内存将会释放。

  • 读取缓冲:对表进行顺序扫描时,会为其分配一个读取缓冲。

  • 随机读取缓冲:对数据进行任意顺序读取时,会为其分配一个随机读取缓冲,以防止发生磁盘检索。

  • 连接操作:所有的连接执行都是单次扫描,而且大多数连接甚至不需要使用临时表就可以完成。大部分的临时表是基于内存的哈希表。

  • 排序缓冲:大多数执行排序的请求,根据结果集大小分配排序缓冲区和临时文件。

  • 表缓存:MySQL需要使用内存和描述符对表操作进行缓存。所有正在使用的表会在表缓存内进行管理。

  • 表定义缓存:MySQL为表定义缓存分配内存,用于保存表定义。

posted @ 2020-03-09 08:47  清歌牧言  阅读(422)  评论(0编辑  收藏  举报