1. 程式人生 > >informix 臨時表空間

informix 臨時表空間

informix臨時表空間
                
       在 Informix 資料庫中,我們經常會建立一些臨時表來處理應用中的臨時資訊。系統可以採用如下兩種方式建立臨時表:
          使用 SELECT INTO TEMP 語句隱含地建立臨時表
          使用 CREATE TEMP TABLE 語句顯示地建立臨時表
       如果資料庫採用非日誌模式,DBSPACETEMP 環境變數或配置引數設定後,臨時表會自動建立在由 DBSPACETEMP 環境變數或配置引數指定的資料空間上;如果資料庫採用日誌模式,那麼建立      的臨時表預設情況下是記日誌的,不會被建立在由 DBSPACETEMP 環境變數或配置引數指定的資料空間上,那麼由 SELECT ... INTO TEMP 語句建立的臨時表將被建立在根資料空間(Root           dbspace)上,由 CREATE TEMP TABLE 語句建立的臨時表將被建立在資料庫所在的資料空間上。如果希望臨時表建立在由 DBSPACETEMP 環境變數或配置引數指定的資料空間上,我們需要使用       SELECT INTO TEMP with no log 語句或 CREATE TEMP TABLE with no log 語句來建立臨時表。

         臨時表按照如下優先順序建立在相應的資料空間上:
          由 DBSPACETEMP 環境變數指定的資料空間
          由 DBSPACETEMP 配置引數指定的資料空間
         如果設定了 DBSPACETEMP 環境變數,那麼臨時表會建立在由 DBSPACETEMP 環境變數指定的資料空間上,如果沒有設定 DBSPACETEMP 環境變數,那麼臨時表會建立在由 DBSPACETEMPP 配        置引數指定的資料空間上。

        出於效能考慮,一般我們建議在多個物理磁碟上建立多個臨時表空間,這樣,當建立臨時表時,它會分片到所有臨時表空間上,提高併發處理效率。
        在採用日誌模式的資料庫中,對臨時表的所有 DML 操作都要記日誌,而且不加 with no log 選項,臨時表不會建立在由 DBSPACETEMP 環境變數或配置引數指定的臨時資料空間上,往往        資料會寫到根資料空間(Root dbspace)上,影響系統性能,而且使用者在建立臨時表時,往往總是忘記 with no log 選項。為了解決上述問題,Informix 11 版本開始提供了關閉對臨時表記       日誌的方法,這樣,建臨時表時,即使沒加 with no log 選項,臨時表也會建立在由 DBSPACETEMP 環境變數或配置引數指定的臨時資料空間上。

        我們可以採用下述兩種方法來關閉對臨時表記日誌:
          修改 onconfig 配置引數         TEMPTAB_NOLOG 1
        通過 onmode 命令動態改變
                onmode -Wf "TEMPTAB_NOLOG =1" 
                onmode -Wm "TEMPTAB_NOLOG =1"
        其中,-Wm 選項改變引數值後立即生效; -Wf 選項改變引數值後立即生效,同時將新的引數值寫到 onconfig 配置檔案中。
        使用 TEMPTAB_NOLOG 引數來禁用臨時表上的日誌記錄。該引數可以改進應用程式的效能,尤其是在有 HDR 輔助伺服器、RS 輔助伺服器或 SD 輔助伺服器的資料複製環境中,因為其防止         Informix 通過網路傳輸臨時表。