前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL如何使用内存?

MySQL如何使用内存?

作者头像
MySQLSE
发布2020-09-28 15:18:32
2.1K0
发布2020-09-28 15:18:32
举报

MySQL会通过使用内存缓存和缓冲来提高数据库的性能。MySQL里面与内存相关参数的默认值是基于一台使用512M内存的虚拟服务器设定的,因此,当用户使用MySQL时需要根据服务器实际内存的大小,对各个参数的值进行调节。在调整参数之前,需要了解一下MySQL究竟是如何使用内存的。

  • InnoDB buffer pool:主要用于缓存InnoDB的表、索引数据。通常缓冲池(buffer pool)的大小设置为服务器系统内存大小的50%~75%。如果系统有大量的内存,可以通过将其分配给多个缓冲池实例(buffer pool instances),来提高并发性。缓冲池不宜设置过小或过大,过小会照成缓冲池里面的页不断进行刷新,过大会因为内存争用导致发生交换(swap)。
  • MyISAM key buffer:用于缓冲MyISAM表的索引,被所有的线程共享。
  • 内存表:如果是一个内部使用的临时内存表,当表增大时,会将其转换成磁盘表。如果是由MEMORY引擎创建的表,则不会转换成磁盘表。
  • MySQL Performance Schema :用于监控mysql的执行性能,随着服务器的实际负载变化,动态分配使用内存。一旦内存被分配,只有在下次服务器重启时才会释放。
  • 客户端连接线程:每个线程会使用到连接缓冲、结果缓冲和线程堆栈。连接缓冲和结果缓冲会进行动态增长。每个连接线程也会使用内存用于计算语句摘要。
  • 全部线程:所有的线程共享相同的基础内存。当一个线程不再使用,如果线程没有回到线程缓存里,它分配的内存将会释放。
  • 读取缓冲:对表进行顺序扫描时,会为其分配一个读取缓冲。
  • 随机读取缓冲:对数据进行任意顺序读取时,会为其分配一个随机读取缓冲,以防止发生磁盘检索。
  • 连接操作:所有的连接执行都是单次扫描,而且大多数连接甚至不需要使用临时表就可以完成。大部分的临时表是基于内存的哈希表。
  • 排序缓冲:大多数执行排序的请求,根据结果集大小分配排序缓冲区和临时文件。
  • 表缓存:MySQL需要使用内存和描述符对表操作进行缓存。所有正在使用的表会在表缓存内进行管理。
  • 表定义缓存:MySQL为表定义缓存分配内存,用于保存表定义。

上面列出这些是MySQL中主要使用内存的各个部分,关于缓冲和缓存如何优化,请访问官网手册。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MySQL解决方案工程师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档