2011-07-19 54 views
1

通過systabnamessystabinfosysdbstab,這是相當簡單的,產生的臨時表(和散列臨時排序)和他們當前正在使用的空間量的列表。是否可以將Informix臨時表與通過sysmaster創建它的會話相關聯?

但是,當你有許多用戶/進程運行相同的SQL並生成具有相同名稱的臨時表時,你會發現看起來是高度重複的輸出。

在sysmaster中是否有一個表,通過它可以將臨時表的partnum關聯到創建它的會話

回答

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)中挖掘出詳細信息,請發表評論。

+0

感謝喬納森,我知道遲早我會從你那裏得到明確的答案:-)我已經擁有的SQL看起來非常像你在那裏的東西,我想我已經把所有的新聞組檔案爲非答案。它似乎是SMI的一個明顯的遺漏,你不覺得嗎?總之,現在不用擔心挖掘腳本。謝謝你的幫助。 – RET

相關問題