
# 分布列推荐函数
分布列推荐针对的是在分布式数据库下分布列以及分布方式的推荐，目的是在进行业务迁移或业务上线时，减少选择表分布列的人力成本。
#### sqladvisor.init(char, boolean, boolean, boolean, int, int)
描述：初始化参数。
返回值类型：Boolean
表1init参数说明 
| 参数                     | 类型      | 说明                                       | 是否必选 |
|:---|:---|:---|:---|
| kind                   | char    | 推荐类型，目前支持分布列推荐 'D'。                      | 是    |
| isUseCost              | boolean | 是否使用优化器，有数据的情况选择是。                       | 是    |
| isUseCollect           | boolean | 是否从收集的负载中开始分析，默认值为false。                 | 否    |
| isConstraintPrimaryKey | boolean | 是否保持主键约束，默认值为true。                       | 否    |
| sqlCount               | int     | 收集sql数量，默认值为10000，范围：1 \~ 100000。        | 否    |
| maxMemory              | int     | 分布列推荐最大占用内存，默认值为1024，范围：1 \~ 10240，单位MB。 | 否    |
   
#### sqladvisor.set_weight_params(real, real, real)
描述：设置启发式规则不同成分的权重，调用init的时候会设置一个默认参数，分析时可以不调用该函数。
返回值类型：Boolean
表2set_weight_params参数说明。 
| 参数           | 类型   | 说明                        | 是否必选 |
|:---|:---|:---|:---|
| joinWeight   | real | join的权重，范围：0 \~ 1000      | 是    |
| goupbyWeight | real | group by的权重，范围：0 \~ 1000  | 是    |
| qualWeight   | real | predicate的权重，范围：0 \~ 1000 | 是    |
   
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
此函数非必须调用，在执行init函数的时候，会预置一个默认权重分别是join: 1.0, group by: 0.1, predicate: 0.05。
#### sqladvisor.set_cost_params(bigint, boolean, text)
描述：使用Whatif代价模式可以设置的参数。
返回值类型：Boolean
表3set_cost_params参数说明 
| 参数            | 类型      | 说明                                                    | 是否必选 |
|:---|:---|:---|:---|
| maxTime       | bigint  | 推荐的最大时间，小于等于0默认为不限时，单位min。                            | 是    |
| isTotalSQL    | boolean | 是否使用全部SQL参与计算，true：全部SQL，false：会按照百分位过滤掉代价过大或者过小的SQL。 | 是    |
| compressLevel | text    | 压缩程度表示推荐算法搜索空间的大小，'low', 'med', 'high'。               | 是    |
   
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- 此函数非必须调用，在执行init函数的时候，会预置参数maxTime：-1，isTotalSQL：true, compressLevel :'high'。
- 用户选择的压缩程度越低，时间越长，越有可能推出更好的结果。
 
#### sqladvisor.assign_table_type(text)
描述：指定表为复制表。
参数：表名
返回值类型：Boolean
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
指定复制表需要在调用analyze_query和analyze_workload前使用。
#### sqladvisor.analyze_query(text, int)
描述：导入需要推荐的SQL语句，并对语句的成分进行分析。
返回值类型：Boolean
表4analyze_query参数说明 
| 参数        | 类型   | 说明                                   | 是否必选 |
|:---|:---|:---|:---|
| query     | text | SQL语句。                               | 是    |
| frequency | int  | 该语句在负载中的频率，默认值为1，范围：1 \~ 2147483647。 | 否    |
   
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- 如果参数query中存在如单引号（'）等特殊字符，可以使用单引号（'）进行转义。
- 半在线模式不支持该函数。
 
#### sqladvisor.analyze_workload()
描述：分析在线收集的负载信息。
返回值类型：Boolean
#### sqladvisor.get_analyzed_result(text)
描述：获取当前表提取出来的有益成分。
参数：text
返回值类型：record
函数返回字段说明如下：
| 名称          | 类型   | 描述         |
|:---|:---|:---|
| schema_name | text | 模式名。       |
| table_name  | text | 表名。        |
| col_name    | text | 列名。        |
| operator    | text | 算子类型。      |
| count       | int  | 统计该操作符的次数。 |
   
#### sqladvisor.run()
描述：根据指定的模式和输入的SQL进行计算分析。
返回值类型：Boolean
#### sqladvisor.get_distribution_key()
描述：获取推荐结果。
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
分析结果保存在session中，session断连结果丢失。
返回值类型：record
函数返回字段说明如下：
| 名称                | 类型        | 描述           |
|:---|:---|:---|
| db_name           | text      | 数据库名。        |
| schema_name       | text      | 模式名。         |
| table_name        | text      | 表名。          |
| distribution_type | text      | 推荐的分布类型。     |
| distribution_key  | text      | 推荐分布列。       |
| start_time        | timestamp | 推荐开始时间。      |
| end_time          | timestamp | 推荐结束时间。      |
| cost_improve      | text      | 推荐结果对于代价的提升。 |
| comment           | text      | 备注。          |
   
#### sqladvisor.clean()
描述：清理session中推荐过程中的全部内存。
返回值类型：Boolean
#### sqladvisor.start_collect_workload(int, int)
描述：开启在线收集负载。
返回值类型：Boolean
表5start_collect_workload参数说明 
| 参数        | 类型  | 说明                                        | 是否必选 |
|:---|:---|:---|:---|
| sqlCount  | int | 在线收集负载最大sql数量，默认值为10000，范围：1 \~ 100000。   | 是    |
| maxMemory | int | 在线收集负载最大占用内存，默认值为1024，范围：1 \~ 10240，单位MB。 | 是    |
   
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
- 在线收集功能只能由系统管理员调用。
- 同一时间只能收集一个数据库的负载。
- 收集负载目前只支持普通SQL和存储过程中的DML、DQL语句。
 
#### sqladvisor.end_collect_workload()
描述：关闭在线收集负载。
返回值类型：Boolean
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
- 关闭在线收集功能只能由系统管理员调用。
 
#### sqladvisor.clean_workload()
描述：清理负载中的内存。
返回值类型：Boolean
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
- 清理负载内存功能只能由系统管理员调用。
- 必须手动执行清理函数。
 
#### 使用建议
- 启发式、WhatIf代价推荐模式调用状态机。 ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002558058455.png "点击放大")
  

- 半在线推荐模式调用状态机。 ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002526898622.png "点击放大")
  
 
