|
问题描述:
用户运行PeopleSoft软件产品,其中报表服务器运行在Windows端,应用程序服务器运行在Linux,DB2数据库运行在Linux。
用户发现系统不时产生死锁。
分析:
首先自然是抓deadlock monitor,发现死锁竟然发生在SYSIBM.SYSTABLES上:
31) Deadlock Event ...
Deadlock ID: 25
Number of applications deadlocked: 2
Deadlock detection time: 03/04/2008 10:33:53.398062
Rolled back Appl participant no: 2
Rolled back Appl Id: GA64656D.B005.00F546151858
Rolled back Appl seq number: : 1ba0
32) Connection Header Event ...
Appl Handle: 1254
Appl Id: GA64656D.B005.00F546151858
Appl Seq number: 7072
DRDA AS Correlation Token: GA64656D.B005.00F546151858
Program Name : <app.exe>
Authorization Id: <authid>
Execution Id : <exeid>
Codepage Id: 1208
Territory code: 1
Client Process Id: 1896
Client Database Alias: <dbname>
Client Product Id: SQL08027
Client Platform: Unknown
Client Communication Protocol: TCPIP
Client Network Name: <network name>
Connect timestamp: 02/26/2008 09:18:56.499023
33) Deadlocked Connection ...
Deadlock ID: 25
Participant no.: 2
Participant no. holding the lock: 1
Appl Id: GA64656D.B005.00F546151858
Appl Seq number: 7072
Appl Id of connection holding the lock: GA64656C.KC06.00E0C3164336
Seq. no. of connection holding the lock: 5153
Lock wait start time: 03/04/2008 10:33:45.754706
Lock Name : 0x00000200000000000000000054
Lock Attributes : 0x00000010
Release Flags : 0x00000014
Lock Count : 2
Hold Count : 0
Current Mode : IS - Intent Share
Deadlock detection time: 03/04/2008 10:33:53.398242
Table of lock waited on : SYSTABLES
Schema of lock waited on : SYSIBM
Tablespace of lock waited on : SYSCATSPACE
Type of lock: Table
Mode of lock: IX - Intent Exclusive
Mode application requested on lock: S - Share
Node lock occured on: 0
Lock object name: 2
Application Handle: 1254
Deadlocked Statement:
Type : Dynamic
Operation: Fetch
Section : 4
Creator : NULLID
Package : SQLUCE04
Cursor : IREFFETCH
Cursor was blocking: FALSE
Text : SELECT T.TYPE, SUM(CASE WHEN TC.ENFORCED='Y' THEN 1 ELSE 0 END) AS CHILDREN, SUM(CASE WHEN TC.ENFORCED='Y' AND R.TABNAME=T.TABNAME AND R.TABSCHEMA=T.TABSCHEMA THEN 1 ELSE 0 END) AS SELFREFS FROM TABLE(SYSPROC.BASE_TABLE('DB2ADM1','PS_COMB_EXP_TAO4')) B, SYSCAT.TABLES T LEFT OUTER JOIN SYSCAT.REFERENCES R ON R.REFTABNAME=T.TABNAME AND R.REFTABSCHEMA=T.TABSCHEMA LEFT OUTER JOIN SYSCAT.TABCONST TC ON TC.TABNAME=R.TABNAME AND TC.TABSCHEMA=R.TABSCHEMA AND TC.CONSTNAME=R.CONSTNAME AND TC.TYPE='F' where T.TABNAME=B.BASENAME AND T.TABSCHEMA=B.BASESCHEMA GROUP BY T.TYPE
List of Locks:
Lock Name : 0x0000020004FFFFFF9908000000000052
Lock Attributes : 0x00000010
Release Flags : 0x00000010
Lock Count : 1
Hold Count : 0
Lock Object Name : 563460
Object Type : Row
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSTABLES
Mode : S - Share
Lock Name : 0x79FFFFFFB80000010000000100FFFFFF8A0056
Lock Attributes : 0x00000000
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 0
Object Type : Internal - Variation
Mode : S - Share
Lock Name : 0x53514C5543453034FFFFFFB5FFFFFFA8FFFFFFE26C41
Lock Attributes : 0x00000000
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 0
Object Type : Internal - Plan
Mode : S - Share
Lock Name : 0x0000020003FFFFFF9908006070FFFFFFF4FFFFFF9B43
Lock Attributes : 0x00000000
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 0
Object Type : Internal - Catalog Cache
Mode : S - Share
Lock Name : 0x53514C554245303313FFFFFF8926FFFFFF9241
Lock Attributes : 0x00000000
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 0
Object Type : Internal - Plan
Mode : S - Share
Lock Name : 0x0000020003FFFFFF9908000000000052
Lock Attributes : 0x00000010
Release Flags : 0x00000014
Lock Count : 2
Hold Count : 0
Lock Object Name : 563459
Object Type : Row
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSTABLES
Mode : S - Share
Lock Name : 0x40FFFFFF8B00000100000005006D0056
Lock Attributes : 0x00000000
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 0
Object Type : Internal - Variation
Mode : S - Share
Lock Name : 0x53514C554B453037444532FFFFFFC641
Lock Attributes : 0x00000000
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 0
Object Type : Internal - Plan
Mode : S - Share
Lock Name : 0x53514C554F45303038FFFFFFB4043441
Lock Attributes : 0x00000000
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 0
Object Type : Internal - Plan
Mode : S - Share
Lock Name : 0x53514C4445464C5428FFFFFFDD630641
Lock Attributes : 0x00000000
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 0
Object Type : Internal - Plan
Mode : S - Share
Lock Name : 0x00001100000000000000000054
Lock Attributes : 0x00000010
Release Flags : 0x00000010
Lock Count : 1
Hold Count : 0
Lock Object Name : 17
Object Type : Table
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSRELS
Mode : S - Share
Lock Name : 0x00000200000000000000000054
Lock Attributes : 0x00000010
Release Flags : 0x00000014
Lock Count : 2
Hold Count : 0
Lock Object Name : 2
Object Type : Table
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSTABLES
Mode : S - Share
Status : Converting
Current Mode : IS - Intent Share
Lock Name : 0x00001400000000000000000054
Lock Attributes : 0x00000010
Release Flags : 0x00000010
Lock Count : 1
Hold Count : 0
Lock Object Name : 20
Object Type : Table
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSTABCONST
Mode : S - Share
Lock Name : 0xFFFFFF96005204000000000000000054
Lock Attributes : 0x00000000
Release Flags : 0x40000000
Lock Count : 255
Hold Count : 0
Lock Object Name : 1106
Object Type : Table
Tablespace Name : GLAPP
Table Schema : DB2ADM1
Table Name : PS_COMB_EXP_TAO4
Mode : X - Exclusive
Locks Held: 14
Locks in List: 14
34) Deadlocked Connection ...
Deadlock ID: 25
Participant no.: 1
Participant no. holding the lock: 2
Appl Id: GA64656C.KC06.00E0C3164336
Appl Seq number: 5153
Appl Id of connection holding the lock: GA64656D.B005.00F546151858
Seq. no. of connection holding the lock: 7072
Lock wait start time: 03/04/2008 10:33:45.757663
Lock Name : 0x0000020004FFFFFF9908000000000052
Lock Attributes : 0x00000000
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Current Mode : U - Update
Deadlock detection time: 03/04/2008 10:33:53.401596
Table of lock waited on : SYSTABLES
Schema of lock waited on : SYSIBM
Tablespace of lock waited on : SYSCATSPACE
Type of lock: Row
Mode of lock: S - Share
Mode application requested on lock: X - Exclusive
Node lock occured on: 0
Lock object name: 563460
Application Handle: 598
Deadlocked Statement:
Type : Non-SQL
Operation: Runstats
Section : 0
Creator :
Package :
Cursor :
Cursor was blocking: FALSE
Text :
List of Locks:
Lock Name : 0x0000030002FFFFFFFA6A000000000052
Lock Attributes : 0x00000010
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 7010818
Object Type : Row
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSCOLUMNS
Mode : X - Exclusive
Lock Name : 0x0000030001FFFFFFFA6A000000000052
Lock Attributes : 0x00000010
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 7010817
Object Type : Row
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSCOLUMNS
Mode : X - Exclusive
Lock Name : 0x0000030005FFFFFFFA6A000000000052
Lock Attributes : 0x00000010
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 7010821
Object Type : Row
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSCOLUMNS
Mode : X - Exclusive
Lock Name : 0x0000030011FFFFFFF96A000000000052
Lock Attributes : 0x00000010
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 7010577
Object Type : Row
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSCOLUMNS
Mode : X - Exclusive
Lock Name : 0x0000030006FFFFFFFA6A000000000052
Lock Attributes : 0x00000010
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 7010822
Object Type : Row
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSCOLUMNS
Mode : X - Exclusive
Lock Name : 0x0000030000FFFFFFFA6A000000000052
Lock Attributes : 0x00000010
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 7010816
Object Type : Row
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSCOLUMNS
Mode : X - Exclusive
Lock Name : 0x0000030003FFFFFFFA6A000000000052
Lock Attributes : 0x00000010
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 7010819
Object Type : Row
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSCOLUMNS
Mode : X - Exclusive
Lock Name : 0x0000030008FFFFFFFA6A000000000052
Lock Attributes : 0x00000010
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 7010824
Object Type : Row
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSCOLUMNS
Mode : X - Exclusive
Lock Name : 0x0000030007FFFFFFFA6A000000000052
Lock Attributes : 0x00000010
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 7010823
Object Type : Row
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSCOLUMNS
Mode : X - Exclusive
Lock Name : 0x0000030004FFFFFFFA6A000000000052
Lock Attributes : 0x00000010
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 7010820
Object Type : Row
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSCOLUMNS
Mode : X - Exclusive
Lock Name : 0x0000040002FFFFFFFD04000000000052
Lock Attributes : 0x00000010
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 326914
Object Type : Row
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSINDEXES
Mode : X - Exclusive
Lock Name : 0x00000400036507000000000052
Lock Attributes : 0x00000010
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 484611
Object Type : Row
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSINDEXES
Mode : X - Exclusive
Lock Name : 0x0000040003FFFFFFD708000000000052
Lock Attributes : 0x00000010
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 579331
Object Type : Row
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSINDEXES
Mode : X - Exclusive
Lock Name : 0x0000020004FFFFFF9908000000000052
Lock Attributes : 0x00000000
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 563460
Object Type : Row
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSTABLES
Mode : X - Exclusive
Status : Converting
Current Mode : U - Update
Lock Name : 0x00000200000000000000000054
Lock Attributes : 0x00000000
Release Flags : 0x40000000
Lock Count : 2
Hold Count : 0
Lock Object Name : 2
Object Type : Table
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSTABLES
Mode : IX - Intent Exclusive
Lock Name : 0x00000300000000000000000054
Lock Attributes : 0x00000010
Release Flags : 0x40000020
Lock Count : 10
Hold Count : 0
Lock Object Name : 3
Object Type : Table
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSCOLUMNS
Mode : IX - Intent Exclusive
Lock Name : 0x00000400000000000000000054
Lock Attributes : 0x00000010
Release Flags : 0x40000000
Lock Count : 3
Hold Count : 0
Lock Object Name : 4
Object Type : Table
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSINDEXES
Mode : IX - Intent Exclusive
Lock Name : 0xFFFFFF9600FFFFFFE104000000000000000054
Lock Attributes : 0x00000000
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 1249
Object Type : Table
Tablespace Name : GLAPP
Table Schema : DB2ADM1
Table Name : PS_COMB_EXP_TAO5
Mode : IN - Intent None
Lock Name : 0x00001A00000000000000000054
Lock Attributes : 0x00000000
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 26
Object Type : Table
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSCOLDIST
Mode : IX - Intent Exclusive
Locks Held: 19
Locks in List: 19
两个程序,一个在跑Import from /dev/null,另一个在做Runstats。
两个都是IBM得程序,难道是bug?别忙着下结论
首先让我们来把问题的思路捋顺,看一看具体是怎么个deadlock法。
我们把Import得程序称为A (Application Handle: 1254),Runstats得程序称为B ( Application Handle: 598)
从Lock wait start time看
A: Lock wait start time: 03/04/2008 10:33:45.754706
B: Lock wait start time: 03/04/2008 10:33:45.757663
说明A先开始等待,那么看一看A在等B得什么?
Lock Name : 0x00000200000000000000000054
Lock Attributes : 0x00000010
Release Flags : 0x00000014
Lock Count : 2
Hold Count : 0
Lock Object Name : 2
Object Type : Table
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSTABLES
Mode : S - Share
Status : Converting
Current Mode : IS - Intent Share
这个是什么??从IS向S锁的convert,在SYSIBM.SYSTABLES上。
那这个Lock在B中呢?
Lock Name : 0x00000200000000000000000054
Lock Attributes : 0x00000000
Release Flags : 0x40000000
Lock Count : 2
Hold Count : 0
Lock Object Name : 2
Object Type : Table
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSTABLES
Mode : IX - Intent Exclusive
呵呵,是IX锁,因为Runstats正在修改systable表中某行的数据嘛,自然在systables上加IX了。
然后回头看B又在等A什么:
Lock Name : 0x0000020004FFFFFF9908000000000052
Lock Attributes : 0x00000000
Release Flags : 0x40000000
Lock Count : 1
Hold Count : 0
Lock Object Name : 563460
Object Type : Row
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSTABLES
Mode : X - Exclusive
Status : Converting
Current Mode : U - Update
呵呵,行锁,同样在SYSIBM.SYSTABLES,从U转向X,那么我们已经可以猜到A锁拿的了,一定是S锁咯
Lock Name : 0x0000020004FFFFFF9908000000000052
Lock Attributes : 0x00000010
Release Flags : 0x00000010
Lock Count : 1
Hold Count : 0
Lock Object Name : 563460
Object Type : Row
Tablespace Name : SYSCATSPACE
Table Schema : SYSIBM
Table Name : SYSTABLES
Mode : S - Share
现在大体上的picture应该已经出来了
A-----apply S row lock / apply IS table lock-----------------request convert IS to S on table ( wait for B)
B-----apply U row lock / apply IX table lock-----------------------------------------------------------------------request convert U to X on row (wait for A )
呵呵,估计各位看官还是一脑袋雾水吧 (这个棒槌在忽悠什么?)
别着急,好玩的来了……
首先对于A,我们可以看到它正在执行一个cursor
Deadlocked Statement:
Type : Dynamic
Operation: Fetch
Section : 4
Creator : NULLID
Package : SQLUCE04
Cursor : IREFFETCH
Cursor was blocking: FALSE
Text : SELECT T.TYPE, SUM(CASE WHEN TC.ENFORCED='Y' THEN 1 ELSE 0 END) AS CHILDREN, SUM(CASE WHEN TC.ENFORCED='Y' AND R.TABNAME=T.TABNAME AND R.TABSCHEMA=T.TABSCHEMA THEN 1 ELSE 0 END) AS SELFREFS FROM TABLE(SYSPROC.BASE_TABLE('DB2ADM1','PS_COMB_EXP_TAO4')) B, SYSCAT.TABLES T LEFT OUTER JOIN SYSCAT.REFERENCES R ON R.REFTABNAME=T.TABNAME AND R.REFTABSCHEMA=T.TABSCHEMA LEFT OUTER JOIN SYSCAT.TABCONST TC ON TC.TABNAME=R.TABNAME AND TC.TABSCHEMA=R.TABSCHEMA AND TC.CONSTNAME=R.CONSTNAME AND TC.TYPE='F' where T.TABNAME=B.BASENAME AND T.TABSCHEMA=B.BASESCHEMA GROUP BY T.TYPE
这个说明什么?说明我们在request convert table lock from IS to S得时候正在执行这条语句,也就是这条语句产生的这个lock upgrade request。
看看这个语句,什么咚咚?就是一个普通的查询嘛。现在各位有没有什么要问的?
俺有。为啥一个查询要请求S得表锁呢?按理说应该是给S得行锁加上IS得表锁哦~~~
相信耐心地读到这里还没有关掉这个页面的读者也都明白,一般来说一个查询不大会给一个表加S锁,除非要不优化器认为做整个的一个tablescan用行锁比较好,要不有可能是lock escalation,还有要不就是某些特定的isolation level产生的结果。
怎么办?让我们先来做一个db2exfmt看看这个语句是怎么跑的:
刚才我们的那个lock convert是在什么地方的?sysibm.systables,那么也就是要们FETCH(15),要们TBSCAN(21)咯
然后继续想,我们为什么会要convert这个lock呢?从plan上看没有道理呀,难道是那个TBSCAN(21)搞得鬼?
21) TBSCAN: (Table Scan)
Cumulative Total Cost: 14744.1
Cumulative CPU Cost: 1.77835e+08
Cumulative I/O Cost: 8333
Cumulative Re-Total Cost: 32.6412
Cumulative Re-CPU Cost: 1.38209e+08
Cumulative Re-I/O Cost: 0
Cumulative First Row Cost: 12.8616
Estimated Bufferpool Buffers: 8333
Arguments:
---------
JN INPUT: (Join input leg)
OUTER
MAXPAGES: (Maximum pages for prefetch)
ALL
PREFETCH: (Type of Prefetch)
SEQUENTIAL
ROWLOCK : (Row Lock intent)
NEXT KEY SHARE
SCANDIR : (Scan Direction)
FORWARD
TABLOCK : (Table Lock intent)
INTENT SHARE
TBISOLVL: (Table access Isolation Level)
CURSOR STABILITY
Input Streams:
-------------
17) From Object SYSIBM.SYSTABLES
Estimated number of rows: 80260
Number of columns: 4
Subquery predicate ID: Not Applicable
Column Names:
------------
+Q10.$RID$+Q10.TYPE+Q10.CREATOR+Q10.NAME
Output Streams:
--------------
18) To Operator #20
Estimated number of rows: 80260
Number of columns: 3
Subquery predicate ID: Not Applicable
Column Names:
------------
+Q10.TYPE+Q10.CREATOR+Q10.NAME
看看人家TABLE LOCK是怎样计划的?
TABLOCK : (Table Lock intent)
INTENT SHARE
明明是IS呀……
难道这条路不对?那让我们来看看是不是lock escalation……
跑去找找db2diag.log,没有发现escalation得信息哦,说明这里不是escalate……
到这里大家有什么看法没有?好像我们陷入死路了:没有escalation,计划中也没有S锁,真是活见鬼了……
等一下,让我们想想lock还和什么有关…………………………………………ISOLATION LEVEL
刚才我们抓访问计划的时候用的什么isolation level?我用的默认的,也就是CS。那么我们换一个看看?
每种isolation一遍,看看这个table到底有没有可能用S锁……
TBSCAN (21)
1) UR:
.
TABLOCK : (Table Lock intent)
INTENT NONE
TBISOLVL: (Table access Isolation Level)
UNCOMMITTED READ
2) CS:
.
TABLOCK : (Table Lock intent)
INTENT SHARE
TBISOLVL: (Table access Isolation Level)
CURSOR STABILITY
3) RS:
.
TABLOCK : (Table Lock intent)
INTENT SHARE
TBISOLVL: (Table access Isolation Level)
READ STABILITY
.
4) RR:
.
TABLOCK : (Table Lock intent)
SHARE
TBISOLVL: (Table access Isolation Level)
REPEATABLE READ
恩恩,有新发现,难道是这个问题?
再看一眼:
Type : Dynamic
Operation: Fetch
Section : 4
Creator : NULLID
Package : SQLUCE04
Cursor : IREFFETCH
Cursor was blocking: FALSE
Text : SELECT T.TYPE, SUM(CASE WHEN TC.ENFORCED='Y' THEN 1 ELSE 0 END) AS CHILDREN, SUM(CASE WHEN TC.ENFORCED='Y' AND R.TABNAME=T.TABNAME AND R.TABSCHEMA=T.TABSCHEMA THEN 1 ELSE 0 END) AS SELFREFS FROM TABLE(SYSPROC.BASE_TABLE('DB2ADM1','PS_COMB_EXP_TAO4')) B, SYSCAT.TABLES T LEFT OUTER JOIN SYSCAT.REFERENCES R ON R.REFTABNAME=T.TABNAME AND R.REFTABSCHEMA=T.TABSCHEMA LEFT OUTER JOIN SYSCAT.TABCONST TC ON TC.TABNAME=R.TABNAME AND TC.TABSCHEMA=R.TABSCHEMA AND TC.CONSTNAME=R.CONSTNAME AND TC.TYPE='F' where T.TABNAME=B.BASENAME AND T.TABSCHEMA=B.BASESCHEMA GROUP BY T.TYPE
package name是SQLUCE04,那让我们确认一下咯
select pkgname, isolation from syscat.packages where pkgname='SQLUCE04'
得到什么?
SQLUCE04 RR
恩恩……为什么是RR呢?难道是设计缺陷?别下结论,看一看这个到底是哪个package得。
在sqllib/bnd里面弄个小脚本调用db2bfd -b查找所有的db2*.bnd文件,然后发现db2uigsi.bnd得APP NAME是SQLUCE04,但是看一看默认的Isolation,竟然是RS
哈哈,很明显是用户自己搞错了,要不就是他们的PeopleSoft搞错了……
查一下,果然他们自己的rebind package得脚本把这个package rebind成RR,造成了死锁的问题 |
|