使用TraceMon分析TimesTen查詢最大連續記憶體塊瞬間Hang問題
在TimesTen的維護中,監控TimesTen剩餘的最大連續記憶體塊是非常有必要的,但是Oracle在TimesTen中只提供了有一個儲存過程來
檢視TimesTen記憶體資料庫的剩餘最大連續空閒記憶體段,而且該儲存過程還會引起記憶體資料庫瞬間Hang住,我們都知道TimesTen一般承載的業務
都是實時性要求非常高的,這種瞬間Hang住有可能會造成業務影響,所以我們在維護過程中要儘可能的避免頻繁的檢視TimesTen的剩餘最大連續空閒內
存段,而且採用監控記憶體使用情況,在記憶體變化較大時再去檢視剩餘最大連續空閒記憶體段。
在廣東移動的運維期間就出現過由於定期的監控剩餘最大連續空閒記憶體段,造成對業務的影響。
下面透過TimesTen提供的TraceMon工具分析檢視剩餘最大連續空閒記憶體段引起瞬間Hang的原因:
1、檢視剩餘最大連續空閒記憶體段的方式
call ttblockinfo;
2、使用TraceMon工具Debug跟蹤call ttblockinfo的執行過程
---開啟latch的level 4
$ tttracemon tytt
Trace monitor; empty line to exit
Trace> flush
Trace> dump
0 records dumped
Trace> level sql 4
Trace> level latch 6
Trace> level xact 4
Trace> outfile 1.log
---在新視窗中執行查詢剩餘最大連續空閒記憶體段
Command> call ttblockinfo;
< 111, 1, 130092264, 130092264 >
1 row found.
---進入TraceMon,關閉Trace
Trace> flush
Trace> outfile 0;
Trace> level sql 0
Trace> level latch 0
Trace> level xact 0
Trace> show
AGING ... 0
API ... 0
ASYNCMV ... 0
AUTOREFRESH ... 0
CG ... 0
CGRID ... 0
CGRIDC ... 0
CKPT ... 0
DBG0 ... 0
DBG1 ... 0
DEADLOCK ... 1
EE ... 0
ERR ... 1
FLOW ... 0
HEAP ... 0
IX ... 0
IXGC ... 0
LATCH ... 0
LOB ... 0
LOCK ... 0
LOG ... 0
LOGF ... 0
MEM ... 0
OPT ... 0
ORACON ... 0
PLOAD ... 0
PREP ... 0
PT ... 0
REPL ... 0
SM ... 0
SQL ... 0
TEST ... 0
TRACE ... 0
XA ... 0
XACT ... 0
INTERRUPT ... 0
Trace>
3、下面來看一下Debug的輸出
13:36:43.804 1379 LATCH 4L 2C 3544P sbHeapLatchGet 0x2aaab7f12378 ok
13:36:43.804 1380 LATCH 4L 2C 3544P sbLockBucketLatchGet 0x085f43d8 ok
13:36:43.804 1381 LATCH 4L 2C 3544P sbHeapLatchGet 0x2aaab7f12378 ok
13:36:43.804 1382 XACT 3L 2C 3544P sbXactCommit(E): xactId: 2.3 cacheUpdate: 0 xact.c:6137
13:36:43.804 1383 XACT 3L 2C 3544P sbXactBegin(E): xactId: 2.4
13:36:43.804 1384 LATCH 4L 2C 3544P sbLockBucketLatchGet 0x08603648 ok
13:36:43.804 1385 LATCH 4L 2C 3544P sbInternalLockLatchGet 0x2aaab8527ef8 ok
13:36:43.804 1386 SQL 4L 2C 3544P execEnvGet: Got preallocated env 140887960
13:36:43.804 1387 SQL 3L 2C 3544P Opening: call ttblockinfo
13:36:43.804 1388 LATCH 4L 2C 3544P sbDbLatchGet 0x2aaaaacd0f78 ok <====DB latch get
13:36:43.821 1389 LATCH 4L 2C 3544P sbPermAllocLatchGet 0x2aaaaacd12b8 ok
13:36:43.821 1390 SQL 4L 2C 3544P Fetching: call ttblockinfo
13:36:43.832 1391 SQL 4L 2C 3544P Fetching: call ttblockinfo
13:36:43.832 1392 SQL 4L 2C 3544P Closing: call ttblockinfo
13:36:43.832 1393 LATCH 5L 2C 3544P sbDbLatchRel 0x2aaaaacd0f78 ok <====DB latch get
13:36:43.832 1394 SQL 4L 2C 3544P sbEeEnvRet: Returned env 140887960
13:36:43.832 1395 LATCH 4L 2C 3544P sbLockBucketLatchGet 0x08603648 ok
13:36:43.832 1396 XACT 3L 2C 3544P sbXactCommit(E): xactId: 2.4 cacheUpdate: 0 xact.c:6137
13:36:43.832 1397 XACT 3L 2C 3544P sbXactBegin(E): xactId: 2.5
13:36:43.832 1398 XACT 3L 2C 3544P sbXactCommit(E): xactId: 2.5 cacheUpdate: 0 xact.c:6137
13:36:43.901 1399 LATCH 4L 135C 3401P sbLogStrandInserterLatchGet 0x2aaab823c7b0 ok
13:36:43.901 1400 LATCH 4L 135C 3401P sbLogBufFlushinfoLatchGet 0x2aaaaacd3338 ok
13:36:44.003 1401 LATCH 4L 135C 3401P sbLogStrandInserterLatchGet 0x2aaab823c7b0 ok
13:36:44.003 1402 LATCH 4L 135C 3401P sbLogBufFlushinfoLatchGet 0x2aaaaacd3338 ok
13:36:44.110 1403 LATCH 4L 135C 3401P sbLogStrandInserterLatchGet 0x2aaab823c7b0 ok
可以看到執行call ttblockinfo時,需要持有DbLatch,這樣所有需要申請記憶體訪問的請求都將會等待。
注:TraceMon非常耗資源,特別是CPU,所以在生產系統中要謹慎,儘量避免整庫Debug,可以採用單個連線進行Debug的方式。
=======================End========================================
在廣東移動的運維期間就出現過由於定期的監控剩餘最大連續空閒記憶體段,造成對業務的影響。
下面透過TimesTen提供的TraceMon工具分析檢視剩餘最大連續空閒記憶體段引起瞬間Hang的原因:
1、檢視剩餘最大連續空閒記憶體段的方式
call ttblockinfo;
2、使用TraceMon工具Debug跟蹤call ttblockinfo的執行過程
---開啟latch的level 4
$ tttracemon tytt
Trace monitor; empty line to exit
Trace> flush
Trace> dump
0 records dumped
Trace> level sql 4
Trace> level latch 6
Trace> level xact 4
Trace> outfile 1.log
---在新視窗中執行查詢剩餘最大連續空閒記憶體段
Command> call ttblockinfo;
< 111, 1, 130092264, 130092264 >
1 row found.
---進入TraceMon,關閉Trace
Trace> flush
Trace> outfile 0;
Trace> level sql 0
Trace> level latch 0
Trace> level xact 0
Trace> show
AGING ... 0
API ... 0
ASYNCMV ... 0
AUTOREFRESH ... 0
CG ... 0
CGRID ... 0
CGRIDC ... 0
CKPT ... 0
DBG0 ... 0
DBG1 ... 0
DEADLOCK ... 1
EE ... 0
ERR ... 1
FLOW ... 0
HEAP ... 0
IX ... 0
IXGC ... 0
LATCH ... 0
LOB ... 0
LOCK ... 0
LOG ... 0
LOGF ... 0
MEM ... 0
OPT ... 0
ORACON ... 0
PLOAD ... 0
PREP ... 0
PT ... 0
REPL ... 0
SM ... 0
SQL ... 0
TEST ... 0
TRACE ... 0
XA ... 0
XACT ... 0
INTERRUPT ... 0
Trace>
3、下面來看一下Debug的輸出
13:36:43.804 1379 LATCH 4L 2C 3544P sbHeapLatchGet 0x2aaab7f12378 ok
13:36:43.804 1380 LATCH 4L 2C 3544P sbLockBucketLatchGet 0x085f43d8 ok
13:36:43.804 1381 LATCH 4L 2C 3544P sbHeapLatchGet 0x2aaab7f12378 ok
13:36:43.804 1382 XACT 3L 2C 3544P sbXactCommit(E): xactId: 2.3 cacheUpdate: 0 xact.c:6137
13:36:43.804 1383 XACT 3L 2C 3544P sbXactBegin(E): xactId: 2.4
13:36:43.804 1384 LATCH 4L 2C 3544P sbLockBucketLatchGet 0x08603648 ok
13:36:43.804 1385 LATCH 4L 2C 3544P sbInternalLockLatchGet 0x2aaab8527ef8 ok
13:36:43.804 1386 SQL 4L 2C 3544P execEnvGet: Got preallocated env 140887960
13:36:43.804 1387 SQL 3L 2C 3544P Opening: call ttblockinfo
13:36:43.804 1388 LATCH 4L 2C 3544P sbDbLatchGet 0x2aaaaacd0f78 ok <====DB latch get
13:36:43.821 1389 LATCH 4L 2C 3544P sbPermAllocLatchGet 0x2aaaaacd12b8 ok
13:36:43.821 1390 SQL 4L 2C 3544P Fetching: call ttblockinfo
13:36:43.832 1391 SQL 4L 2C 3544P Fetching: call ttblockinfo
13:36:43.832 1392 SQL 4L 2C 3544P Closing: call ttblockinfo
13:36:43.832 1393 LATCH 5L 2C 3544P sbDbLatchRel 0x2aaaaacd0f78 ok <====DB latch get
13:36:43.832 1394 SQL 4L 2C 3544P sbEeEnvRet: Returned env 140887960
13:36:43.832 1395 LATCH 4L 2C 3544P sbLockBucketLatchGet 0x08603648 ok
13:36:43.832 1396 XACT 3L 2C 3544P sbXactCommit(E): xactId: 2.4 cacheUpdate: 0 xact.c:6137
13:36:43.832 1397 XACT 3L 2C 3544P sbXactBegin(E): xactId: 2.5
13:36:43.832 1398 XACT 3L 2C 3544P sbXactCommit(E): xactId: 2.5 cacheUpdate: 0 xact.c:6137
13:36:43.901 1399 LATCH 4L 135C 3401P sbLogStrandInserterLatchGet 0x2aaab823c7b0 ok
13:36:43.901 1400 LATCH 4L 135C 3401P sbLogBufFlushinfoLatchGet 0x2aaaaacd3338 ok
13:36:44.003 1401 LATCH 4L 135C 3401P sbLogStrandInserterLatchGet 0x2aaab823c7b0 ok
13:36:44.003 1402 LATCH 4L 135C 3401P sbLogBufFlushinfoLatchGet 0x2aaaaacd3338 ok
13:36:44.110 1403 LATCH 4L 135C 3401P sbLogStrandInserterLatchGet 0x2aaab823c7b0 ok
可以看到執行call ttblockinfo時,需要持有DbLatch,這樣所有需要申請記憶體訪問的請求都將會等待。
注:TraceMon非常耗資源,特別是CPU,所以在生產系統中要謹慎,儘量避免整庫Debug,可以採用單個連線進行Debug的方式。
=======================End========================================
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24930246/viewspace-1248450/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- TimesTen臨時(記憶體)空間使用和調整臨時(記憶體)空間記憶體
- 查詢windows記憶體卡槽及卡槽支援的最大記憶體Windows記憶體
- 使用 Chrome 開發者工具分析記憶體問題Chrome記憶體
- SQLServer記憶體問題分析SQLServer記憶體
- 一次elasticsearch 查詢瞬間超時案例分析Elasticsearch
- 採用java連結timesten記憶體資料庫Java記憶體資料庫
- 使用RAMMap+PoolMon分析Windows記憶體異常使用問題Windows記憶體
- SQL連續查詢問題擴充—記上海拼多多非技術崗面試真題SQL面試
- 使用Windbg快速分析應用記憶體洩露問題記憶體洩露
- 【記憶體資料庫】TimesTen記憶體資料庫
- jdk1.4+tomcat5.5可配最大記憶體問題JDKTomcat記憶體
- 如何查詢記憶體洩漏記憶體
- Windbg分析高記憶體佔用問題記憶體
- Java記憶體問題 及 LeakCanary 原理分析Java記憶體
- jdbc如何連續查詢?JDBC
- 4.非連續式記憶體分配記憶體
- 利用Windbg分析高記憶體佔用問題記憶體
- leaks工具查詢記憶體洩露記憶體洩露
- 使用 Chrome Dev tools 分析應用的記憶體洩漏問題Chromedev記憶體
- Mongodb記憶體管理和使用情況情況查詢MongoDB記憶體
- 雙指標查詢陣列的連續規律子陣列問題指標陣列
- SQLAlchemy in 查詢空列表問題分析SQL
- 記憶體資料庫TimesTen介紹記憶體資料庫
- 學習 CLR 原始碼:連續記憶體塊資料操作的效能優化原始碼記憶體優化
- linux 非連續記憶體區管理 vmallocLinux記憶體
- Laravel MongoDB 時間區間查詢的問題LaravelMongoDB
- 伺服器效能指標(三)——記憶體使用分析及問題排查伺服器指標記憶體
- 故障分析 | 租戶 memstore 記憶體滿問題排查記憶體
- 20 張圖揭開「記憶體管理」的迷霧,瞬間豁然開朗記憶體
- 最大連續子陣列和求解問題(C語言)陣列C語言
- mysql最大表記憶體MySql記憶體
- 探究 iOS 記憶體問題iOS記憶體
- 共享記憶體分段問題記憶體
- 記憶體溢位問題記憶體溢位
- Linux 使用記憶體分析Linux記憶體
- JVM記憶體分析工具使用JVM記憶體
- Oralce記憶體資料庫TimesTen簡介記憶體資料庫
- SQL 如何查詢連續上漲 N 次的記錄SQL