SHAREDPOOL使用率的監控部署及思考

2022-05-26 21:15:12 字數 3892 閱讀 1226

【系統環境】:

系統環境:sun solaris10 u11  +  oracle  11.2.0.4.0  rac

【背景描述】:

從2023年11月起,生產的資料庫期的出現了兩次m0001程序120秒無法啟動:

主要報錯:waiting for 0x3800fe418 child shared pool level=7 child#=2,引起資料庫異常的故障。專家分析得出的結論:統計收集作業觸發shared pool空間需求,並出現收縮與擴容操作,先收縮說明shared pool空間容量不足或碎片嚴重導致無法找到可以使用的記憶體。當shared pool空間不足和存在碎片時會觸發空間收縮與擴容。

【監控前情況】

統計收集作業觸發shared pool空間需求,並出現收縮與擴容操作,先收縮說明shared pool空間容量不足或碎片嚴重導致無法找到可以使用的記憶體。當shared pool空間不足和存在碎片時會觸發空間收縮與擴容。則需要對sharedpool使用情況進行監控。

對於表設計想法:

1,由於該資料庫的sharedpool使用情況檢視方法很多種,怎樣更直觀體現sharedpool的使用情況,確認用百分比及總空間和剩餘空間進行監控sharedpool;

2,存放資料應該存放監控資料的表空間audit_data不影響應用使用的表空間,考慮到該資料庫儲存不足不能擴容,更容易分析時間段的資料,基於該條件情況下對錶進行生命週期管理,則應該建立月分割槽表check_sharedpool。

建立監控check_sharedpool分割槽表:

create table xj_exp_data. check_sharedpool

(inst_id  number,

"free_shared_pool(mb)"  number,

"total_shared_pool(mb)"  number,

freepct  varchar2(10),

sample_time  date  dedault sysdate)

partition by range (sample_time)(

partition p201701  values less than (timestamp '2017-01 00:00:00') ,

partition p201702  values less than (timestamp '2017-02 00:00:00') ,

..........----省略其他分割槽語句

partition pmax  values less than (maxvalue) )

tablespace audit_data;

對於部署想法:

1,考慮到sharedpool的使用情況,資料庫的每個節點都不一樣,則需要每個節點都需要部署任務進行監控sharedpool;

2,考慮到對資料庫sharedpool監控資料需要測試監控的可行性,則在對應生產的測試庫進行測試監控三天檢視監控情況;

3,考慮到資料的監控需求性,記錄監控資料是否準確,定製採集資料頻率為一小時;

在測試庫測試該監控情況正常後,則謄寫方案,內部審核後,提單對生產庫進行部署sharedpool監控指令碼及定時任務。

【監控優化】

對其生產監控sharedpool最後生成資料效果如下:

中間監控優化步驟如下:

1,sql的優化:考慮到需要同時對比兩個節點的sharedpool使用情況。則需要sql查詢組合多個節點資料;

2,採集資料優化:對於生產庫比較多,需求每天提供監控sharedpool使用情況資料,有時突然需求sharedpool的使用情況,則考慮用監控主機使用pyahon進行採集資料;

3,圖形優化:考慮更加直觀檢視sharedpool的使用情況趨勢,想到南基採資料庫週報資料也是用python,則用python直接生成圖形監控資料;

vi sharedpool.py

# -*- coding:utf-8 -*-

import xlsxwriter, cx_oracle, sys

reload(sys)

sys.setdefaultencoding('utf-8')

database_list =

for d in database_list:

print(d)

conn = cx_oracle.connect(database_list[d])

# connect_database

c = conn.cursor()  #get cursor

x = c.execute('''

select s.snap_time,s.inst_id1,s.inst_id2,d.name,s.total_mb_inst1,s.free_mb_inst1,

s.total_mb_inst2,s.free_mb_inst2

from (select a.snap_time,a.pct inst_id1,b.ptc  inst_id2,a.total_mb  total_mb_inst1,a.free_mb free_mb_inst1,b.total_mb  total_mb_inst2,b.free_mb   free_mb_inst2 from

(select to_char(trunc(sample_time +10/60/24, 'hh24'),'yyyymmdd_hh24') snap_time,inst_id,"free_shared_pool(mb)" free_mb,"total_shared_pool(mb)" total_mb,to_number(replace(freepct, '%', '')) pct

from xj_exp_data.check_sharedpool partition (p201703) where inst_id = 1) a

left join ..............-------新增多個節點內容

left join (select to_char(trunc(sample_time +10/60/24, 'hh24'),'yyyymmdd_hh24') snap_time,inst_id, "free_shared_pool(mb)" free_mb,"total_shared_pool(mb)" total_mb,to_number(replace(freepct, '%', '')) pct

from xj_exp_data.check_sharedpool partition (p201703) where inst_id = 2) b

on a.snap_time = b.snap_time(+)order by to_date(a.snap_time, 'yyyymmdd hh24')) s,

(select name from v$database) d ------用以識別多個資料庫

''')

dbname = x.fetchone()[3]

row = x.fetchall()

..........--------省略部分內容

# add a chart title and some axis labels.

chart1.set_title()

# set an excel chart style. colors with white outline and shadow.

chart1.set_style(10)

# insert the chart into the worksheet (with an offset).

worksheet.insert_chart('g2', chart1, )

c.close()

conn.close()

workbook.close()

【總結】:

1,監控資料庫的專案時,同時考慮是否多個節點資料一樣。

2,對於多個資料庫監控,python有非常大的幫助。

在linux中對vbox的cpu使用率監控

目前,每天中午cpu的負載都會突然增加,通過htop命令檢視到此時的vbox的cpu佔用率一致蠻高的,便計畫對vbox的cpu使用率進行計畫性監控,最開始的想法很簡單就是通過呼叫top命令來進行cpu使用率的監控,但監控了好幾天,發現值一直為0,而htop中值是一直有變化的,正常的結果也不應該為0,...

索引使用率

索引使用率 select distinct db name database id as n 資料庫名稱 object name a.object id as n 表名 b.name n 索引名稱 user seeks n 使用者索引查詢次數 user scans n 使用者索引掃瞄次數 last ...

使用率 如何提公升B端產品的使用率

每個產品經理的需求池中,至少有90 的需求是市面上已經有現成的方案了,所以站在功能實現的角度,產品經理是不需要重複造輪子的。以至於對於所有產品經理來說,出需求都在焦慮一件事情,實現的產品到底有沒有人用?首先 有沒有人用 要如何量化呢?對於c端產品而言最基本的指標就是dau和mau,而b端產品更多指的...