一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - DB2 - 分析DB2活動日志滿的原因及解決DB2日志滿方法與避免方案

分析DB2活動日志滿的原因及解決DB2日志滿方法與避免方案

2020-06-05 20:02wdc DB2

本文簡單地介紹了DB2中日志的使用、活動日志以及首個活動日志的概念、日志滿的原因、日志滿的診斷、臨時處理以及避免辦法

日志使用

下圖顯示了并發(fā)事務條件下,日志使用的示意

分析DB2活動日志滿的原因及解決DB2日志滿方法與避免方案

有3個并發(fā)的程序Process 1、Process 2、Process 3。每一個程序都有兩個事務。藍塊代表SQL語句,紅塊代表commit操作,綠塊代表rollback操作。每一個向下的箭頭都代表日志緩沖區(qū)的數據被刷新到日志磁盤上(默認是每一次提交操作都會導致日志緩沖被刷新到磁盤上)。

在T1時刻,事務A commit,日志緩沖區(qū)被刷新到磁盤上。
在T2時刻,事務B commit,日志緩沖區(qū)被刷新到磁盤上,此時日志X使用完,但由于X中的事務C還沒有提交,所以X此時還是活動日志。

在上圖中,如果事務C一直沒有提交操作,那么日志X將永遠是首個活動日志(oldest transaction log),后續(xù)的日志也是活動日志,其他應用最終會導致日志滿。

活動日志

如果一個日志中包含有未提交的事務,那么這個日志就是活動日志(也有其他情況,比如雖然所有事務已經提交,但對應的更改還沒有持久化到磁盤上)。

首個活動日志(First Active Log)

第一個活動日志,首個活動日志之后的日志(也就是編號比首個活動日志大的日志)都是活動日志,可以通過數據庫的snapshot查看first active log, current active log, 以及 last active log.

?
1
2
3
4
5
$ db2 get snapshot for db on sample | grep -i "File number"
File number of first active log      = 0
File number of last active log       = 2
File number of current active log     = 0
File number of log being archived     = Not applicable

日志滿原因

DB2總的可用活動日志的最大空間是有限制的,當達到限制之后,就會發(fā)生日志滿的問題,限制為(LOGPRIMARY + LOGSECOND) * LOGFILSIZ * 4KB

日志滿的原因無非兩種:

1.) 一個小事務hold住了首個活動日志,一直沒有提交,導致首個活動日志一直是活動狀態(tài),不被釋放。這個跟堵車類似,一輛車因發(fā)動機故障(事務沒有提交)堵住路口(占用首個活動日志),即使后面的車都沒有問題(后續(xù)事務正常提交),也無法通過路口,且會越積越多,最終導致整個路都堵滿車(日志滿)。

2.) 有個事務非常大,迅速用盡了所有的日志。

日志滿的表現:

首先應用會報出SQL0964C錯誤:

?
1
2
3
4
$ db2 "insert into test select * from test"
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0964C The transaction log for the database is full. SQLSTATE=57011

其次,db2diag.log中會有以下報錯

?
1
2
3
4
5
6
7
8
9
10
2017-03-09-17.24.50.315000+480 E3234873F644     LEVEL: Error
PID   : 8532         TID : 13028     PROC : db2syscs.exe
INSTANCE: DB2INST1       NODE : 000      DB  : SAMPLE
APPHDL : 0-453        APPID: *LOCAL.DB2INST1.170309092321
AUTHID : MIAOQINGSONG     HOSTNAME: ADMINIB-PR7US3I
EDUID  : 13028        EDUNAME: db2agent (SAMPLE)
FUNCTION: DB2 UDB, data protection services, sqlpgResSpace, probe:2860
MESSAGE : ADM1823E The active log is full and is held by application handle
     "0-441". Terminate this application by COMMIT, ROLLBACK or FORCE
     APPLICATION.

日志滿的臨時處理:

1. 可以通過增加LOGSECOND來臨時增加可用的日志大小(修改時需要加上immediate選項使之立即生效);增加LOGPRIMARY并沒有用,因為需要重啟數據庫才能生效。

