通过 systabnames , systabinfo 和 sysdbstab ,生成临时表(和hash-temp排序)的列表非常简单他们目前消耗的空间量。
但是当你有许多用户/进程运行相同的SQL并生成具有相同名称的临时表时,你会看到高度重复的输出。
sysmaster中是否有一个表,通过该表可以将临时表的partnum与创建它的会话相关联?
答案 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)中挖掘出详细信息(例如它们),那么请发表评论。