知识大全 MYSQL死锁相关查找

Posted

篇首语:不怕百事不利,就怕灰心丧气。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 MYSQL死锁相关查找相关的知识,希望对你有一定的参考价值。

MYSQL死锁相关查找  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  如果遇到死锁了 怎么解决呢?找到原始的锁ID 然后KILL掉一直持有的那个线程就可以了 但是众多线程 可怎么找到引起死锁的线程ID呢? MySQL 发展到现在 已经非常强大了 这个问题很好解决 直接从数据字典连查找

  我们来演示下

  线程A 我们用来锁定某些记录 假设这个线程一直没提交 或者忘掉提交了 那么就一直存在 但是数据里面显示的只是SLEEP状态

  mysql> set @@automit= ;

  Query OK rows affected ( sec)

  mysql> use test;

  Reading table information for pletion of table and column names

  You can turn off this feature to get a quicker startup with A

  Database changed

  mysql> show tables;

  + +

  | Tables_in_test |

  + +

  | demo_test      |

  | t              |

  + +

   rows in set ( sec)

  mysql> select * from t ;

  + + + + + + + +

  | id | fname  | lname  | birthday   | c | c | c |

  + + + + + + + +

  | | lily | lucy | | |  |  |

  | | lily | lucy | | |  |  |

  + + + + + + + +

   rows in set ( sec)

  mysql> update t set birthday = where id = ;

  Query OK row affected ( sec)

  Rows matched:   Changed:   Warnings:

  mysql> select connection_id()

  + +

  | connection_id() |

  + +

  |              |

  + +

   row in set ( sec)

  mysql>

  线程B 我们用来进行普通的更新 但是遇到问题了 此时不知道是哪个线程把这行记录给锁定了?

  mysql> use test;

  Reading table information for pletion of table and column names

  You can turn off this feature to get a quicker startup with A

  Database changed

  mysql> select @@automit;

  + +

  | @@automit |

  + +

  |            |

  + +

   row in set ( sec)

  mysql> update t set birthday= where id = ;

  ERROR (HY ) Lock wait timeout exceeded; try restarting transaction

  mysql> select connection_id()

  + +

  | connection_id() |

  + +

  |              |

  + +

   row in set ( sec)

  mysql> show processlist;

  + + + + + + + + +

  | Id | User | Host      | db   | Command | Time | State | Info             |

  + + + + + + + + +

  | | root | localhost | NULL | Sleep   | |       | NULL             |

  | | root | localhost | NULL | Sleep   |  |       | NULL             |

  | | root | localhost | test | Sleep   |  |       | NULL             |

  | | root | localhost | test | Query   |    | init  | show processlist |

  | | root | localhost | NULL | Sleep   |    |       | NULL             |

  + + + + + + + + +

   rows in set ( sec)

  mysql> show engine innodb status\\G

  

  TRANSACTIONS

  

  Trx id counter

  Purge done for trx s n:o < undo n:o < state: running but idle

  History list length

  LIST OF TRANSACTIONS FOR EACH SESSION:

   TRANSACTION not started

  MySQL thread id OS thread handle x f a c query id localhost root init

  show engine innodb status

   TRANSACTION ACTIVE sec starting index read

  mysql tables in use locked

  LOCK WAIT lock struct(s) heap size row lock(s)

  MySQL thread id OS thread handle x f a bd query id localhost root updating

  update t set birthday= where id =

   TRX HAS BEEN WAITING SEC FOR THIS LOCK TO BE GRANTED:

  RECORD LOCKS space id page no n bits index `PRIMARY` of table `test` `t ` trx id lock_mode X waiting

  Record lock heap no PHYSICAL RECORD: n_fields ; pact format; info bits

   : len ; hex ; asc ;;

   : len ; hex e c; asc       ;;

   : len ; hex e d c ; asc ~   ( ;;

   : len ; hex c c ; asc lily ;;

   : len ; hex c ; asc lucy ;;

   : len ; hex fcc ; asc   W;;

   : len ; hex ; asc     ;;

   : len ; hex ; asc     ;;

   : len ; hex ; asc     ;;

  

   TRANSACTION ACTIVE sec

   lock struct(s) heap size row lock(s) undo log entries

  MySQL thread id OS thread handle x f a b query id localhost root cleaning up

  Trx read view will not see trx with id >= sees <

  上面的信息很繁多 也看不清楚到底哪里是哪里

  不过现在 我们只要从数据字典里面拿出来这部分信息就OK了

  mysql> SELECT * FROM information_schema INNODB_TRX\\G

  *************************** row ***************************

  trx_id:

  trx_state: RUNNING

  trx_started: : :

  trx_requested_lock_id: NULL

  trx_wait_started: NULL

  trx_weight:

  trx_mysql_thread_id:

  trx_query: NULL

  trx_operation_state: NULL

  trx_tables_in_use:

  trx_tables_locked:

  trx_lock_structs:

  trx_lock_memory_bytes:

  trx_rows_locked:

  trx_rows_modified:

  trx_concurrency_tickets:

  trx_isolation_level: REPEATABLE READ

  trx_unique_checks:

  trx_foreign_key_checks:

  trx_last_foreign_key_error: NULL

  trx_adaptive_hash_latched:

  trx_adaptive_hash_timeout:

  trx_is_read_only:

  trx_automit_non_locking:

   row in set ( sec)

cha138/Article/program/MySQL/201311/29500

相关参考

知识大全 通过查找引起死锁的的操作即可解决死锁[2]

    引起数据库死锁的是:进程号其执行的SQL语法如下  EventTypeParametersEventInfo    LanguageEvent  select*fromtest  insert

知识大全 oracle中查找session中的死锁

  1查哪个过程被锁  查V$DB_OBJECT_CACHE视图:  SELECT*FROMV$DB_OBJECT_CACHEWHEREOWNER=过程的所属用户ANDLOCKS!=;  查是哪一个S

知识大全 巧用MySQL InnoDB引擎锁机制解决死锁问题[2]

巧用MySQLInnoDB引擎锁机制解决死锁问题[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 巧用MySQL InnoDB引擎锁机制解决死锁问题[1]

巧用MySQLInnoDB引擎锁机制解决死锁问题[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 MySQL数据库中查找执行效率慢的SQL语句[1]

MySQL数据库中查找执行效率慢的SQL语句[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 MySQL数据库中查找执行效率慢的SQL语句[2]

MySQL数据库中查找执行效率慢的SQL语句[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 mysql数据库find

  举个例子来说  有个文章表里面有个type字段他存储的是文章类型有头条推荐热点图文……等等  现在有篇文章他既是头条又是热点还是图文  type中以的格式存储  们我们如何用sql查找所有type

知识大全 ASP程序直接连接MYSQL数据库

ASP程序直接连接MYSQL数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在网上查找大量

什么是“死锁”?出现死锁的条件有哪些?

  单机系统当程序出错或某一外部条件始终不能满足时,就可能出现死循环或无休止的等待状态,即称为死锁。分布式多机系统由于系统复杂,管理困难,竞用资源的情况又十分严重,更容易发生死锁问题。在多机系统中,若

什么是“死锁”?出现死锁的条件有哪些?

  单机系统当程序出错或某一外部条件始终不能满足时,就可能出现死循环或无休止的等待状态,即称为死锁。分布式多机系统由于系统复杂,管理困难,竞用资源的情况又十分严重,更容易发生死锁问题。在多机系统中,若