oracle錯誤1327,Oracle中的PGA監控報警分析(r11筆記第97天)

最近接到一個數據庫報警,讓我頗有些意外,這是一個PGA相關的報警。聽起來感覺是應用端的資源調用出了問題。

報警內容大體如下:

報警內容: PGA Alarm on alltest

------------------------------------報警級別: PROBLEM

------------------------------------監控項目: PGA:6118.6這是一個12cR1的環境,是一套測試環境,確切的說是多套環境整合后的一套大的測試環境,里面含有近8個PDB,也就是之前的多個測試環境整合而來。

所以我就簡單進行了排查,首先這個報警是怎么來的,是在Orabbix配置的監控項。

在Zabbix中查看,可以看到這個報警的相關配置。

({Template_Oracle_OLTP:pga.last(0)}*100/{Template_Oracle_OLTP:pga_aggregate_target.last(0)})>95也就意味著PGA的使用率達到了95%以上的時候就觸發報警,這里涉及兩個監控項pga和pga_aggregate_target。

相關的SQL如下,監控項的SQL在Orabbix中是按照 【監控項】.Query的格式展現的。

pga_aggregate_target.Query=select

to_char(decode( unit,'bytes', value/1024/1024, value),'999999999.9')

value from V$PGASTAT where name in 'aggregate PGA target parameter'

pga.Query=select

to_char(decode( unit,'bytes', value/1024/1024, value),'999999999.9')

c對于這個問題,查看數據庫參數,目前的pga設置是6GSQL> show parameter pga

NAME?????? ? ? ? ? ?TYPE??? ? VALUE

----------------------- ----------- --------

pga_aggregate_limit???? big integer 12880M

pga_aggregate_target??? big integer 6440M但是看起來好像有些不大對勁,還有一個生疏的參數pga_aggregate_limit,這個參數是干什么的,其實這是12c中引入的一個參數,對于pga_aggregate_target的補充。怎么理解容易一些呢,pga_aggregate_target是一個基線值,比如設置為6G,如果PGA使用超過了6G還是很難做到管控,就可能導致一些hang,無響應的問題,這個問題在12c中是考慮引進了參數pga_aggregate_limit來完善的,也就是這個參數的值就是一個最終的大小,絕對不能超過。這個參數輸出中,目前的limit值默認給設置為了12G,而原本設置的target值為6G.

目前的報警是PGA使用超過了閾值,那什么樣的應用會導致如此的PGA使用情況呢,這個讓我有些疑惑。一般來說,單個進程的PGA占用量其實不大,多點也就幾十MB而已。當然為了先盡快修復這個問題,我把PGA target的值改為了7G.

然后我們可以直接這樣嘗試定位一下問題,看看占用PGA最多的進程是哪個,依次來排除。

SQL>? select max(pga_max_mem/1024/1024) from v$process;

MAX(PGA_MAX_MEM/1024/1024)

--------------------------

7989.28072結果看到最大進程怎么消耗如此之高,盡管是一個峰值而已。

SQL> select * from

(select

spid,pga_max_mem/1024/1024,pga_alloc_mem/1024/1024,pga_used_mem/1024/1024,program

from v$process order by pga_used_mem desc) where rownum<10;

輸出的數據如下:

SPID?? PGA_MAX_MEM PGA_ALLOC_MEM PGA_USED_MEM PROGRAM

--------- --------------------- ----------------------- -----------

941??? 7989.??? 7989.4??5061.54467 oracle@teststd.test.com (IMCO)

925??? 132??? 39.851?? 37.1080208 oracle@teststd.test.com (ARC0)

931??? 116??? 38.788?? 37.0642586 oracle@teststd.test.com (ARC3)

937??? 36.96??? 33.093??? 31.872448 oracle@teststd.test.com (W000)

9201?? 37.28??? 31.968?? 31.7101784 oracle@teststd.test.com (W00C)

1491?? 32.53??? 32.468?? 31.6490288 oracle@teststd.test.com (W001)

