返回首页

gbase数据、南大通用产品文档:GBase8s向下钻取查询

更新日期:2024年09月11日

可以使用向下钻取查询(也称为 SQL 跟踪)来收集有关运行的每个 SQL 语句的统计信
息以及分析语句历史记录。
SQL 跟踪可帮助您回答如下问题:

SQL 语句耗费多少时间?

单个语句使用多少资源?

语句执行耗费多少时间?

等待每个资源耗费多少时间?
统计信息存储在循环缓冲区(内存中名为 syssqltrace 的伪表)中,即存储在 sysmaster 数
据库中。您可以动态地调整循环缓冲区的大小。
缺省情况下,SQL 跟踪已关闭,但是您可以对所有用户或一组特定用户打开此功能。在
启用具有缺省配置的 SQL 跟踪时,数据库服务器会跟踪运行的上 1000 条 SQL 语句,
以及这些语句的概要统计信息。还可以全局禁用 SQL 跟踪或禁用对特定用户的 SQL 跟
踪。
如果您计划保存大量历史信息,那么 SQL 跟踪所需的内存相当大。SQL 跟踪所需的缺省
空间量为 2 MB。可以根据需求增加或减少存储量。
显示的信息包括:

运行命令的用户的用户标识

数据库会话标识

数据库的名称

SQL 语句的类型

SQL 语句执行的持续时间

该语句完成的时间

带有语句类型的 SQL 语句文本或函数调用列表(也称为堆栈跟踪),例如:
procedure1() calls procedure2() calls procedure3()

统计信息包括:

缓冲区读取和写入的数目

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 546 -

页面读取和写入的数目

排序和磁盘排序的数目

锁请求和等待的数目

逻辑日志记录的数目

索引缓冲区读取的数目

估计的行数

优化器估计成本

返回的行数

数据库隔离级别。
也可指定跟踪中要包含的信息的升级级别,如下所示:

低级别跟踪,缺省情况下已启用,用于捕获以下示例中显示的信息。该信息包含
语句统计信息、语句文本和语句迭代器。

中等级别跟踪,除了用于捕获低级别跟踪中包含的所有信息外,还捕获表名、数
据库名称和存储过程堆栈的列表。

高级别跟踪,除了用于捕获中等级别跟踪中包含的所有信息外,还捕获主变量。
所跟踪的信息量影响该历史数据所需的内存量。
您可以在任何时候启用和禁用跟踪,并可在数据库服务器运行时更改跟踪缓冲区的数目和
大小。如果调整跟踪缓冲区的大小,那么数据库服务器将尝试维护缓冲区的内容。如果增
大这些参数,数据将不会被截断。但是,如果缓冲区的数目或大小减小,那么跟踪缓冲区
中的数据将被截断或丢失。
缓冲区的数目确定了所跟踪的 SQL 语句数。每个缓冲区包含单个 SQL 语句的信息。缺
省情况下,各个跟踪缓冲区的大小是固定的。如果缓冲区中存储的文本信息超过跟踪缓冲
区的大小,那么数据被截断。
以下示例显示 SQL 跟踪信息:
select * from syssqltrace where sql_id = 5678;

