日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shell 获取ora报错信息_ORA-04030: 在尝试分配...字节(...)时进程内存不足的原因分析...

發(fā)布時間:2025/3/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell 获取ora报错信息_ORA-04030: 在尝试分配...字节(...)时进程内存不足的原因分析... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

前段時間使用的oracle 11g數據庫,在用一段時間后(開始要較長時間才出現,后來較短時間就出現),頻繁報ORA-04030錯誤,具體錯誤信息是 ORA-04030: 在嘗試分配...字節(jié)(...)時進程內存不足。

根據異常信息,可以很容易的判斷是由于內存使用過多,分配不足所致的,但是服務器本身內存并不小,由此可以說明oracle在分配內存時,應該是有限制的,當超出這個限制的時,就會出現這個錯誤。

網上說法很多,下面整理了下一般處理的一個思路和方法。


1、是否仍然有足夠的可用內存?

主要使用操作系統特定的工具(top、topas、vmstat、swapon -s)來檢查內存使用情況。如果有足夠的內存可用,那么就需要檢查操作系統是否存在強制限制。如果內存已被耗盡,那么就需要找出內存被用到了哪些地方。

2、是否設置了操作系統限制?

如果仍有足夠的內存可用,那么有可能是進程需要使用的內存量是不被允許的。使用命令“ulimit -a”查看操作系統限制。尤其對于“data seg size”選項,應該設置為 unlimited。在 RAC 或 GRID 環(huán)境中,由于數據庫監(jiān)聽是通過 CRS 進行啟動,所以監(jiān)聽繼承了 root 用戶的 ulimit 限制。如果在 root 的 ulimit限制中 data(kbytes)的限制為 1310kb,那么表示每個通過監(jiān)聽連接的進程能分配的內存資源不能超過1310kb。

3、是否設置了 Oracle 限制?

查詢參數 PGA_AGGREGATE_TARGET 的大小,該參數限制一個實例可以分配的 PGA 總量。以下查詢用于查找分配給所有會話的 PGA 區(qū)的內存總量:

SELECT SUM(VALUE) / 1024 / 1024 PGA_SIZE_MBFROM V$SESSTAT S, V$STATNAME NWHERE N.STATISTIC# = S.STATISTIC#AND NAME = 'session pga memory';

4、哪個進程需要的內存過多?

一些操作會需要大量的進程內存,例如,大型的 PL/SQL 表或大量的排序操作。

可以使用以下查詢來查找所有 Oracle 進程的 PGA 和 UGA 大小:

SELECT SID, NAME, VALUEFROM V$STATNAME N, V$SESSTAT SWHERE N.STATISTIC# = S.STATISTIC#AND NAME LIKE 'session%memory%'ORDER BY 3 ASC;

通常,從操作系統的角度來確認進程內存使用情況,是一個好辦法。畢竟,使用過多內存的不一定是 Oracle Server 進程。

5、如何收集有關進程實際正在執(zhí)行的任務的信息?

可以做 heapdump,然后分析 dump 結果:

SQL> select PID from v$process p, v$session s where p.addr=s.paddr and sid=;SQL> oradebug setorapid SQL> oradebug unlimitSQL> oradebug dump errorstack 3SQL> oradebug dump heapdump 536870917SQL> oradebug tracefile_name (shows the path and filename information)SQL> oradebug close_trace

或者使用 event,如下所示:

設置系統級事件來產生 ORA-04030 錯誤時的 trace 文件,設置 event 如下:

alter system set events '4030 trace name errorstack level 3;name HEAPDUMP level 536870917';

得到報錯的 dump 文件后,關閉生成 event:

alter system set events '4030 trace name errorstack off';alter system set events '4030 trace name HEAPDUMP off';

實際上引起ORA-04030的原因,是不能分配更多的內存,解決辦法有兩種,其一是加大內存,其二是對oracle的內存控制參數進行調整,使其內存分配更適合于當前的應用程序。

后面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下!!

總結

以上是生活随笔為你收集整理的shell 获取ora报错信息_ORA-04030: 在尝试分配...字节(...)时进程内存不足的原因分析...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。