memory_limit 
=================================

memory_limit 表示可用的总内存大小。


|      **属性**      |  **描述**   |
|------------------|-----------|
| 参数类型             | 容量单位      |
| 默认值              | 0         |
| 取值范围             | \[0M, +∞) |
| 是否重启 OBServer 生效 | 否         |



memory_limit 的默认值为 0。如果该值不为 0，则系统会忽略 memory_limit_percentage 的设置而优先使用 memory_limit 配置的值。例如，一台物理机的内存为 100 G，memory_limit_percentage 设置为 80，表示使用 80% 的内存，而 memory_limit 参数设置为 90G，则实际物理机上 OceanBase 数据库可分配的内存使用 memory_limit 的配置，即 90 G。

使用注意事项：

* memory_limit 的默认单位为 MB。

  例如，`memory_limit='40G' `表示设置 OceanBase 数据库进程的使用内存上限是40 GB。由于默认单位为 MB，则 `memory_limit=40960 `与 `memory_limit='40G' `设置的值相同。
  

* memory_limit 的值目前无上限。如果设置的内存最大上限超过了实际的物理内存总和，则会导致系统中其他按总内存计算的值偏大。

  

* 如果希望限制运行中的 OceanBase 数据库的内存大小，可以直接修改 memory_limit 的值，使其达到预期。设置后，后台参数 Reload 线程会使其动态生效，无需重启。但是在设置时，需要保证 memory_limit 的值小于系统总 hold 值。 

  
  **注意**

  

  `memory_limit `的值必须大于 OBServer 实际已使用的内存。

  查询当前已使用的内存数（单位：GB）的方法如下：

  ```sql
  obclient> SELECT value/1024/1024/1024 used_gb FROM v$sysstat WHERE name LIKE '%observer memory%' AND con_id = 1 AND stat_id=140008 AND name='observer memory used size';
  ```

  