sql_id 5678
sql_address 4489052648
sql_sid 55
sql_uid 2053
sql_stmttype 6
sql_stmtname INSERT
sql_finishtime 1140477805
sql_begintxtime 1140477774

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 547 -
sql_runtime 30.86596333400
sql_pgreads 1285
sql_bfreads 19444
sql_rdcache 93.39127751491
sql_bfidxreads 5359
sql_pgwrites 810
sql_bfwrites 17046
sql_wrcache 95.24815205913
sql_lockreq 10603
sql_lockwaits 0
sql_lockwttime 0.00
sql_logspace 60400
sql_sorttotal 0
sql_sortdisk 0
sql_sortmem 0
sql_executions 1
sql_totaltime 30.86596333400
sql_avgtime 30.86596333400
sql_maxtime 30.86596333400
sql_numiowaits 2080
sql_avgiowaits 0.014054286131
sql_totaliowaits 29.23291515300
sql_rowspersec 169.8958799132
sql_estcost 102
sql_estrows 1376
sql_actualrows 5244
sql_sqlerror 0
sql_isamerror 0
sql_isollevel 2
sql_sqlmemory 32608
sql_numiterators 4
sql_database db3
sql_numtables 3
sql_tablelist t1
sql_statement insert into t1 select {+ AVOID_FULL(sysindices) } 0, tabname
有关所有表行的解释,请参阅《GBase 8s 管理员参考》的 sysmaster 数据库部分中有
关 syssqltrace 表的信息。

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 548 -
使用 SQLTRACE 配置参数指定启动 SQL 跟踪信息
使用 SQLTRACE 配置参数可控制数据库服务器启动时的缺省跟踪行为。缺省情况下,不
设置该参数。所设置的信息包括要跟踪的 SQL 语句数目和跟踪方式。
可以修改 onconfig 文件的任何用户均可修改 SQLTRACE 配置参数的值,并可影响启动配
置。但是,只有用户 gbasedbt、root 或被授予 sysadmin 数据库连接特权的 DBSA 才可以
使用 SQL 管理 API 命令来修改 SQL 跟踪的运行时状态。
要在数据库服务器启动时指定 SQL 跟踪信息,请执行以下操作:
1.
设置 onconfig 文件中的 SQLTRACE 配置参数。
2.
重新启动数据库服务器。
示例
onconfig 文件中的以下设置指定数据库服务器将收集有关系统上所有用户执行过的低级别
信息,最多收集 2000 条,并分配大约 4 MB 内存 (2000 * 2 KB)。
SQLTRACE level=LOW,ntraces=2000,size=2,mode=global
如果仅使用部分已分配的缓冲区空间(例如,缓冲区空间的 42%),那么所分配的内存
量仍然为 2 KB。
如果不想设置 SQLTRACE 配置参数并重新启动了服务器,那么可以运行以下 SQL 管理
API 命令,该命令提供的功能与为当前会话设置 SQLTRACE 的功能相同:
EXECUTE FUNCTION task("set sql tracing on", 100,"1k","med","user");
在以用户方式启用 SQL 跟踪系统后,就可以启用对每个用户的跟踪。请参阅启用 SQL
跟踪。
有关使用 task() 和 admin() 函数的更多信息,请参阅《GBase 8s 管理员参考》。
有关 SQLTRACE 配置参数的更多信息(包括某些字段的最小值和最大值),请参阅
《GBase 8s 管理员参考》。
全局禁用 SQL 跟踪或禁用对某个会话的 SQL 跟踪
即使 SQLTRACE 配置参数中指定的方式为 global 或 user,但如果要完全关闭所有用户和
全局跟踪,并取消分配给 SQL 跟踪当前正在使用的资源,也可以禁用 SQL 跟踪。缺省
情况下,禁用对所有用户的 SQL 跟踪。
必须以用户 gbasedbt 或其他授权用户身份连接 sysadmin 数据库。
要禁用全局 SQL 跟踪,请运行使用 set sql tracing off 自变量的 SQL 管理
API task() 或 admin() 函数。
要禁用对特定会话的 SQL 跟踪,请运行 set sql tracing off 作为第一个自变量,会话标识
号作为第二个自变量的 task() 或 admin() 函数。
示例

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 549 -
以下示例全局禁用 SQL 跟踪:
EXECUTE FUNCTION task('set sql tracing off');
(expression) SQL tracing off.

1 row(s) retrieved.
以下示例对标识为 47 的会话禁用 SQL 跟踪:
EXECUTE FUNCTION task(“set sql user tracing off”,47);
有关使用 task() 或 admin() 函数的更多信息,请参阅《GBase 8s SQL 指南:语法》。
启用对特定用户的 SQL 跟踪
在指定 user 作为 SQLTRACE 配置参数中的方式后,必须运行 SQL 管理
API task() 或 admin() 函数来打开对特定用户的 SQL 历史记录跟踪。
必须以用户 gbasedbt 或其他授权用户身份连接 sysadmin 数据库。
无需启用全局 SQL 跟踪,即可对特定用户进行 SQL 跟踪。
要启用对特定用户的 SQL 跟踪,请运行使用 set sql tracing on 作为第一个自变量,用户会
话标识作为第二个自变量的 task() 或 admin() 函数。
要对除 root 或 gbasedbt 之外的所有用户启用用户 SQL 跟踪,可运行使用 set sql tracing
on 自变量和定义这些用户的信息的 task() 或 admin() 函数。
示例
以下示例对会话标识为 74 的用户启用 SQL 跟踪:
EXECUTE FUNCTION task("set sql user tracing on", 74);
以下示例启用对当前连接到系统的用户(只要它们未以用户 root 或 gbasedbt 身份登录)的
SQL 语句跟踪。
dbaccess sysadmin -<execute function task("set sql tracing on", 1000, 1,"low","user");
select task("set sql user tracing on", session_id)

FROM sysmaster:syssessions

WHERE username not in ("root","gbasedbt");
END
有关 task() 和 admin() 函数的更多信息,请参阅《GBase 8s 管理员参考》。
启用对某个会话的全局 SQL 跟踪
可以通过运行 SQL 管理 API task() 或 admin() 函数,对当前会话启用全局 SQL 跟踪。
必须以用户 gbasedbt 或其他授权用户身份连接 sysadmin 数据库。

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 550 -
缺省情况下,全局 SQL 跟踪未启用。可以设置 SQLTRACE 配置参数以永久启用全局跟
踪。
要对当前数据库服务器会话启用全局用户 SQL 历史记录跟踪,请运行使用 set sql tracing
on 自变量的 SQL 管理 API task() 或 admin() 函数。
示例
以下示例对所有用户启用全局低级别 SQL 跟踪:
EXECUTE FUNCTION task("set sql tracing on", 1000, 1,"low","global");
如果在语句运行后有新用户登录到系统,那么可以启用对该新用户的跟踪。请参阅启用
SQL 跟踪。
有关 task() 和 admin() 函数的更多信息,请参阅《GBase 8s SQL 指南:语法》。






GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 551 -













MIN(),MAX()
函数说明
MIN([DISTINCT] expr),
MAX([DISTINCT] expr)返回expr 的最小值或最大值。

以为MIN()和MAX()设置参数,在这种情况下,它们将返回参数指定列的最小值
或最大值。DISTINCT 关键词可以被用来查找expr 的不同值的最小值或最大值,
然而,
这样产生的结果与省略DISTINCT 的结果相同。
MIN 和MAX 不包括NULL
值。
示例
示例1:返回lo_supplycost 列的最大值和最小值。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
864
gbase> SELECT lo_shipmode,MAX(lo_supplycost),MIN(lo_supplycost)
FROM ssbm.lineorder GROUP BY lo_shipmode;
+-------------+--------------------+--------------------+
| lo_shipmode | MAX(lo_supplycost) | MIN(lo_supplycost) |
+-------------+--------------------+--------------------+
| AIR
|
125939 |
54060 |
| REG AIR
|
125939 |
54060 |
| TRUCK
|
125939 |
54060 |
| SHIP
|
125939 |
54060 |
| MAIL
|
125939 |
54060 |
| FOB
|
125939 |
54060 |
| RAIL
|
125939 |
54060 |
+-------------+--------------------+--------------------+
7 rows in set

Execute 权限使得用户能够调用例程。通过 EXECUTE 或 CALL 语句,或通过使用表达
式中的函数可能调用例程。
下列用户拥有缺省的 Execute 权限,
这使得他们能够调用例程:

在缺省情况下,任何具有 DBA 权限的用户都可执行数据库中的任何例程。

如果以限定的 CREATE DBA FUNCTION 或 CREATE DBA PROCEDURE 语句
注册该例程,则仅拥有 DBA 权限的用户对那个例程有缺省的 Execute 权限。

如果数据库不符合 ANSI,则用户 public(任何拥有 Connect 数据库权限的用户)
自动地拥有对例程的 Execute 权限,未以 DBA 关键字注册该例程。

在符合 ANSI 的数据库中,过程所有者和任何拥有 DBA 权限的用户都可执行该
例程,而无需收到附加的权限。

授予和撤销 Execute 权限
例程有下列 GRANT 和 REVOKE 要求:

DBA 可将 Execute 权限授予数据库中的任何例程,也可撤销它。

例程的创建者可授予或取消对那个特定的例程的 Execute 权限。通过包括带有
GRANT EXECUTE ON 语句的 AS grantor 子句,创建者丧失授予或撤销的能力。

如果所有者在 GRANT EXECUTE ON 语句中应用了 WITH GRANT 关键字,
则另
一用户可授予 Execute 权限。
对于下列条件,DBA 或例程所有者必须显式地将 Execute 权限授予非 DBA 用户:

以 DBA 关键字子句注册了的例程

在符合 ANSI 的数据库中的例程

不符合 ANSI 的数据库中的例程,但将 NODEFDAC 环境变量设置为 yes。

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 325 -
即使数据库服务器缺省地将权限授予 public,所有者也可限制对例程的 Execute 权限。为
此,请发出 REVOKE EXECUTE ON PUBLIC 语句。DBA 和所有者仍可执行该例程,且
如果使用的话,则可将 Execute 权限授予特定的用户。
使用 COMMUTATOR 和 NEGATOR 函数的 Execute 权限
重要: 如果您显式地授予对 SPL 函数的 Execute 权限,其为 UDR 的换向函数或否定函数,
则在被授予者可使用任意函数之前,您还必须授予对换向函数或否定函数的那种权限。您不可
随同 SPL 过程指定 COMMUTATOR 或 NEGATOR 修饰符。
下列示例演示对于函数的限制授权,以及将它的否定函数限定为一组用户。假设您创建下
列否定函数对:
CREATE FUNCTION greater(y PERCENT, z PERCENT)
RETURNS BOOLEAN
NEGATOR= less(y PERCENT, z PERCENT);
. . .
CREATE FUNCTION less(y PERCENT, z PERCENT)
RETURNS BOOLEAN
NEGATOR= greater(y PERCENT, z PERCENT);
在缺省情况下,任何用户都可执行该函数和否定函数。下列函数仅允许 accounting 执行这
些函数:
REVOKE EXECUTE ON FUNCTION greater FROM PUBLIC;
REVOKE EXECUTE ON FUNCTION less FROM PUBLIC;
GRANT accounting TO mary, jim, ted;
GRANT EXECUTE ON FUNCTION greater TO accounting;
GRANT EXECUTE ON FUNCTION less TO accounting;
用户可能接收附带 WITH GRANT OPTION 授权的 Execute 权限来将 Execute 权限授予
其他用户。如果用户失去对例程的 Execute 权限,则还从通过那个用户授予了 Execute 权
限的那些用户撤销 Execute 权限。
要获取更多信息,请参阅《GBase 8s SQL 指南:语法》 中的 GRANT 和 REVOKE 语句
描述。