我最近刚刚开始在Linux Redhawk 5.4.11系统上使用firebird DB v2.1。我正在尝试创建一个通过cron作业启动的监视器脚本。但是我遇到了一些问题,我希望得到一些建议......
首先,我已经阅读了firebird DB附带的大多数文档以及他们网站上提供的大量文档。我尝试过使用提供的gstat工具,但似乎并没有给我提供我想要的那种信息。我跑过了README.monitoring_tables文件,这个文件似乎正是我想要监控的。然而,这是我开始在我的进步中遇到障碍的地方......
从通过isql登录db运行后,我运行SELECT MON$PAGE_READS, MON$PAGE_WRITES FROM MON$IO_STATS;
我能够得到一些似乎没问题的数字。但是,再次运行该命令后,数据似乎已过时,因为数字未更新。我等了1分钟,5分钟,15分钟,所有数据都是相同的。一旦我注销并重新运行命令,数据就会改变。似乎只有在relog上才能刷新数据,但我不确定数据是否正确。
我现在的问题是我是否正确这样做?这些命令是否真正监视我的数据库或只是监视命令本身?另外为什么需要重新刷新统计信息呢?我担心的一件事是我的数据不一致。换句话说,当我每次读取/写入没有线性增加时,我的系统都会运行。它们从10k到500到2k不等。任何建议或帮助将不胜感激!
答案 0 :(得分:3)
查询监控表时,会创建监控信息的快照,以便监控表的内容对于剩余的事务是稳定的。如果需要新信息,则需要提交并启动新事务。 Firebird总是使用事务(如果没有显式启动,则isql隐式启动事务。)
这也记录在doc/README.monitoring_tables
中(至少在Firebird 2.5版本中):
在第一次从给定事务中选择任何监控表时创建快照,并且在事务结束之前保留快照,因此多个查询(例如,主要详细信息)将始终返回一致性查看数据。换句话说,即使主机事务已使用另一个隔离级别启动,监视表也始终表现为快照(也称为一致性)事务。 要刷新快照,应完成当前事务,并在新事务上下文中查询监控表。
(强调我的)
请注意,根据您的监控需求,您还应该查看Firebird 2.5中引入的trace functionality。