附录 E: 监控表
Firebird数据库引擎可以监视数据库中的活动并使其可供用户通过监控表查询。这些表的定义总是出现在数据库中,所有命名带有前缀MON$。表是虚拟的:他们只有在用户查询时才填充数据。这是也是一个很好的理由,为他们试图创建触发器是没有用的!
理解监测功能的关键概念是活动快照。活动快照表示在监控表查询运行的事务的开始数据库的当前状态。它投递大量有关数据库本身的信息,活动连接,用户,事务准备,运行查询及更多的信息。
当任意一个监控表第一次被查询时,快照就会被建立,它被保存直到结束当前事务保持稳定和一致的视图为查询跨多个表,比如一个主从复合结构,换句话说,监控表总是表现得好像他们在SNAPSHOT TABLE STABILITY("一致性")隔离,即使启动当前事务隔离级别较低。
若要刷新快照,当前事务必须完成且监控表必须在一个新的事务上下文重新查询。
访问安全
•SYSDBA 和数据库所有者有从监控表完全访问所有可用信息的权限
•普通用户可以看到关于他们自己的连接信息;其他连接对它们而言是不可见的。
警告
在高负荷环境中,通过监测表收集信息可能对系统的性能造成负面的影响。
表 E.1. 监控表列表
系统表 | 内容 |
MON$ATTACHMENTS | 关于活动附件到数据库的信息 |
MON$CALL_STACK | 由存储过程和触发器调用到堆栈的活跃查询 |
MON$CONTEXT_VARIABLES | 有关自定义上下文变量的信息 |
MON$DATABASE | 被CURRENT_CONNECTION连接的数据库的有关信息 |
MON$IO_STATS | 输入/输出统计 |
MON$MEMORY_USAGE | 内存使用情况统计信息 |
MON$RECORD_STATS | 记录级统计 |
MON$STATEMENTS | 准备执行的语句 |
MON$TRANSACTIONS | 已开始的事务 |