达梦数据库插单行语句耗时43秒的问题分析

巡检的时候发现一条单行的语句居然耗时46秒:

  1. insert语句于2022-03-03 16:45:54.089发生了回退。

2022-03-03 16:45:11.043 (EP[0] sess:0x7ef114a1a680 thrd:1746386 user:SDS trxid:738371510 stmt:0x7ef114a4de78 appname: ip:::ffff:22.21.64.13) PARAMS(SEQNO, TYPE, DATA)={(0, VARCHAR2, 'SDS00000202203030000000000716724'), (1, CHAR, '20211119'), (2, VARCHAR2, 'SRS00000202203030000000000017837'), (3, VARCHAR2, 'GSRS00000202203030000000000017837'), (4, VARCHAR2, '601'), (5, CHAR, '0'), (6, CHAR, '0'), (7, VARCHAR2, '01'), (8, VARCHAR2, '03'), (9, VARCHAR2, 'SRS'), (10, CHAR, '1')}

...

2022-03-03 16:45:54.089 (EP[0] sess:0x7ef114a1a680 thrd:1746386 user:SDS trxid:738371510 stmt:0x7ef114a4de78 appname: ip:::ffff:22.21.64.13) [ERR(-6602)]: insert into T_SDS_ACCT

DUP_VAL_ON_INDEX -6602 违反唯一性约束

该表的唯一索引:

CREATE UNIQUE  INDEX "UDX_SDS_ACCT_01" ON "SDS"."T_SDS_ACCT"("REQUEST_NO" ASC,"SDS_DATA_SYS_SOURCE" ASC) STORAGE(ON "TS_SDS_DATA", CLUSTERBTR) ;

事务738371510视图传入参数:

REQUEST_NO: SRS00000202203030000000000017837

SDS_DATA_SYS_SOURCE: SRS

  1. 与之发生冲突的事务为事务738371179,它插入了相同的数据后,直到2022-03-03 16:45:54.088才提交。中途session 0x7ef125232960还执行了其他语句,并非完全挂起,因此应该是长事务所致。

2022-03-03 16:45:10.381 (EP[0] sess:0x7ef125232960 thrd:1746382 user:SDS trxid:738371179 stmt:0x7ef125266158 appname: ip:::ffff:22.21.64.13) PARAMS(SEQNO, TYPE, DATA)={(0, VARCHAR2, 'SDS00000202203030000000000716723'), (1, CHAR, '20211119'), (2, VARCHAR2, 'SRS00000202203030000000000017837'), (3, VARCHAR2, 'GSRS00000202203030000000000017837'), (4, VARCHAR2, '601'), (5, CHAR, '0'), (6, CHAR, '0'), (7, VARCHAR2, '01'), (8, VARCHAR2, '03'), (9, VARCHAR2, 'SRS'), (10, CHAR, '1')}

...

2022-03-03 16:45:54.087 (EP[0] sess:0x7ef125232960 thrd:1746382 user:SDS trxid:738371179 stmt:0x7ef125266158 appname: ip:::ffff:22.21.64.13)  FREE STMT^M

2022-03-03 16:45:54.088 (EP[0] sess:0x7ef125232960 thrd:1746382 user:SDS trxid:738371179 stmt:NULL appname:)  MSG: COMMIT^M

2022-03-03 16:45:54.088 (EP[0] sess:0x7ef125232960 thrd:1746382 user:SDS trxid:738371179 stmt:NULL appname:)  TRX: COMMIT^M

问题总结:

  1. Session 0x7ef125232960,发起了事务738371179。于2022-03-03 16:45:10.381往T_SDS_ACCT插入了一行数据后,直到2022-03-03 16:45:54.088才完成事务并提交。其中插入的数据的REQUEST_NO为SRS00000202203030000000000017837、SDS_DATA_SYS_SOURCE为 SRS。
  2. Session 0x7ef114a1a680,发起了事务738371510。于2022-03-03 16:45:11.043往T_SDS_ACCT尝试插数,REQUEST_NO为SRS00000202203030000000000017837、SDS_DATA_SYS_SOURCE为 SRS,与事务738371179一致。这违反了UDX_SDS_ACCT_01唯一索引引入的唯一约束。
  3. 事务738371179完成后,事务738371510才发生了回滚。这也导致insert T_SDS_ACCT执行时间达到了43秒。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
达梦数据库(DMDB)是一种关系型数据库管理系统,它在语法方面具有一些特殊性。以下是达梦数据库语法的一些特点: 1. 大小写敏感:达梦数据库是大小写敏感的,即在表名、列名、函数名等标识符中使用的大小写必须与定义时完全一致。 2. 使用方括号:在达梦数据库中,可以使用方括号 `[ ]` 将标识符括起来,以避免与关键字冲突。例如,`[select]` 可以用作列名。 3. 字符串引号:与其他数据库不同,达梦数据库中字符串常量可以使用单引号 `' '` 或双引号 `" "` 表示,两者是等价的。 4. 注释语法:达梦数据库支持单行注释和多行注释。单行注释使用 `--` 开头,多行注释使用 `/* */` 包围。 5. 索引语法:达梦数据库的索引语法与其他数据库有所区别。例如,在创建索引时,可以使用 `using index` 关键字指定索引类型,如 `using index btree`。 6. 存储过程和函数:达梦数据库支持存储过程和函数的编写和调用,可以使用 `create procedure` 和 `create function` 语句创建存储过程和函数,并使用 `call` 语句来调用它们。 7. 数据类型:达梦数据库支持常见的数据类型,如整数、浮点数、字符、日期等。此外,达梦数据库还提供了一些特殊的数据类型,例如 `CLOB`、`BLOB`、`NCLOB` 等。 需要注意的是,以上特殊性是相对于其他关系型数据库而言的,如果你在使用达梦数据库时遇到特定的语法问题,最好参考达梦数据库的官方文档或相关资料,以确保正确使用和理解达梦数据库的语法规则。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值