返回首页

gbase数据、南大通用产品文档:GBase8c

更新日期:2024年09月11日

MOT 统计
统计信息主要用于性能分析或调试。
在生产环境中,
通常不打开它们
(默认是关闭的)

统计信息主要由数据库开发人员使用,数据库用户较少使用。
对性能有一定影响,特别是对服务器。对用户的影响可以忽略不计。
统计信息保存在数据库服务器日志中。该日志位于data 文件夹中,命名为
postgresql-DATE-TIME.log。
有关详细的配置选项,请参阅MOT 配置中的统计(MOT)。

EXPLAIN 后没有EXTENDED 和PARTITIONS 时,显示缺省输出。
缺省输出只输出简化版的查询计划,主要包括数据重分布方式和每个步骤的主要
操作。
详细解释如下:
gbase> explain select * from x2 where id2 > (select count(*) from x3);
+----+-----------+-----------+----------+----------------+----+-------+------+
| ID | MOTION
| OPERATION | TABLE
| CONDITION
| ROW | WIDTH | COST(TOTAL) |
+----+-----------+-----------+----------+----------------+----+------+------------+
| 02 | [RESULT]
| SCAN
| x2[id4]
| id2{S} > &x1x&) | 16
| 16
| 1.05(3.26) |
| 01 | [SCALAR_1] | Step
| <00>
|
| 0
| 0
| 0.52(2.21) |
|
|
| AGG
|
|
|
|
|
|
| 00 | [GATHER]
| Table
| x3[id4]
|
| 0
| 0
| 1.69(1.69) |
|
|
| AGG
|
|
|
|
|
|
+----+-----------+-----------+----------+---------------+----+-------+------------+
5 row in set
表5- 142 详细解释如下:

解释
ID
计划的步骤,从00 开始执行,从下往上依次执行的步骤。
MOTION
该步骤的执行结果的处理方式:
RESULT:结果发送到客户端;
GATHER:结果发送到汇总节点;
REDIST(…):结果HASH 重分布,括号中为计算HASH 的列,如果超长
则截断为两个点;
NO REDIST:结果直接保存到对应的数据分片,不进行重分布;
BROADCAST:结果拉复制表;
RAND REDIST:结果随机分布到所有节点;
SCALAR_N:结果为标量,N 为标量子查询的编号,如果条件中有引用,

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1143
则使用&xNx&方式引用。
如01 步骤中标量子查询[SCALAR_1],
02 步骤
中对01 步骤标量的引用:id2{S} > &x1x&
OPERATIO
N
SCAN:单表扫描,并使用条件过滤数据;
Table:单表,没有过滤条件;
SubQueryN:子查询,N 为自动编号;
Step:使用前一个Step 的结果;
INNER/LEFT/FULL JOIN:连接操作;
WHERE:子查询的WHERE 条件;
GROUP:分组操作;
ORDER:排序操作;
LIMIT:计算LIMIT,OFFSET;
AGG:distinct,聚集操作;
UNION/UNION ALL/MINUS/INTERSECT:UNION 操作;
例如图中00 的含义为:
第一个INNER JOIN 的左边为第二个INNER JOIN;
第二个INNER JOIN 的左边为date_dim,该表为复制表,有条件过滤;
第二个INNER JOIN 的右边为salesreturns,
其为子查询Salesreturns 子查询
包含一个UNION ALL:为catelog_sa..与catelog_re..的UNION ALL;
第一个INNER JOIN 的右边为catalog_page,该表为复制表;
第一个INNER JOIN 结束后有一个GROUP 操作;
对于每个步骤(ID 列不为空的为一个步骤)OPERATION 每层有1 个空格
的缩进。
TABLE
OPERATION 涉及到的表,只显示别名和属性,超长截断为两个点;
HASH 分布表:中括号中显示HASH 列;
复制表:显示[REP];
随机分布表:显示[DIS];
子查询:OPERATION 列显示SubQueryN,其中N 为数字,用来区分不同
的子查询;
某个步骤的结果:OPERATION 列显示为Step,本列显示为其中N 为
用到的步骤的第一列ID,表示该步骤的结果;
例如:
图中ID 为03 的步骤是一个汇总步骤,源表为x 子查询;
x 子查询为一个UNION,涉及到ssr,csr,wsr;
ssr,csr,wsr 都是子查询,分别来自02,00,01 的结果进行GROUP BY。
CONDITIO
N
显示操作的条件,
例如FILTER 的单表条件,
JOIN 的连接条件,
GROUP BY,
ORDER BY,LIMIT 的内容。
如果某个条件可能使用索引,会在有索引的列后进行标注,例如:

WHERE t1.a{S} > 10 表示可能使用t1.a 的智能(Smart)索引;

WHERE t1.a{H} = 10 表示可能使用t1.a 的HASH 索引;

WHERE t1.a{H}= t2.b 表示可能使用t1.a 的HASH 索引;

WHERE t1.a{H} = t2.b{H}表示可能使用t1.a 和t2.b 的HASH 索
引;

WHERE contains(t1.a{F}…) 表示可能使用t1.a 的全文(Full
Text)索引。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1144
只有物理表的单列包含索引:

物理表单列的>,<,>=,<=,=可能使用智能索引;

