
# 内存使用超限风险与优化
#### TaurusDB内存说明
TaurusDB的内存大体可以分为GLOBAL级的共享内存和SESSION级的私有内存两部分：
- 共享内存是实例创建时根据参数值分配的内存空间，并且是所有连接共享的。
- 私有内存用于每个连接到TaurusDB服务器时才分配各自的缓存，且只有断开连接才会释放。
低效的SQL语句或数据库参数设置不当都可能会导致内存利用率升高，遇到突发业务高峰时，可能会导致云数据库内存OOM（Out Of Memory）。
#### 场景描述
TaurusDB实例在16:30分内存使用率突增，触发OOM后实例重启。
#### 原因分析
1. 查看内存利用率监控指标，实例的内存使用率在16:30左右率突增，触发OOM后实例重启，内存使用率骤降。
   图1内存利用率   
   ![](https://support.huaweicloud.com/trouble-taurusdb/figure/zh-cn_image_0000001928571445.png) 
2. 查看该时间段慢SQL数监控指标，确认该时间段慢SQL数量突增。
   图2慢SQL数   
   ![](https://support.huaweicloud.com/trouble-taurusdb/figure/zh-cn_image_0000001882572312.png) 
3. 查看磁盘吞吐相关指标，发现磁盘此时有大量读写操作。
   图3磁盘吞吐   
   ![](https://support.huaweicloud.com/trouble-taurusdb/figure/zh-cn_image_0000001928651085.png) 
4. 分析对应时间点的慢日志记录，该时间点有大量的多值批量插入语句，该插入方式会导致每个会话申请较多的SESSION级内存，并发高，很容易引起实例OOM。
   图4慢日志   
   ![](https://support.huaweicloud.com/trouble-taurusdb/figure/zh-cn_image_0000001882732228.png) 
 
#### 解决方案
1. 针对多值插入方式引起的OOM，建议减少单次插入数据量，分多次插入，且及时断开重连会话以释放内存。可执行**show full processlist**查看是否有明显占用内存高的会话。
2. 合理设置SESSION级内存参数大小，可大体根据全局内存+会话级内存\*最大会话数来预估可能最大的内存。注意开启"performance_schema"也会带来内存开销。
3. 升级实例规格，将内存利用率维持在合理范围，防止业务突增导致实例OOM。
 
