blog:mysql:optimization:memory

MySQL内存优化

内存是影响数据库性能的重要资源,也是MySQL性能优化的重要方向。
  • 将尽量多的内存分配给MySQL做缓存,但是要给操作系统和其他程序的运行预留足够的内存,否则如果产生SWAP页交换,将严重影响性能
  • MyISAM的数据文件读取依赖于操作系统自身的IO缓存,因此,如果有MyISAM表,就要预留更多的内存给操作系统
  • 排序区、连接区等缓存是分配给每个数据库会话专用的,其默认值的设定要根据最大连接数合理分配,如果设置太大,不但浪费内存资源,而且在并发连接较高时会导致物理内存耗尽。
  • 如果通过show global status看到sort_merge_passes的值很大,可以考虑通过调整参数sort_buffer_size的值来增大排序缓存区,以改善带有order by子句或group子句SQl的性能。
  • 对于无法通过索引进行连接操作的查询,可以尝试通过增大join_buffer_size的值来改善性能。
  • 需要注意的是,sort bufferjoin buffer都是面向客户服务线程分配的,如果设置过大,可能会导致内存交换。尤其是join buffer,如果是多表关联的复杂查询,还可能会分配多个join buffer。因此,最好的策略是设置较小的全局joinbuffersize,而对需要做复杂连接操作的session单独设置较大的joinbuffersize。
  • blog/mysql/optimization/memory.txt
  • 最后更改: 2022/04/11 15:01
  • okami