inmemory OOM了

xuexiaogang發表於2022-11-17

     有人問我有個SQL原來100ms的現在200毫秒了,為什麼?我看了一下,他這個是依託inmemory硬抗的那種SQL。裡面這個特性將資料放在記憶體中處理。這不是一個正式環境,我覺得開發能有此意識是非常不錯的。在測試環境發現了問題,避免帶病上陣。然後我檢查了後臺資料庫負荷、AWR等等,從AWR中看沒有多少inmemory的訪問。難道沒載入上來嗎?查詢了一下 select * from v$inmemory_area;

inmemory OOM了


驚現OOM,我是第一次遇到。看上去應該是需要載入的資料超過了分配的記憶體。所以自然有一部分是無法使用了。

select owner,segment_name,inmemory_size,bytes,bytes_not_populated,populate_status,inmemory_priority from v$IM_SEGMENTS order by segment_name

用這個命令可以查到,一半的表失敗了。

inmemory OOM了


知道問題了就好說了。要麼是加大記憶體來存放這些資料。

另外一個就是精細化調整了,選擇部分列加入到記憶體,而不用的不載入,按需。

舉例來說:

--create table t1 (id int, a varchar2(101),b varchar2(100));

Alter table t1 inmemory (id, a)   no inmemory(b); 


再查詢 SELECT * FROM GV$IM_COLUMN_LEVEL  可以看到有些就沒載入進去。

inmemory OOM了


其實多年經驗告訴我,資料庫就應該物理機給他一個大記憶體。用虛擬機器摳摳索索的問題總是不斷。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2923926/,如需轉載,請註明出處,否則將追究法律責任。

相關文章