内存使用限制¶
数据库系统常常对内存的使用比较多,在服务器的内存不足的情况下,应该限制服务器使用的内存大小,这不但可以让数据库服务器和Web服务器同机运行在一台服务器上,还可以控制数据库服务器使用的内存大小。
神通数据库对内存的控制主要分为:排序内存、数据缓冲区内存、日志读缓冲区内存以及日志写缓冲区内存等。这些参数的修改都可以通过“系统参数配置工具”修改。
默认情况下:
| 参数名字 | 描述 | 缺省值 | 最小值 | 最大值 |
|---|---|---|---|---|
| SORT_MEM | 执行器排序最大内存(单位KB) | 4096 | 8 | 0X7FFFFFFF |
| BUF_DATA_BUFFER_PAGES | 数据缓冲区页数(以8192字节为单位) | 8192 | 64 | 0x1000000 |
| LOG_READ_BUFFER_PAGES | 日志读缓冲区页数(以512字节为单位) | 0X400 | 0x20 | 0x1000000 |
| LOG_WRITE_BUFFER_PAGES | 日志写缓冲区页数(以512字节为单位) | 0X1000 | 0x20 | 0x1000000 |
内存限额功能¶
有些场景中,服务器内存不足,数据库实例又占用系统内存较大,很容易导致数据库被系统OOM。为预防和排查这种情况,增加了内存限额功能。
内存限额类型分为实例级和会话级。
内存限额的配置参数可以通过配置文件或是DBA设置,启库后普通用户不能自己设置。
参数说明如下:
| 参数名字 | 缺省值 | 最小值 | 最大值 | 描述 |
|---|---|---|---|---|
| INST_MEM_THRESHOLD | 90 | 0 | 100 | 实例内存占系统总内存的百分比 |
| SESSION_MEMORY_MAX_SIZE | 0 | 0 | 2147483647 | 会话级最大内存限制,单位MB |
| SESSION_MEMORY_ACTION | LOG | NULL | NULL | 会话级内存超过限制后指定的行为 LOG :打印LOG日志,继续执行;ERROR :抛错 ,停止执行。 |
实例级内存超限后的处理:
超过实例最大内存限制会选出占用内存最大的会话,通知会话回滚掉当前执行的语句,待内存释放后判断其内存使用状态,若释放的内存不够多时会杀掉会话。
会话级内存超限后的处理:
若参数 SESSION_MEMORY_ACTION 配置为 log,则会话内存超限后只会打印日志,继续执行当前语句;
若参数 SESSION_MEMORY_ACTION 配置为 error,则会话内存超限后会抛错回滚,停止执行当前语句。