
# 设置参数
#### 背景信息
GaussDB提供了多种修改GUC参数的方法，用户可以方便地针对数据库、用户、会话进行设置。
- 参数名称不区分大小写。
- 参数取值有整型、浮点型、字符串、布尔型和枚举类型五类。
  - 布尔值可以是（on，off）、（true，false）、（yes，no）或者（1，0），且不区分大小写。
  
  - 枚举类型的取值是在系统表pg_settings的enumvals字段取值定义的。
   
- 对于有单位的参数，在设置时请指定单位，否则将使用默认的单位。
  - 参数的默认单位是在系统表pg_settings的unit字段定义的。
  
  - 内存单位有：KB/kB（千字节）、MB/mB（兆字节）和GB/gB（吉字节）。
  
  - 时间单位：ms（毫秒）、s（秒）、min（分钟）、h（小时）和d（天）。
   
具体参数说明请参见[GUC参数说明](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0316.html#ZH-CN_TOPIC_0000002558948749)。
#### GUC参数设置
GaussDB提供了七类GUC参数，具体分类和设置方式请参考[表1]：
![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
修改数据库参数可能造成实例或业务异常，请谨慎操作。
 表1GUC参数分类 
| 参数类型       | 说明                                                     | 设置方式                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
|:---|:---|:---|
| INTERNAL   | 固定参数，在创建数据库的时候确定，用户无法修改，只能通过show语法或者pg_settings视图进行查看。 | 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| POSTMASTER | 数据库服务端参数，在数据库启动时确定，可以通过配置文件指定。                         | 支持[表2]中的方式一。                                                                                                                                                                                                                                                                                                                                                                                                                                |
| SIGHUP     | 数据库全局参数，可在数据库启动时设置或者在数据库启动后，发送指令重新加载。                  | 支持[表2]中的方式一、方式二。                                                                                                                                                                                                                                                                                                                                                                                                                            |
| BACKEND    | 会话连接参数。在创建会话连接时指定，连接建立后无法修改。连接断掉后参数失效。内部使用参数，不推荐用户设置。  | 支持[表2]中的方式一、方式二。 说明： 设置该参数后，下一次建立会话连接时生效。 |
| SUSET      | 数据库管理员参数。可在数据库启动时、数据库启动后或者数据库管理员通过SQL进行设置。             | 支持[表2]中的方式一、方式二或由数据库管理员通过方式三设置。                                                                                                                                                                                                                                                                                                                                                                                                             |
| USERSET    | 普通用户参数。可被任何用户在任何时刻设置。                                  | 支持[表2]中的方式一、方式二或方式三设置。                                                                                                                                                                                                                                                                                                                                                                                                                      |
   
GaussDB提供了四种方式来修改GUC参数，具体操作请参考[表2]：
 表2GUC参数设置方式 
| 序号  | 设置方法                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
|:---|:---|
| 方式一 | 1. 登录管理控制台。  2. 在"实例管理"页面，选择指定的实例，单击实例名称，进入实例基本信息页面。  3. 在左侧导航栏单击"参数管理"，进入参数修改页面，在该页面修改参数。 如果需要修改的参数在管理该控制台无法修改，请提前评估风险后再联系客服进行修改。   4. 重启数据库使参数生效。 说明： 重启数据库集群操作会导致用户执行操作中断，请在操作之前规划好合适的执行窗口。                                                                                                                                                                                                                                                                                                                                                                                                                          |
| 方式二 | 1. 登录管理控制台。  2. 在"实例管理"页面，选择指定的实例，单击实例名称，进入实例基本信息页面。  3. 在左侧导航栏单击"参数管理"，进入参数修改页面，在该页面修改参数。 如果需要修改的参数在管理该控制台无法修改，请提前评估风险后再联系客服进行修改。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| 方式三 | 修改指定数据库、用户、会话级别的参数。 - 设置数据库级别的参数 ``` gaussdb=# ALTER DATABASE dbname SET paraname TO value; ``` 在下次会话中生效。   - 设置用户级别的参数 ``` gaussdb=# ALTER USER username SET paraname TO value; ``` 在下次会话中生效。   - 设置会话级别的参数 ``` gaussdb=# SET paraname TO value; ``` 修改本次会话中的取值。退出会话后，设置将失效。 说明： SET设置的会话级参数优先级最高，其次是ALTER设置的，其中ALTER DATABASE设置的参数值优先级高于ALTER USER设置，这三种设置方式设置的优先级都高于gs_guc设置方式。 ALTER DATABASE和ALTER USER设置的参数在当前会话都不会生效，需要重启会话才能生效。    |
   
![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/public_sys-resources/caution_3.0-zh-cn.png)
- 使用方式一、方式二设置参数时，若所设参数不属于当前节点，数据库会提示参数不在支持范围内的相关信息。
- 使用方式一、方式二设置参数时，不支持以页面数量为参数单位进行设置。
- 使用方式三设置参数时，若参数值为int整型，则会将整数前导零过滤掉，例如SET *paraname* TO *008192* 与SET *paraname* TO *8192*效果相同。
 
#### CM参数设置
GaussDB有两类CM参数，一类在设置后需要重启数据库才能生效，一类可以通过reload动态加载生效，具体设置方式请参考[表3]。
 表3CM参数设置方式 
| 序号  | 设置方法                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
|:---|:---|
| 方式一 | 1. 使用如下命令修改参数。 ``` cm_ctl set --param {--agent | --server} [-n NODEID] -k "PARAMETER=value" ``` 说明： 参数说明 - --agent：设置cm_agent参数。  - --server：设置cm_server参数。  - -n NODEID：设置指定节点的CM参数，NODEID为节点名称，可通过cm_ctl query -Cv命令查询。不设置该参数时，默认设置所有节点。  - -k "PARAMETER=value"：指定设置的参数和参数的值，只能设置已经存在的参数，不支持增加或删减参数。   示例 - 设置cm_agent参数incremental_build值为on： ``` cm_ctl set --param --agent -k "incremental_build=on" ```   - 设置cm_server参数switch_rto值为600： ``` cm_ctl set --param --server -k "switch_rto=600" ```      2. 重启数据库使参数生效。 ``` cm_ctl stop && cm_ctl start ``` 说明： 重启数据库操作会导致用户执行操作中断，请在操作之前规划好合适的执行窗口。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| 方式二 | 1. 使用如下命令修改参数。 ``` cm_ctl set --param {--agent | --server} [-n NODEID] -k "PARAMETER=value" ``` 说明： 参数说明 - --agent：设置cm_agent参数。  - --server：设置cm_server参数。  - -n NODEID：设置指定节点的CM参数，NODEID为节点名称，可通过cm_ctl query -Cv命令查询。不设置该参数时，默认设置所有节点。  - -k "PARAMETER=value"：指定设置的参数和参数的值，只能设置已经存在的参数，不支持增加或删减参数。   示例 - 设置cm_agent参数incremental_build值为on： ``` cm_ctl set --param --agent -k "incremental_build=on" ```   - 设置cm_server参数switch_rto值为600： ``` cm_ctl set --param --server -k "switch_rto=600" ```      2. 动态加载CM参数。 ``` cm_ctl reload --param {--agent | --server} ``` 说明： 参数说明 - --agent：动态加载cm_agent参数。  - --server：动态加载cm_server参数。   示例 - 动态加载cm_agent参数： ``` cm_ctl reload --param --agent ```   - 动态加载cm_server参数： ``` cm_ctl reload --param --server ```       |
   
