此文章主要講述的是教你輕松掌握DB2 9.5的數據庫內存保護的實際操作步驟,在DB2 9.5數據庫版本中,數據庫引擎由主要是因為過程模式轉變而為線程模式,這將意味著整個數據庫引擎都在一個地址空間下(任何代碼段都可以訪問任何全局變量)。
這自然是有利也有弊。其中一個有利的方面是線程比過程更“輕”,這表示DB2的性能更好。有人做過測試顯示DB2 9.5的性能在負荷運行情況下比相同狀態下的DB2 9.1提升了2%到5%。
而不利的方面是,在任何與緩沖池無關的任何db2代碼路徑中的任何db2錯誤都有可能會破壞數據頁。此外,和db2共享相同地址空間的非保護模式下的用戶自定義函數(unfenced UDF)也有可能會破壞內存頁。
而後,這些不正確數據頁就會在毫不察覺的情況下被寫入磁盤裡,而你很可能永遠都不會知道這些數據已經出現了不一致。線程模式還會產生與非保護模式下的用戶自定義函數相關的安全問題,因為線程模式在潛在情況下會允許惡意用戶代碼在沒有得到授權的情況下讀寫數據頁。
如果在保護(fensed)模式下運行用戶自定義函數,這些問題就都不成問題,用戶代碼會通過一個子過程執行並且會通過IPC與DB2進行交流,唯一的問題就是這樣做比在非保護模式下運行要慢很多。
在IBM的Power6 CPU上市的時候,也帶來了一項用於內存保護的新技術就是用戶級別存儲鍵技術。這裡不是說的內核級別存儲鍵,這個已經存在了一段時間,而用戶級別的存儲鍵則是個新東西。存儲鍵能夠使應用程序鎖定內存頁,防止對其進行任何形式的讀寫組合操作。
必須支持CPU上的存儲鍵是因為內存訪問的速度非常之快(達到納秒級),在軟件水平是無法做到的。存儲鍵使在用戶空間執行的DB2引擎能夠防止代碼段對緩沖池數據頁進行無授權的讀寫操作。當然,如果你是在AIX上運行Power6處理器,那這只是其中一個可選的保護措施。啟動該功能需要5%到6%的性能開銷。用下面的語句啟動該功能:
以下是引用片段:
- db2set DB2_MEMORY_PROTECT=yes
- RESTART YOUR INSTANCE
你需要運行AIX 5.3 ML6(或更高版本)或AIX 6.1版操作系統。
假如你還在AIX上開發c或C++代碼,而且並不適用Java的話,你可以選擇使用ukey_protect( address, size, UKEY_PRIVATE)函數來協助保護數據內存結構。以上的相關內容就是對教你輕松掌握DB2 9.5的數據庫內存保護的介紹,望你能有所收獲。
以上的相關內容就是對教你輕松掌握DB2 9.5的數據庫內存保護的介紹,望你能有所收獲。