(and and ) 中的列MON$STAT_ID
是监控表中记录的主键。几乎所有其他监控表都包含一个指向这些统计信息:、、、、。MON$IO_STATS
MON$RECORD_STATS
MON$MEMORY_USAGE
MON$STAT_ID
MON$ATTACHMENTS
MON$CALL_STACK
MON$DATABASE
MON$STATEMENTS
MON$TRANSACTIONS
换句话说:统计数据适用于数据库、附件、事务、语句或调用级别(PSQL 执行)。统计表包含一个称为MON$STAT_GROUP
识别这些类型的列。的值在MON$STAT_GROUP
中描述RDB$TYPES
:
- 0:
DATABASE
- 1:
ATTACHMENT
- 2:
TRANSACTION
- 3:
STATEMENT
- 4:
CALL
通常,级别 0 的统计信息包含级别 1 的所有数据,级别 1 包含该附件的级别 2 的所有数据,级别 2 包含该事务的级别 3 的所有数据,级别 3 包含该语句的级别 4 的所有数据。
由于可能存在与较低级别无关的数据处理,或者特定附件、事务或语句句柄已被删除,因此较低级别的数量不一定汇总为较高级别的全部数量。
无法将统计信息与特定表相关联(因为此信息与表无关,但 - 简化 - 来自执行可能涵盖多个表的语句)。
正如我还评论的那样,我不确定您所说的“RDB$
命令”是什么意思。但我假设你在谈论RDB$GET_CONTEXT()
and RDB$SET_CONTEXT()
。您可以使用RDB$GET_CONTEXT()
获取当前连接 ( SESSION_ID
) 和事务 id ( TRANSACTION_ID
)。这些值值可用于监控表MON$ATTACHMENT_ID
和MON$TRANSACTION_ID
在监控表中。我不认为SYSTEM
命名空间中的其他变量很有趣,并且这些USER_SESSION
变量USER_TRANSACTION
都是用户定义的(最初这些命名空间是空的)。
在语句中使用CURRENT_CONNECTION
和上下文变量要容易得多。CURRENT_TRANSACTION
如doc\README.monitoring_tables.txt
Firebird 安装中所述:
系统变量 CURRENT_CONNECTION 和 CURRENT_TRANSACTION 可用于分别选择有关当前(对于调用者)连接和事务的数据。这些变量对应于相应监控表的 ID 列。
注意:我的回答是基于 Firebird 2.5。