GaussDB-分布列推荐函数
分布列推荐针对的是在分布式数据库下分布列以及分布方式的推荐,目的是在进行业务迁移或业务上线时,减少选择表分布列的人力成本。
- sqladvisor.init(char, boolean, boolean, boolean, int, int)
描述:初始化参数。
返回值类型:Boolean
| 参数 | 类型 | 说明 | 是否必选 |
|---|---|---|---|
| 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
| 参数 | 类型 | 说明 | 是否必选 |
|---|---|---|---|
| joinWeight | real | join的权重,范围:0 ~ 1000 | 是 |
| goupbyWeight | real | group by的权重,范围:0 ~ 1000 | 是 |
| qualWeight | real | predicate的权重,范围:0 ~ 1000 | 是 |
此函数非必须调用,在执行init函数的时候,会预置一个默认权重分别是join: 1.0, group by: 0.1, predicate: 0.05。
- sqladvisor.set_cost_params(bigint, boolean, text)
描述:使用Whtif代价模式可以设置的参数。
返回值类型:Boolean
| 参数 | 类型 | 说明 | 是否必选 |
|---|---|---|---|
| maxTime | bigint | 推荐的最大时间,小于等于0默认为不限时,单位min。 | 是 |
| isTotalSQL | boolean | 是否使用全部SQL参与计算,true:全部SQL,false:会按照百分位过滤掉代价过大或者过小的SQL。 | 是 |
| compressLevel | text | 压缩程度表示推荐算法搜索空间的大小,'low', 'med', 'high'。 | 是 |
- 此函数非必须调用,在执行init函数的时候,会预置参数maxTime:-1,isTotalSQL:true, compressLevel :'high'。
- 用户选择的压缩程度越低,时间越长,越有可能推出更好的结果。
- sqladvisor.assign_table_type(text)
描述:指定表为复制表。
参数:表名
返回值类型:Boolean
指定复制表需要在调用analyze_query和analyze_workload前使用。
- sqladvisor.analyze_query(text, int)
描述:导入需要推荐的SQL语句,并对语句的成分进行分析。
返回值类型:Boolean
| 参数 | 类型 | 说明 | 是否必选 |
|---|---|---|---|
| query | text | SQL语句。 | 是 |
| frequency | int | 该语句在负载中的频率,默认值为1,范围:1 ~ 2147483647。 | 否 |
- 如果参数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()
描述:获取推荐结果。
分析结果保存在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
| 参数 | 类型 | 说明 | 是否必选 |
|---|---|---|---|
| sqlCount | int | 在线收集负载最大sql数量,默认值为10000,范围:1 ~ 100000。 | 是 |
| maxMemory | int | 在线收集负载最大占用内存,默认值为1024,范围:1 ~ 10240,单位MB。 | 是 |
NOTICE:
- 在线收集功能只能由系统管理员调用。
- 同一时间只能收集一个数据库的负载。
- 收集负载目前只支持普通SQL和存储过程中的DML、DQL语句。
- sqladvisor.end_collect_workload()
描述:关闭在线收集负载。
返回值类型:Boolean
NOTICE:
- 关闭在线收集功能只能由系统管理员调用。
- sqladvisor.clean_workload()
描述:清理负载中的内存。
返回值类型:Boolean
NOTICE:
- 清理负载内存功能只能由系统管理员调用。
- 必须手动执行清理函数。
使用建议
更多详情请参考GaussDB 文档中心:doc.hcs.huawei.com/db/zh-cn/ga…