1327?? 33.90??? 31.968?? 31.6361275 oracle@teststd.test.com (W002)

8181?? 32.53??? 31.843?? 31.5896568 oracle@teststd.test.com (W009)

3510?? 32.78??? 32.093?? 31.5785789 oracle@teststd.test.com (W005)

這一下子讓我有些懵,因為最大的進程竟然是IMCO,這是in memory選件的后臺進程。

[oracle@teststd ~]$ ps -ef|grep 941

oracle???? 941???? 1? 0? 2016 ???????? 07:45:21 ora_imco_testdb這樣一來問題就有些詭異了。

SQL> show sga

Total System Global Area 2.0267E+10 bytes

Fixed Size????????????????? 3721272 bytes

Variable Size??????????? 1.1409E+10 bytes

Database Buffers???????? 6643777536 bytes

Redo Buffers?????????????? 63385600 bytes

In-Memory Area?????????? 2147483648 bytes通過SGA的輸出可以看出,In-Memory占用了大概2G的內存空間。

而且這個參數比較讓人糾結的就是無法動態修改,在實例初始化階段才可以修改。

SQL> alter system set inmemory_size=1G;

alter system set inmemory_size=1G

*

ERROR at line 1:

ORA-02097: parameter cannot be modified because specified value is invalid

ORA-02095: specified initialization parameter cannot be modified這樣一個問題,難道是因為imco的特殊性導致了PGA的占用量大步提升,也被歸納算入了。實際上in memory自啟用后就沒有正式啟用,沒有任何表的數據放在IMO里,所以也排除了IMO的一些異常情況。還有一個驗證的方式就是通過Data Guard來對比補充,結果查看備庫的imco進程情況,壓根誒呦發現什么問題。還有一個思路那就是對比其他的12c環境,是否也存在類似的問題,還有一套近期搭建的12cR2的環境,也啟用了IMO,但是IMCO進程的PGA占用量很低。這也符合了一個常規的想法,那么這個問題是怎么造成的呢,我的一個直觀感受就是一個bug.

這個想法在MOS上得到了一個基本的印證,可以參考

IMCO Background Process Keeps Growing in Memory Usage over Time (Doc ID 2106806.1)這里有一個問題需要確認,那就是IMCO的進程占用情況是逐步的增長還是一開始就很高。

這一點上完全可以通過Zabbix的監控圖得到。

查看近一年的PGA變化曲線圖,可發現是在逐步增長。

viewspace-2134887

所以和MOS里面的那個bug吻合度很高。

按照官方的解釋,有3個途徑可以改進這個問題。

1.? Upgrade to 12.2, when available.

2.? Apply the 12.1.0.2.10DBBP patch (or if you apply PSUs instead of DBBPs, apply the 12.1.0.2.160119DBPSU).

3. Apply interim Patch 19159120 for your RDBMS version and OS.目前來看,步驟2已經滿足,只有重啟一下,或者升級到12c了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533850.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533850.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533850.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python控制臺清屏_Python Shell 怎樣清屏?

啟動Python有兩種方式&#xff0c;分別為“Windows命令行窗口”和“IDLE” “命令行窗口”下可以通過如下兩種方法&#xff1a; 1. import subprocess subprocess.call("clear") # linux/mac subprocess.call("cls", shellTrue) # windows 執行完次命令后&…

python卸載opencv包_Ubuntu16.04卸載opencv2.4.9并安裝opencv3.2.0+contrib

本文為作者原創&#xff0c;轉載請注明出處(http://www.cnblogs.com/mar-q/)by 負赑屃需要用到opencv中的surf和sift算法&#xff0c;機器上只有opencv3.2&#xff0c;沒有擴展包&#xff0c;于是就去GitHub和官網看了下&#xff0c;沒想到8月剛出了3.3&#xff0c;一個激動就想…

php函數內的循環,PHP 循環列出目錄內容的函數代碼

