# 设置参数
#### GUC参数设置
GaussDB提供了六类GUC参数，以及多种修改GUC参数的方法，用户可以方便地针对数据库、用户、会话进行设置，具体分类和设置方式请参考[表1]。
- 参数名称不区分大小写。
- 参数取值有整型、浮点型、字符串、布尔型和枚举类型五类。
  - 布尔值可以是（on，off）、（true，false）、（yes，no）或者（1，0），GaussDB的布尔值推荐使用（on，off）。
  
  - 枚举类型的取值是系统表pg_settings的enumvals字段取值定义的。
  
  - 浮点（real）型的参数，必须加小数点，如 1.0e-3 是符合规范的，而1e-3是不符合规范的。
  
  - 在IEEE 754 标准中定义，对于浮点数，存在+0、-0，在对数值型参数进行设置时，零带负号可以通过校验。
  
  - gs_guc工具对于浮点数范围检查具有精度阈值，具体阈值为1.0\*e-9。
   
- 对于有单位的参数，在设置时请指定单位，否则将使用默认的单位。
  - 参数的默认单位是系统表pg_settings的unit字段定义的。
  
  - 内存单位有：KB/kB（千字节）、MB/mB（兆字节）和GB/gB（吉字节）。
  
  - 时间单位：ms（毫秒）、s（秒）、min（分钟）、h（小时）和d（天）。
   
- CN和DN参数可以同时进行设置，其他类型的参数不能同时进行设置。
具体参数说明请参见[GUC参数说明](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0753.html)。
 表1GUC参数分类 
| 参数类型       | 说明                                                     | 设置方式                                                                                                                                                                                                                                                                            |
|:---|:---|:---|
| INTERNAL   | 固定参数，在创建数据库的时候确定，用户无法修改，只能通过show语法或者pg_settings视图进行查看。 | 无                                                                                                                                                                                                                                                                                  |
| POSTMASTER | 数据库服务端参数，在数据库启动时确定，可以通过配置文件指定。                         | 支持[表2]中的方式一。                                                                                                                                                                              |
| SIGHUP     | 数据库全局参数，可在数据库启动时设置或者在数据库启动后，发送指令重新加载。                  | 支持[表2]中的方式一、方式二。                                                                                                                                                                          |
| BACKEND    | 会话连接参数。在创建会话连接时指定，连接建立后无法修改。连接断掉后参数失效。内部使用参数，不推荐用户设置。                                            | 支持[表2]中的方式一、方式二。 说明： 设置该参数后，下一次建立会话连接时生效。                                                        |
| SUSET      | 数据库管理员参数。可在数据库启动时、数据库启动后或者数据库管理员通过SQL进行设置。             | 支持[表2]中的方式一、方式二或由数据库管理员通过方式三设置。                                                                                                                                                           |
| USERSET    | 普通用户参数。可被任何用户在任何时刻设置。                                  | 支持[表2]中的方式一、方式二或方式三设置。 说明： 设置USERSET类型的参数时，ALTER DATABASE设置的参数值优先级高于gs_guc设置。如果想要gs_guc设置的参数值生效，则需要执行"alter database *xxx* reset *xxx*"进行重置。 |
   
GaussDB提供了三种方式来修改GUC参数，具体操作请参考[表2]：
 表2GUC参数设置方式 
| 序号 | 设置方法                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|
| 方式一   | 1. 登录管理控制台。  2. 在"实例管理"页面，选择指定的实例，单击实例名称，进入实例基本信息页面。  3. 在左侧导航栏单击"参数管理"，进入参数修改页面，在该页面修改参数。 如果需要修改的参数在管理控制台无法修改，请提前评估风险后再联系客服进行修改。   4. 重启数据库使参数生效。 说明： 重启数据库集群操作会导致用户执行操作中断，请在操作之前规划好合适的执行窗口。    |
| 方式二   | 1. 登录管理控制台。  2. 在"实例管理"页面，选择指定的实例，单击实例名称，进入实例基本信息页面。  3. 在左侧导航栏单击"参数管理"，进入参数修改页面，在该页面修改参数。 如果需要修改的参数在管理控制台无法修改，请提前评估风险后再联系客服进行修改。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| 方式三   | 修改会话级别的参数。 - 设置会话级别的参数： ``` gaussdb=# SET paraname TO value; ``` 修改本次会话中的取值。退出会话后，设置将失效。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   
![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/public_sys-resources/note_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} [-n NODEID] ``` 说明： 参数说明 - --agent：动态加载cm_agent参数。  - --server：动态加载cm_server参数。  - -n NODEID：动态加载指定节点的CM参数，NODEID为节点名称，可通过cm_ctl query -Cv命令查询。   示例 - 动态加载cm_agent参数： ``` cm_ctl reload --param --agent ```   - 动态加载cm_server参数： ``` cm_ctl reload --param --server ```       |
   