物理表单列的=可能使用HASH 索引,包括等于常量和等值
JOIN;

物理表的contains 函数可能使用全文索引。
ROW

WIDTH

COST
(TOTAL)
显示代价评估的内容,分别为该步骤结果的条数ROW,行宽WIDTH,该
步骤的代价和总体代价COST。
其中代价不包括结果进行数据移动的代价。
图中的值不是真实数据,仅供参考。
注:当某些表或者列缺少统计信息时,则不会显示代价相关的内容,而显
示缺少统计信息的那些表或列,如x2 和x3 表缺少统计信息,则不显示
ROW、WIDTH、COST 列,而是显示NO STA Tab/Col 列,列出缺少统计
信息相关表x2 和x3,如下显示:
gbase> explain select * from x2 where id2 > (select count(*) from x3);
+----+-----------+-----------+----------+---------------+----+-------+------+
| ID | MOTION
| OPERATION | TABLE
| CONDITION
| NO STA Tab/Col|
+----+-----------+-----------+----------+---------------+----+-------+
| 02 | [RESULT]
| SCAN
| x2[id4] | (id2{S} > &x1x&) |
|
| 01 | [SCALAR_1] | Step
| <00>
|
|
|
|
|
| AGG
|
|
|
|
| 00 | [GATHER]
| Table
| x3[id4]
|
| x3
|
|
|
| AGG
|
|
| x2
|
+----+-----------+-----------+----------+---------------+----+-------+5 row in set

DELIMIDENT 环境变量指定括在双引号 ( " ) 之间的字符串是定界数据库标识。
DELIMIDENT 环境变量在客户机系统上也是受支持的,在客户机系统中它可以设置为
y、n 或不设置。

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 167 -
y 指定客户机应用程序必须使用单引号 ( ' ) 来对字符串定界,且必须仅在定界
的 SQL 标识(它可以支持比未定界的标识中有效的字符集更大的字符集)的两边使
用双引号 ( " )。定界字符串或定界标识中的字母是区分大小写的。这是 OLE DB
和 .NET 的缺省值。
n 指定客户机应用程序可以使用双引号 ( " ) 或单引号 ( ' ) 来对字符串定界,但
是不对 SQL 标识定界。如果数据库服务器在需要 SQL 标识的上下文中遇到用双引
号或单引号定界的字符串,将发出错误。符合 SQL 标识条件的所有者名称可以用单
引号 ( ' ) 来定界。 必须使用一对相同的引号来对字符串定界。
这是 ESQL/C、JDBC 和 ODBC 的缺省值。具有 ESQL/C 作为底层的 API(如
GBase 8s 4GL、DataBlade® API (LIBDMI) 和 C++ API)具有与 ESQL/C 相同的行
为,并使用“n”作为缺省值(如果在客户机系统上没有指定 DELIMIDENT 的值)。
在客户机系统上指定没有值的 DELIMIDENT 环境变量要求客户机应用程序使用
DELIMIDENT 设置,这是应用程序编程接口 (API) 的缺省设置。

不需要任何值;DELIMIDENT 生效(如果它存在的话),且当它在环境变量列表上
时仍然有效。当 DELIMIDENT 在服务器级别设置时,除去此变量需要重新启动服务器。
定界标识可以包含空格(如短语 "Vitamin E"),也可以与 SQL 关键字完全相同
(如 "TABLE" 或 "USAGE")。还可使用定界标识来声明包含 SQL 标识的缺省字符集
之外的字符的数据库标识(如“Column #6”)。在缺省语言环境中,此缺省字符集由字
母、数字和下划线 ( _ ) 符号组成。
即使设置了 DELIMIDENT,您也可以使用单引号 ( ' ) 来将权限标识定界为数据库对
象名称的所有者名称部分,如以下示例所示:
RENAME COLUMN 'Owner'.table2.collum3 TO column3;
此示例是一般规则的例外,一般规则是这样的:当设置了 DELIMIDENT 时,SQL 解析
器将以单引号定界的字符串解释为文字串,而将以双引号 ( " ) 定界的字符串解释为
SQL 标识。
数据库标识符(也称为 SQL 标识符)是数据库对象(例如:表和列)的名称。存储
器标识是存储器对象(例如,数据库空间、Blob 空间和智能大对象空间)的名称。不能
使用 DELIMIDENT 来声明包含缺省 SQL 字符集以外字符的存储器标识。
定界标识是区分大小写的。要使用定界标识,用 GBase 8s ESQL/C 编写的应用程序
必须在编译时和运行时设置 DELIMIDENT。
重要: 如果尚未设置 DELIMIDENT,应注意对它进行设置可能会导致在定界 SQL 标
识(例如,字符串文字的定界符)之外的上下文中使用双引号 ( " ) 的现有 .sql 脚本

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 168 -
或客户机应用程序出错。如果设置了 DELIMIDENT,那么必须对不是 SQL 标识的定界构造
使用单引号 ( ' ) 而不是双引号。
在使用 C shell 并已设置了 DELIMIDENT 的 UNIX™ 系统上,可通过以下命令禁用此
功能(它会导致双引号之间的任何内容都解释为 SQL 标识):
unsetenv DELIMIDENT