PHP 循環列出目錄內容的函數代碼復制代碼 代碼如下:function list_files($dir){if(is_dir($dir)){if($handle opendir($dir)){while(($file readdir($handle)) ! false){if($file ! "." && $file ! ".." && $file ! "Thumbs.db&quo…

python火柴人打架代碼_python火柴人

廣告關閉 騰訊云11.11云上盛惠 &#xff0c;精選熱門產品助力上云&#xff0c;云服務器首年88元起&#xff0c;買的越多返的越多&#xff0c;最高返5000元&#xff01; 代碼實現了一個火柴人&#xff0c;他開心時可以跳躍、可以舞蹈&#xff0c;不開心時可以躺地上... ?代碼有…

spring boot admin 2.2 獲取日志失敗_SB實戰20-Spring Boot的日志和報告

上篇我們學習了《SB實戰19-Spring Boot的外部配置》&#xff0c;本篇我們學習Spring Boot的日志和報告。4 日志和報告4.1 日志日志是對應用運行時進行調試和分析的重要工具。Spring Boot使用SLF4J作為日志的API&#xff0c;Logback、Log4j2、Java Util Logging都可以作為日志提…

oracle樹狀排序,Oracle樹狀結構查詢

oracle用表的形式組織數據&#xff0c;某些數據還呈現樹狀結構&#xff0c;提供了對這些數據的組織、查詢等功能。在掃描樹結構表時&#xff0c;要依次訪問樹中的每一個節點&#xff0c;并且每個節點只能訪問一次&#xff0c;其步驟如下&#xff1a;1&#xff1a;從根節點開始2…

python numpy讀取數據_大神教你python 讀取文件并把矩陣轉成numpy的兩種方法

導讀 今天小編就為大家分享一篇python 讀取文件并把矩陣轉成numpy的兩種方法&#xff0c;具有很好的參考價值&#xff0c;希望對大家有所幫助。一起跟隨小編過來看看吧 在當前目錄下&#xff1a; 方法1&#xff1a; file open(‘filename) a file.read() b a.split(‘\n)#使用…

datagrid wpf 獲取選中_c# WPF DataGrid 獲取選中單元格信息

private void Button_Click(objectsender, RoutedEventArgs e){DataGridCell cell dg.GetCell(1, 2);TextBlock tb cell.Content asTextBlock;Console.WriteLine(tb.Text);}public static classDataGridExtension{/// ///獲取DataGrid控件單元格/// /// DataGrid控件/// 單元格…

redis哨兵高可用-源碼篇

前段時間寫過兩篇redis哨兵的文章,一篇是redis哨兵模式的搭建。另外一篇是redis哨兵主從切換的原理,。 當時寫的原理篇,是手動模擬主節點故障,然后查看主從切換的日志推算哨兵主從切換的流程。但是感覺這樣搞出來的流程太粗&#xff0c;忽略了很多細節&#xff0c;真正要搞明白…

python獲取網頁數據對電腦性能_【Python】網頁數據爬取實戰

由于網頁結構跟之前有變化&#xff0c;還不是很熟悉。代碼待完善&#xff0c;問題記錄&#xff1a;騰訊新聞二級網頁內容爬取有問題。鏈家網站頭文件沒有用到。爬取一條騰訊視頻的header內容&#xff0c;存入txt。要求&#xff1a;包含網頁鏈接包含title包含所有headers信息imp…

python集合去重_python集合去重

[python中對list去重的多種方法 怎么快速的對列表進行去重呢&#xff0c;去重之后原來的順序會不會改變呢&#xff1f; 1.以下的幾種情況結果是一樣的&#xff0c;去重之后順序會改變: i [1,2,3,3,4,2,3,4,5,6,1] news_i [] for id in i: if id not in news_i: news_i.append(…

linux進程pid分配規則,Linux進程pid分配法【轉】

一. 概述Android系統創建進程&#xff0c;最終的實現還是調用linux fork方法&#xff0c;對于linux系統每個進程都有唯一的 進程ID(值大于0)&#xff0c;也有pid上限&#xff0c;默認為32768。 pid可重復利用&#xff0c;當進程被殺后會回收該pid&#xff0c;以供后續的進程pid…

sqlserver date類型和字符串比較_基于SQL Server數據庫搭建主從復制實現讀寫分離實戰演練...

一、課程介紹讀寫分離(主從同步)從字面意思就可以理解&#xff0c;就是把對數據庫的讀操作和寫操作分離開。讀寫分離在網站發展初期可以一定程度上緩解讀寫并發時產生鎖的問題&#xff0c;將讀寫壓力分擔到多臺服務器上。讀寫分離的基本原理是讓主數據庫處理事務性增、改、刪操…

linux非標準頭文件,Linux學習:unix的標準化的實現(Linux中各種限制-數據類型-各種標準化頭文件介紹)...

作為Linux的前身&#xff0c;unix標準化是十分重要的。我在這里挑幾個重要的點說明。1&#xff1a;Linux中各種限制。Linux中限制有編譯時限制和運行時限制&#xff0c;另外有一些限制是由于我們的實現不同而不同&#xff0c;因此我們需要調用對應的函數獲取對應的值不同。(eg&…

python怎么導入大小字母_python遍歷小寫英文字母的方法

python遍歷小寫英文字母的方法在c、c等語言中&#xff0c;可以用字符1的for循環來遍歷小寫的26個英文字母&#xff0c;但是由于python語言的特殊性&#xff0c;通過a 1這種代碼并不能成功遍歷&#xff0c;以下是在python中遍歷英文字母的簡潔代碼&#xff1a;import stringfor…

51單片機怎么顯示當前時間_(進階篇)51單片機之按鍵控制蜂鳴器、數碼管、按鍵值移位顯示...

一、實操演示- 按鍵控制蜂鳴器1、圖文詳細獨立按鍵硬件電路蜂鳴器硬件電路2、連接方式&#xff1a;J20的第3號引腳連接到J7引腳&#xff0c;即P15連接J7。J29的第7、8號引腳連接到JP1的第1、2號引腳&#xff0c;即P31連接k1&#xff0c;P30連接k2。下載程序后&#xff0c;觀察現…

linux怎么運行g77,Linux安裝g77編譯器的技巧

在Ubuntu10.10系統中&#xff0c;g77已經被gfortran完全替代了&#xff0c;但并不能完全兼容過去的g77&#xff0c;這樣就不能使用一些用977編譯的程序了。所以我們只能自己再安裝g77了。今天華軍小編給大家展示的是Linux安裝g77編譯器的技巧&#xff0c;精心挑選的內容希望大家…

oracle 結果集已耗盡_java.sql.SQLException: 結果集已耗盡

編寫了jsp誰能幫忙看下有什么問題編寫了jsp 誰能幫忙看下 有什么問題技術交流ResultSet rsnull;String str"select publish_id,publish_name,publish_time,publish_text from comment_tb order by publish_time desc ";query.connect();rsquery.select(str);while(rs…

vs使用未初始化的內存怎么解決_遇到C語言內存錯誤怎么辦?一定要找準這六個原因...

一、沒有為指針分配內存定義了指針變量&#xff0c;但是沒有為指針分配內存&#xff0c;即指針沒有指向一塊合法的內存。淺顯的例子就不舉了&#xff0c;這里舉幾個比較隱蔽的例子。1、結構體成員指針未初始化struct student { char *name; int score; }stu,*pstu; int main() …

linux服務器如何設置雙網卡,linux服務器設置(雙網卡共享上網)

一、網絡拓補結構&#xff1a;服務器&#xff1a;兩網卡的設置&#xff1a;eth0:202.96.168.100 掩碼&#xff1a;255.255.255.0 網關&#xff1a;202.96.168.68 #與 Inte.Net 相聯eth1:192.168.1.1掩碼&#xff1a;255.255.255.0#與局域網相聯客戶機子網段&#xff1a;192.1…