MySQL未提交事务造成的等待事件怎么解决

68次阅读
没有评论

共计 1629 个字符,预计需要花费 5 分钟才能阅读完成。

本篇内容主要讲解“MySQL 未提交事务造成的等待事件怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“MySQL 未提交事务造成的等待事件怎么解决”吧!

开发人员过来说程序中无法修改数据
 ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
 
查看是如下 SQL 语句造成的
UPDATE
  MemberAttribute
  SET name = 而 ,required = 1, enabled = 1, sequence = 34
   
  , memberTemplate_id = 698
   
  WHERE
  id = 284 and deleted = false;

刚开始一直考虑死锁,但一直无死锁信息

如果单独的一条 sql 是不会千万死锁的,肯定有其他语句
查看未提交的事务
SELECT
  a.trx_id,
  a.trx_state,
  a.trx_started,
  a.trx_query,
  b.ID,
  b.USER,
  b.DB,
  b.COMMAND,
  b.TIME,
  b.STATE,
  b.INFO,
  c.PROCESSLIST_USER,
  c.PROCESSLIST_HOST,
  c.PROCESSLIST_DB,
  d.SQL_TEXT
FROM
  information_schema.INNODB_TRX a
LEFT JOIN information_schema.PROCESSLIST b ON a.trx_mysql_thread_id = b.id
AND b.COMMAND = Sleep
LEFT JOIN PERFORMANCE_SCHEMA.threads c ON b.id = c.PROCESSLIST_ID
LEFT JOIN PERFORMANCE_SCHEMA.events_statements_current d ON d.THREAD_ID = c.THREAD_ID;

确实有未提交事务

查看未提交线程 id
SELECT * FROM information_schema.INNODB_TRX \G
*************************** 12. row ***************************
  trx_id: 188721461
  trx_state: RUNNING
  trx_started: 2016-01-06 09:41:22
  trx_requested_lock_id: NULL
  trx_wait_started: NULL
  trx_weight: 26
  trx_mysql_thread_id: 2122328
  trx_query: NULL
  trx_operation_state: NULL
  trx_tables_in_use: 0
  trx_tables_locked: 0
  trx_lock_structs: 24
  trx_lock_memory_bytes: 6544
  trx_rows_locked: 3003
  trx_rows_modified: 2
  trx_concurrency_tickets: 0
  trx_isolation_level: REPEATABLE READ
  trx_unique_checks: 1
  trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
 trx_adaptive_hash_latched: 0
 trx_adaptive_hash_timeout: 0
  trx_is_read_only: 0
trx_autocommit_non_locking: 0
与 niravana 数据库相关的进程只有 2122328
kill 2122328
再次修改即可

到此,相信大家对“MySQL 未提交事务造成的等待事件怎么解决”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-18发表,共计1629字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)