PolarDB数据库语句正常,但是执行会锁等待,怎么回事?

PolarDB数据库语句正常,但是执行会锁等待,怎么回事?UPDATE exa_questionnaire SET title='风湿7月出科考核',
creator='b5d092ef4ffc4576a3d2623a9dc0dc33',
update_time='2024-07-19 22:07:52.867',
question_count=100,
category_id='
total_points=100.0,
time_limit=1 WHERE id='
CREATE TABLE exa_questionnaire (
id char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '试卷ID',
questionnaire_sequence int(11) NOT NULL AUTO_INCREMENT COMMENT '试卷序号(自增不重复)',
title varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '试卷标题',
types tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '试卷类型(1正式考试、2同步测验、3出科考核)',
generate_type tinyint(1) unsigned NOT NULL COMMENT '组卷类型(1选题组卷、2抽题组卷、3随机组卷、4以卷组卷、5智能组卷、6自动组卷)',
create_type tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '创建类型(1新建卷创建、2复制创建、3规则创建、4导入创建、5试卷库创建、6分配创建)',
answer_mode tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '试卷答题模式:1-常规模式,2-竞赛模式,3-抢答模式',
tissue_id char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '组织ID',
tissue_name varchar(0) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '试卷生成事件描述',
department_id char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '部门Id',
tissue_type tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '组织类型',
creator char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '创建人',
create_time datetime NOT NULL COMMENT '创建时间',
updator char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '修改人',
update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
audit_status tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '审核状态(0未审核,1审核通过,2审核未过)',
auditor char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '审核人',
audit_time datetime DEFAULT NULL COMMENT '审核时间',
del_status tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否删除(0否,1是)',
exam_status tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '考试状态:1未开始,2考试中,3已结束',
question_count smallint(4) unsigned NOT NULL DEFAULT '0' COMMENT '试卷题目数量',
archive_status tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否已归档(0否,1是)',
source varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '来源:操作平台类型',
user_IP varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '操作者IP',
device_info varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '设备信息,如:浏览器、手机等',
select_scope tinyint(1) unsigned NOT NULL DEFAULT '3' COMMENT '抽题设置(1所有库、2系统、3自建库)',
category_id char(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '考试分类:自定义的Category',
total_points decimal(6,2) NOT NULL DEFAULT '0.00' COMMENT '试卷总分数',
time_limit tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '答题时间限制类型:1整卷限制时长,2单题限制时长',
duration mediumint(9) unsigned NOT NULL DEFAULT '0' COMMENT '时长:单位分钟',
randoms tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '卷下的试题是否支持乱序:true是,false否',
amout_set tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '试卷的试题乱序数量',
reallocate tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '是否排重: 默认true排重,flase不排重',
templet_id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '模板Id,只有一份试卷的与id相同,如果有多份试卷则为第一份试卷id',
encrypt bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '是否加密试卷 0不加密,1加密',
lock_password char(32) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '加密密码',
parent_id char(32) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '该试卷被复制、分配的试卷id',
remark varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
PRIMARY KEY (id),
KEY questionnaire_sequence (questionnaire_sequence),
KEY findListIndex (templet_id),
KEY questionnaire_select_1 (tissue_id,del_status,parent_id,title)
) ENGINE=InnoDB AUTO_INCREMENT=1065720 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='试卷表';

展开
收起
三分钟热度的鱼 2024-07-31 21:57:31 64 发布于安徽 分享
分享
版权
举报
2 条回答
写回答
取消 提交回答
  • 资深 C++与人工智能程序员。精通 C++,善用其特性构建稳健架构。在人工智能领域,深入研习机器学习算法,借 C++与 OpenCV 等实现计算机视觉应用,于自然语言处理构建文本处理引擎。以敏锐洞察探索技术融合边界,用代码塑造智能未来。

    PolarDB数据库语句正常但执行时出现锁等待,可能有以下原因:

    事务未提交

    • 原因:当前有未提交的事务占用了相关资源的锁,导致其他语句需要等待。例如一个事务对某一行数据进行了更新操作但未提交,此时其他事务如果要对同一行进行操作,就会出现锁等待。
    • 影响:后续相关操作被阻塞,直到锁被释放,可能导致业务流程停滞,响应时间变长。

    并发操作冲突

    • 原因:多个并发事务同时对同一资源进行操作,产生了资源竞争。比如多个事务同时尝试更新同一行数据,或者一个事务在读取数据时另一个事务要对该数据进行修改等情况。
    • 影响:可能导致数据不一致,或者部分事务长时间等待,甚至出现死锁,使系统性能下降。

    锁粒度问题

    • 原因:数据库的锁机制可能设置了较粗的锁粒度。如果以表级锁为主,那么对表中任何数据的操作都会锁住整个表,其他事务对该表中任何数据的操作都需要等待。
    • 影响:大大降低了并发度,很多本来可以并发执行的操作都只能串行执行,严重影响系统性能和吞吐量。

    长时间运行的事务

    • 原因:存在长时间运行的事务,长时间持有锁资源不释放。例如事务中包含复杂的业务逻辑或大量数据的处理,导致事务执行时间过长。
    • 影响:会阻塞其他事务对相关资源的访问,造成大量锁等待,降低系统的并发处理能力。

    索引缺失或不合理

    • 原因:如果查询语句没有使用合适的索引,数据库可能会进行全表扫描,从而导致大量的数据被锁住。
    • 影响:增加了锁冲突的概率,使其他事务需要等待更长时间,严重影响查询性能和系统并发度。
    2025-03-08 23:08:32 举报
    赞同 评论

    评论

    全部评论 (0)

    登录后可评论
  • 手动执行能复现的话,可以直连主地址,执行下看看 select * from information_schema.innodb_trx order by trx_started desc\G
    此回答整理自钉群“PolarDB 专家面对面 - 网络&连接&线程池功能”

    2024-07-31 23:05:54 举报
    赞同 11 评论

    评论

    全部评论 (0)

    登录后可评论

阿里云关系型数据库主要有以下几种:RDS MySQL版、RDS PostgreSQL 版、RDS SQL Server 版、PolarDB MySQL版、PolarDB PostgreSQL 版、PolarDB分布式版 。

还有其他疑问?
咨询AI助理
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等