了解Firebird监控表中的MON $ STAT_ID

Sha*_*rki 2 firebird firebird2.1

我几周后发布了询问firebird DB以及如何监控它的信息.从那以后,我想出了一个漂亮的脚本来监控所有的页面读/写/提取/标记.我监控的其中一个列是字段MON$STAT_IDMON$STAT_GROUP字段.这为我打印了一个很好的数字; 但是,我没有办法关联和理解究竟是什么.我认为打印出来MON$STAT_GROUP会有所帮助,但它还没有以任何方式帮助我......

我也查看了RDB$命令,但发现了非常有限的文档,看看它们是否可以帮助我监视我的数据库.

所以我决定来这里询问我是否正在监视我的数据库,以便其他人可以从页面读取/写入/提取/标记中查看数据,并对数据库是否按预期执行做出明智的决定.

其次,将RDB$命令添加到我的脚本添加任何数据的值,我将给我们的数据库伙伴?

最后,也许最重要的是,无论如何都要将MON$STAT_ID字段与数据库中的实际表关联起来,以了解何时发生的事情不应该是什么?我目前正在每分钟监视数据库,这可能是频繁的,但我得到有效的数据.现在唯一的问题是如何解释这些数据.有人可以给我一些关于他们过去使用/曾经使用过的方法的建议吗?

(注意:运行firebird 2.1)

Mar*_*eel 6

MON$STAT_IDMON$IO_STATS(和MON$RECORD_STATSMON$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()RDB$SET_CONTEXT().您可以使用RDB$GET_CONTEXT()获取当前的connection(SESSION_ID)和事务id(TRANSACTION_ID).这些值的值可用于MON$ATTACHMENT_IDMON$TRANSACTION_ID在监控表.我不认为在其他变量SYSTEM的命名空间是有趣的,和那些在USER_SESSIONUSER_TRANSACTION都是由用户定义的(和最初的命名空间是空的).

在语句中使用CURRENT_CONNECTIONCURRENT_TRANSACTION上下文变量要容易得多.如doc\README.monitoring_tables.txtFirebird安装中所述:

系统变量CURRENT_CONNECTION和CURRENT_TRANSACTION可用于分别选择有关当前(用于调用者)连接和事务的数据.这些变量对应于相应监视表的ID列.

注意:我的答案基于Firebird 2.5.