是否可以将Informix临时表与通过sysmaster创建它的会话相关联?

时间:2011-07-19 01:42:04

标签: informix

通过 systabnames systabinfo sysdbstab ,生成临时表(和hash-temp排序)的列表非常简单他们目前消耗的空间量。

但是当你有许多用户/进程运行相同的SQL并生成具有相同名称的临时表时,你会看到高度重复的输出。

sysmaster中是否有一个表,通过该表可以将临时表的partnum与创建它的会话相关联?

1 个答案:

答案 0 :(得分:2)

在过去几年中,在其他与Informix相关的论坛中,已经多次询问过这个问题,并且没有一个真正令人满意的答案。

您可能熟悉以下的一些变体:

SELECT hex(i.ti_partnum) partition,
       trim(n.dbsname) || ":" || trim(n.owner) || ":" || trim(n.tabname) table,
       i.ti_nptotal allocated_pages
  FROM sysmaster:systabnames n, sysmaster:systabinfo i
 WHERE (   sysmaster:bitval(i.ti_flags, "0x0020") = 1
        OR sysmaster:bitval(i.ti_flags, "0x0040") = 1
        OR sysmaster:bitval(i.ti_flags, "0x0080") = 1
       )
   AND i.ti_partnum = n.partnum
   AND i.ti_partnum > 0

应使用JOIN表示法重写为:

SELECT hex(i.ti_partnum) partition,
       trim(n.dbsname) || ":" || trim(n.owner) || ":" || trim(n.tabname) table,
       i.ti_nptotal allocated_pages
  FROM sysmaster:systabnames n
  JOIN sysmaster:systabinfo i
    ON i.ti_partnum = n.partnum
 WHERE (   sysmaster:bitval(i.ti_flags, "0x0020") = 1
        OR sysmaster:bitval(i.ti_flags, "0x0040") = 1
        OR sysmaster:bitval(i.ti_flags, "0x0080") = 1
       )
   AND i.ti_partnum > 0

但这只会提供您已经了解的信息。

我确实发现了一种使用onstat -g opn报告的技术来检测通过onstat -u以某种方式连接回会话的开放分区。遗憾的是,onstat -g opn报告的数据是SMI和sysmaster无法提供的,因此这属于“ON-Stat输出的脚本分析”类别。如果您希望我从一个不起眼的电子邮件帐户存档(大约2007年,IIRC)中挖掘出详细信息(例如它们),那么请发表评论。