【 使用环境 】测试环境
【 OB or 其他组件 】
【 使用版本 】OceanBase 4.2.5社区版
【问题描述】
关掉了全局autocommit
set global autocommit=0;
set global ob_trx_lock_timeout = 5000000;
在session1的事务中执行insert操作
在session2中执行drop对应分区操作,会一直卡住,这是因为锁住了吗?为啥不会报超时?用哪个视图查看锁啊????捉急
【 使用环境 】测试环境
【 OB or 其他组件 】
【 使用版本 】OceanBase 4.2.5社区版
【问题描述】
关掉了全局autocommit
set global autocommit=0;
set global ob_trx_lock_timeout = 5000000;
在session1的事务中执行insert操作
在session2中执行drop对应分区操作,会一直卡住,这是因为锁住了吗?为啥不会报超时?用哪个视图查看锁啊????捉急
SELECT t.tenant_id,t.trans_id,t.type,t.id1,t.id2,t.lmode,t.request,round(t.ctime / 1000000) ctime_s,t.block FROM gv$ob_locks t WHERE t.block = 1 ORDER BY t.trans_id;
这是在等你事务1 commit
https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000664387?back=kb
可以参考这个文档自己先排查一下
好的,多谢
看你插入数据的时候开启事务了 该表应该是加锁了 导致的删除的时候应该没有办法删除 sys租户查询一下
select1
/*+QUERY_TIMEOUT(3600000000) read_consistency(weak) */
b.TRANS_ID,
case
WHEN b.TYPE = ‘TM’ THEN ‘表锁’
WHEN b.TYPE = ‘TX’ THEN ‘事务锁’
WHEN b.TYPE = ‘TR’ THEN ‘行锁’
ELSE NULL
END
AS lock_type,
ID1,
LMODE,
CASE
WHEN BLOCK = 0 THEN ‘该事务持有锁’
WHEN BLOCK = 1 THEN ‘该事务被阻塞’
ELSE NULL
END
as BLOCK,
a.SVR_IP,
ID,
user,
command,
time,
total_time,
STATE,
info,
retry_cnt,
retry_info,
thread_id,
trace_id
from
gv$ob_processlist a,
GV$OB_LOCKS b,
oceanbase.CDB_ob_table_locations c
where
a.trans_id = b.trans_id
and c.table_name = ‘表名称’;
怎么查啊…
666
尽管表面提示死锁类问题,但是我感觉问题应该不是在锁上