2. force掉hold住首個活動日志的的應用,在force之前,可以抓取snapshot,看一下這個應用的狀態(tài):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
$ db2 get snapshot for database on sample | grep -i oldest
Appl id holding the oldest transaction   = 441
 
$ db2 get snapshot for application agentid 441
 
      Application Snapshot
 
Application handle             = 441
Application status             = UOW Waiting         <<--應用狀態(tài)為UOW Waiting
Status change time             = 2017-03-09 17:23:15.068895
Application code page           = 1386
Application country/region code      = 86
DUOW correlation token           = *LOCAL.DB2INST1.170309092244
Application name              = db2bp.exe
Application ID               = *LOCAL.DB2INST1.170309092244
 
..
 
Connection request start timestamp     = 2017-03-09 17:22:44.963163 <<--應用連庫時間
Connect request completion timestamp    = 2017-03-09 17:22:45.961157
Application idle time           = 4 minutes 7 seconds
 
..
 
UOW log space used (Bytes)         = 664
Previous UOW completion timestamp     = 2017-03-09 17:22:45.961157
Elapsed time of last completed uow (sec.ms)= 0.000000
UOW start timestamp            = 2017-03-09 17:23:02.770477 <<--當前事務開始時間
UOW stop timestamp             =              <<--當前事務結束時間為空,說明還沒有commit
UOW completion status           =
 
..
 
Statement type               = Dynamic SQL Statement
Statement                 = Close
Section number               = 201
Application creator            = NULLID
Package name                = SQLC2K26
Consistency Token             =
Package Version ID             =
Cursor name                = SQLCUR201
Statement member number          = 0
Statement start timestamp         = 2017-03-09 17:23:15.067789
Statement stop timestamp          = 2017-03-09 17:23:15.068893
Elapsed time of last completed stmt(sec.ms)= 0.000024
Total Statement user CPU time       = 0.000000
Total Statement system CPU time      = 0.000000
..
Dynamic SQL statement text:  
select * from t1

<<--一個事務中可能有多條SQL,這個只表示當前正在執(zhí)行或者最后執(zhí)行過的SQL,并不能表示就是這條SQL導致了日志滿,這里抓取到的是一條SELECT語句,SELECT語句不占用日志。

?
1
2
3
$ db2 "force application (441)"
DB20000I The FORCE APPLICATION command completed successfully.
DB21024I This command is asynchronous and may not be effective immediately.

日志滿的避免:

1.)根據抓取到的應用的snapshot,找應用開發(fā)人員查看為何不肯提交,這才是避免問題再次出現的根本辦法。
2.)從DB2管理層面,可以設置數據庫配置參數max_log和num_log_span
3.)可以寫腳本,以固定的間隔抓取database snapshot中的Appl id holding the oldest transaction, 如果長時間不發(fā)生變化(比如2天),就Force掉。

補充說明:

查看每個應用使用的日志大小:

?
1
$ db2 "select application_handle,UOW_LOG_SPACE_USED,UOW_START_TIME FROM TABLE(MON_GET_UNIT_OF_WORK(NULL,-1)) order by UOW_LOG_SPACE_USED"

也可以通過db2pd -db <dbname> -transactions 查看每個正在使用的日志的情況

重點關注的參數有:

ApplHandl
The application handle of the transaction.
SpaceReserved
The amount of log space that is reserved for the transaction.
LogSpace
The total log space that is required for the transaction, including the used space and the reserved space for compensation log records.

通過對DB2活動日志滿原因的分析我們就可以找到解決此問題的方法同時避免此問題的再次出現

延伸 · 閱讀

精彩推薦
  • DB2DB2 SELECT語句高級用法

    DB2 SELECT語句高級用法

    DB2 SELECT語句高級用法,學習db2數據庫的朋友可以參考下。 ...

    DB2數據庫教程網6242020-06-08
  • DB2python之sqlalchemy創(chuàng)建表的實例詳解

    python之sqlalchemy創(chuàng)建表的實例詳解

    這篇文章主要介紹了數據庫之sqlalchemy創(chuàng)建表的實例詳解的相關資料,希望通過本文能幫助到大家,讓大家掌握理解這部分內容,需要的朋友可以參考下...

    wait_for_eva8502020-06-11
  • DB2如何訪問大型機、小型機上的DB2 9數據服務器

    如何訪問大型機、小型機上的DB2 9數據服務器

    數據庫連接工具軟件 DB2 connect的基本特性是為桌面應用程序和服務主機的數據庫服務器之間提供一種連接交互訪問的方法。這些桌面應用程序所在的環(huán)境可...

    腳本之家3242020-06-10
  • DB2db2數據庫常用操作命令大全

    db2數據庫常用操作命令大全

    這篇文章主要介紹了db2數據庫常用操作命令大全,匯總了DB2的常用操作命令,分享給大家供大家參考,需要的朋友可以參考下...

    db2教程網6962021-10-21
  • DB2DB2專家王云談商業(yè)智能BI

    DB2專家王云談商業(yè)智能BI

    王云說: 既然講商業(yè)智能,我們大家都在講及時性,我們講要有績效,要有BPM,我自己就來看看我們能不能在這個會場上,我們來實踐一下,如果大家抬頭...

    DB2數據庫教程網4202020-06-10
  • DB2CentOS下DB2數據庫安裝過程詳解

    CentOS下DB2數據庫安裝過程詳解

    這篇文章主要介紹了CentOS下DB2數據庫安裝過程詳解,本文步驟詳細,操作的命令也比較全,需要的朋友可以參考下 ...

    DB2數據庫教程網3572020-06-06
  • DB2分析DB2活動日志滿的原因及解決DB2日志滿方法與避免方案

    分析DB2活動日志滿的原因及解決DB2日志滿方法與避免方案

    本文簡單地介紹了DB2中日志的使用、活動日志以及首個活動日志的概念、日志滿的原因、日志滿的診斷、臨時處理以及避免辦法 ...

    wdc3462020-06-05
  • DB2DB2 UDB V8.1管理學習筆記(三)

    DB2 UDB V8.1管理學習筆記(三)

    本文主要講解DB2 UDB V8.1管理學習筆記(三),有需要的朋友可以參考下 ...

    DB2數據庫教程網3182020-06-03
主站蜘蛛池模板: 午夜影院一区二区三区 | 无限在线看免费视频大全 | 精品福利视频一区二区三区 | 国产成人综合手机在线播放 | 亚洲国产精品综合一区在线 | 北条麻妃黑人 | 日韩xx00| 五月最新商场女厕所高跟嘘嘘 | 国产一级在线观看 | 无人区1在线观看 | chinese调教踩踏视频 | 国产尤物精品视频 | 免费观看一级特黄三大片视频 | 白丝校花被扒开双腿喷水小说 | 麻豆网站视频国产在线观看 | 欧美日韩一级视频 | 超兴奋朋友的中文字幕下 | 美女在尿口隐私视频 | 精品国产乱码久久久久久免费流畅 | ai换脸明星专区在线观看 | 日本黄色大片网站 | 亚洲xxxxxhd奶水女人 | gaygayas男男免费中国 | 91亚洲成人 | 日本不卡免免费观看 | 成年人在线观看免费视频 | 久久精品国产亚洲AV麻豆欧美玲 | 韩国三级做爰 | 性色AV乱码一区二区三区视频 | 亚洲高清一区二区三区久久 | 成年私人影院免费视频网站 | 成全动漫视频在线观看 | 日韩精品一区二三区中文 | 果冻传媒mv在线观看入口免费 | 国产成人免费观看在线视频 | 欧美人交性视频在线香蕉 | 女人张开腿 让男人桶个爽 免费观看 | 精品无人区一区二区三区 | 99精品国产在现线免费 | 四虎网站在线 | 欧美影院天天5g天天爽 |