精华内容
下载资源
问答
  • MySQL查看锁表

    万次阅读 2017-11-24 20:54:07
    mysql的有表锁和行锁,myisam最小为表锁,innodb最小为行锁,可以通过以下命令获取锁定次数、锁定造成其他线程等待次数,以及锁定等待时间信息。 show status like '%lock%'; 如当Table_locks_waited与...

    锁状态

    • mysql的锁有表锁和行锁,myisam最小锁为表锁,innodb最小锁为行锁,可以通过以下命令获取锁定次数、锁定造成其他线程等待次数,以及锁定等待时间信息。

    show status like '%lock%';

    • 如当Table_locks_waited与Table_locks_immediate的比值较大,则说明我们的表锁造成的阻塞比较严重,可能需要调整Query语句,或者更改存储引擎,亦或者需要调整业务逻辑。当然,具体改善方式必须根据实际场景来判断。
    • Innodb_row_lock_waits较大,则说明Innodb的行锁也比较严重,且影响了其他线程的正常处理。同样需要查找出原因并解决。造成Innodb行锁严重的原因可能是Query语句所利用的索引不够合理(Innodb行锁是基于索引来锁定的),造成间隙锁过大。也可能是系统本身处理能力有限,则需要从其他方面来考虑解决。

    表信息

    show status like 'Table%';

    • Table_locks_immediate  指的是能够立即获得表级锁的次数
    • Table_locks_waited  指的是不能立即获取表级锁而需要等待的次数

    在MySQL5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎):

    • 当前运行的所有事务

    SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

    root@127.0.0.1 : information_schema 13:29:05> desc innodb_trx ;
    +—————————-+———————+——+—–+———————+——-+
    | Field | Type | Null | Key | Default | Extra |
    +—————————-+———————+——+—–+———————+——-+
    | trx_id | varchar(18) | NO | | | |#事务ID
    | trx_state | varchar(13) | NO | | | |#事务状态:
    | trx_started | datetime | NO | | 0000-00-00 00:00:00 | |#事务开始时间;
    | trx_requested_lock_id | varchar(81) | YES | | NULL | |#innodb_locks.lock_id
    | trx_wait_started | datetime | YES | | NULL | |#事务开始等待的时间
    | trx_weight | bigint(21) unsigned | NO | | 0 | |#
    | trx_mysql_thread_id | bigint(21) unsigned | NO | | 0 | |#事务线程ID
    | trx_query | varchar(1024) | YES | | NULL | |#具体SQL语句
    | trx_operation_state | varchar(64) | YES | | NULL | |#事务当前操作状态
    | trx_tables_in_use | bigint(21) unsigned | NO | | 0 | |#事务中有多少个表被使用
    | trx_tables_locked | bigint(21) unsigned | NO | | 0 | |#事务拥有多少个锁
    | trx_lock_structs | bigint(21) unsigned | NO | | 0 | |#
    | trx_lock_memory_bytes | bigint(21) unsigned | NO | | 0 | |#事务锁住的内存大小(B)
    | trx_rows_locked | bigint(21) unsigned | NO | | 0 | |#事务锁住的行数
    | trx_rows_modified | bigint(21) unsigned | NO | | 0 | |#事务更改的行数
    | trx_concurrency_tickets | bigint(21) unsigned | NO | | 0 | |#事务并发票数
    | trx_isolation_level | varchar(16) | NO | | | |#事务隔离级别
    | trx_unique_checks | int(1) | NO | | 0 | |#是否唯一性检查
    | trx_foreign_key_checks | int(1) | NO | | 0 | |#是否外键检查
    | trx_last_foreign_key_error | varchar(256) | YES | | NULL | |#最后的外键错误
    | trx_adaptive_hash_latched | int(1) | NO | | 0 | |#
    | trx_adaptive_hash_timeout | bigint(21) unsigned | NO | | 0 | |#
    +—————————-+———————+——+—–+———————+——-+
    
    
    
    • 当前出现的锁

    SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;

    root@127.0.0.1 : information_schema 13:28:38> desc innodb_locks;
    +————-+———————+——+—–+———+——-+
    | Field | Type | Null | Key | Default | Extra |
    +————-+———————+——+—–+———+——-+
    | lock_id | varchar(81) | NO | | | |#锁ID
    | lock_trx_id | varchar(18) | NO | | | |#拥有锁的事务ID
    | lock_mode | varchar(32) | NO | | | |#锁模式
    | lock_type | varchar(32) | NO | | | |#锁类型
    | lock_table | varchar(1024) | NO | | | |#被锁的表
    | lock_index | varchar(1024) | YES | | NULL | |#被锁的索引
    | lock_space | bigint(21) unsigned | YES | | NULL | |#被锁的表空间号
    | lock_page | bigint(21) unsigned | YES | | NULL | |#被锁的页号
    | lock_rec | bigint(21) unsigned | YES | | NULL | |#被锁的记录号
    | lock_data | varchar(8192) | YES | | NULL | |#被锁的数据
    +————-+———————+——+—–+———+——-+
    
    •  锁等待的对应关系

    SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

    root@127.0.0.1 : information_schema 13:28:56> desc innodb_lock_waits;
    +——————-+————-+——+—–+———+——-+
    | Field | Type | Null | Key | Default | Extra |
    +——————-+————-+——+—–+———+——-+
    | requesting_trx_id | varchar(18) | NO | | | |#请求锁的事务ID
    | requested_lock_id | varchar(81) | NO | | | |#请求锁的锁ID
    | blocking_trx_id | varchar(18) | NO | | | |#当前拥有锁的事务ID
    | blocking_lock_id | varchar(81) | NO | | | |#当前拥有锁的锁ID
    +——————-+————-+——+—–+———+——-+
    
    • 查看正在被锁定的的表

    show OPEN TABLES where In_use > 0;

    查看哪些表在使用中,

    • In_use列表示有多少线程正在使用某张表,
    • Name_locked表示表名是否被锁,这一般发生在Drop或Rename命令操作这张表时。

    所以这条命令不能帮助解答我们常见的问题:当前某张表是否有死锁,谁拥有表上的这个锁等。

    • 查看进程状态,通过此命令可以查看哪些sql在等待锁

    show processlist;

    • 杀死进程

    kill 线程ID

     

     

    参考来源: http://daizj.iteye.com/blog/2247725

    展开全文
  • 锁定老帖子 主题:oracle查看锁表进程,杀掉锁表进程 精华帖 (0) :: 良好帖 (0) :: 新手帖 (8) :: 隐藏帖 (0) 作者 正文 xiarilian12等级: 初级会员性别: 文章: 8积分: 40来自: 西安  发表时间...
    精华帖 (0) :: 良好帖 (0) :: 新手帖 (8) :: 隐藏帖 (0)
    作者 正文
       发表时间:2010-01-15  
    查看锁表进程SQL语句1: 
    select sess.sid, 
        sess.serial#, 
        lo.oracle_username, 
        lo.os_user_name, 
        ao.object_name, 
        lo.locked_mode 
        from v$locked_object lo, 
        dba_objects ao, 
        v$session sess 
    where ao.object_id = lo.object_id and lo.session_id = sess.sid; 

    查看锁表进程SQL语句2: 
    select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID; 

    杀掉锁表进程: 
    如有記錄則表示有lock,記錄下SID和serial# ,將記錄的ID替換下面的738,1429,即可解除LOCK 
    alter system kill session '738,1429'; 
     
       发表时间:2010-01-26  
    Oracle有自己的进程管理策略,很多情况下杀进程往往不能即使生效,可以加alter system kill ... immediately 试试
    0  请登录后投票
     
       发表时间:2010-01-28  
    不错,不过之间手头已经有一份一模一样的,能注明下转载地么
    0  请登录后投票
     
       发表时间:2010-01-29  
    还是应该找到锁表的原因,从根源上解决避免这个问题产生。

    展开全文
  • mysql查看锁表情况与解决锁

    千次阅读 2020-10-20 11:47:22
    1.查看那些住了: show OPEN TABLES where In_use > 0; 2.查询正在进行的事务: SELECT * FROM information_schema.INNODB_TRX 3.删除长时间没有释放的事务 kill 线程id

    1.查看那些表被锁住了:

    show OPEN TABLES where In_use > 0;

     

    2.查询正在进行的事务:

    SELECT * FROM information_schema.INNODB_TRX

     

    3.删除长时间没有释放的事务

    kill  线程id

    展开全文
  • 作者: hkebao 时间: 2010-05-31 20:25:00shell>mysqlbinlog log-file使用mysqldumpslow命令获得日志中显示的查询摘要来处理慢查询日志, 例如:[zzx@bj37 data]$ mysqldumpslow bj37-slow.log一.1获 取等待情况...
    作者: hkebao  时间: 2010-05-31 20:25:00
    shell> mysqlbinlog log-file
    使用mysqldumpslow命令获得日志中显示的查询摘要来处理慢查询日志, 例如:
    [zzx@bj37 data]$ mysqldumpslow bj37-slow.log

    一.1 获 取锁等待情况
    可以通过检查 table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争夺:
    mysql> show status like 'Table%';
    +----------------------------+----------+
    | Variable_name | Value |
    +----------------------------+----------+
    | Table_locks_immediate | 105 |
    | Table_locks_waited | 3 |
    +----------------------------+----------+
    2 rows in set (0.00 sec)
    可以通过检查 Innodb_row_lock状态变量来分析系统上的行锁的争夺情况:
    mysql> show status like 'innodb_row_lock%';
    +----------------------------------------+----------+
    | Variable_name | Value |
    +----------------------------------------+----------+
    | Innodb_row_lock_current_waits | 0 |
    | Innodb_row_lock_time | 2001 |
    | Innodb_row_lock_time_avg | 667 |
    | Innodb_row_lock_time_max | 845 |
    | Innodb_row_lock_waits | 3 |
    +----------------------------------------+----------+
    5 rows in set (0.00 sec)
    另外,针对Innodb类型的表,如果 需要察看当前的锁等待情况,可以设置InnoDB Monitors,然后通过Show innodb status察看,设置的方式是:
    CREATE TABLE innodb_monitor(a INT) ENGINE=INNODB;
    监视器可以通过发出下列语句来被停止:
    DROP TABLE innodb_monitor;
    设置监视器后,在show innodb status的显示内容中,会有详细的当前锁等待的信息,包括表名、锁类型、锁定记录的情况等等,便于进行进一步的分析和问题的确定。打开监视器以后,默 认情况下每15秒会向日志中记录监控的内容,如果长时间打开会导致.err文件变得非常的巨大,所以我们在确认问题原因之后,要记得删除监控表以关闭监视 器。或者通过使用--console选项来启动服务器以关闭写日志文件。


    如果是root帐号,你能看到所有用户的当前连接。如果是其它普通帐号,只能看到自己占用的连接。 
    show processlist;只 列出前100条,如果想全列出请使用show full processlist; 
    mysql> show processlist;(非常管用哦)

    转载于:https://blog.51cto.com/5iwww/340985

    展开全文
  • ORACLE 处理长时间锁表

    千次阅读 2013-11-28 11:02:51
    查看锁表进程SQL语句1:  select sess.sid,   sess.serial#,   lo.oracle_username,   lo.os_user_name,   ao.object_name,   lo.locked_mode   from v$locked_object lo,   dba_objects ao,...
  • oracle中怎样查看一个是否被别的用户在使用_百度知道 1个回答 - 提问时间: 2011年02月24日 [专业]答案:selects.*fromv$locked_objectl,dba_objectso,v$sessions,v$processpwherel.object_id=o.object_idandl....
  • Infinidb锁表处理

    2016-08-09 11:49:04
    1、查看锁表情况  ./viewtablelock  根据显示的PID, 查看对应的进程, ps aux |grep xxx  如果判断进程运行时间过长存在异常,则 kill xxx 或 kill -9 xxx(强制关闭) 2、./cleartablelock  ...
  • MySQL锁表问题处理

    2021-02-22 14:32:36
    mysql中锁表导致的报错可以找到正在执行的导致锁表的进程,kill 掉进程即可解决。 查看当前正在执行的的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; 一般情况下长期处于RUNNING状态的进程基本就是导致...
  • mysql锁表问题

    2017-07-20 11:51:30
    在删除一个的unique索引,保存时,sqlyog总是长时间未响应,关闭了重新试了好几次皆是如此,问了一下同事,才明白是了,那么该如何解决并成功删除索引呢? 1、查看表是否被 show open tables when In_use...
  • 数据库锁表问题

    2014-03-12 11:17:02
    如有些系统,从业务逻辑上分析是无需锁表的,如客户关系管理系统,自己的用户只能自己查看修改,其它人没有权限查看修改,也就不可能出现多人同时修改同一条客户信息,所以无需考虑锁表的问题。  当会出现多
  • show processlist找出执行时间最长的进程 show [full] processlist; 展示属于当前用户的线程,如果当前用户有 process privilege,那么会展示所有线程。 如果不加full,只显示前100条;show processlist展示的线程不...
  • 查看表是否被锁: 直接在mysql命令行执行: show engine innodb status\G。 查看造成死锁的sql语句,分析索引情况,然后优化sql. ... 这个语句记录当前锁表状态 2.查询进程show processlist 查询表被
  • MySQL锁表等待的原因

    2019-08-06 10:42:11
    查看当前数据库锁表的情况 SELECT * FROM information_schema.INNODB_TRX; 省略 了 trx_前缀 ,例子 wait_started (是trx_wait_started) wait_started: 2018-07-16 16:25:17 //锁等待开始的时间,16:25开始...
  • GreenPlum锁表经历

    千次阅读 2020-06-03 15:01:14
    查看了GP集群并未发现异常。于是继续追查,从pg_log中看到有一个sql执行了9000+s。时间点也很吻合。 回忆了一下在下班前有分析数据库的数据倾斜,使用的是官方手册中的这两个view gp_skew_coefficients gp_skew_...
  • 通过字段查看锁表者的操作信息 SESSION_ID :需要在v$session表中查看的 sid 值,我查到的值为478 ORACLE_USERNAME :锁表者使用的oracle账号 OS_USER_NAME:锁表这操作系统的用户名称 (2)通过上述信息锁定到...
  • MSSQL 锁表处理

    千次阅读 2018-01-11 22:30:55
    1. 查看当前事务执行时间 SELECT a.session_id , a.transaction_id , b.name , b.transaction_begin_time , DATEDIFF(MINUTE, b.transaction_begin_time, GETDATE()) '耗时(分)' , b
  • 一次开发人员直接在数据库服务器上做...询问操作过程知道了是由锁表造成,最终处理;本文只是模拟锁表处理过程,下次遇到相同问题可以快速处理。 1. 查看数据库的等待事件 如果不清楚原因,可以通过先通过等待事件...
  • MYSQL

    万次阅读 2018-08-02 11:13:34
    几番思考,怀疑是不是锁表了,因为在之前我强制断开tomcat服务,当时有个任务正在执行查询写入操作,此表数据量又较高需要一定时间。 暴力解决方式 重启MYSQL(重启解决问题利器,手动滑稽) 查看表情况: ...
  • SELECT SESS.SID, SESS.SERIAL#, LO.ORACLE_USERNAME, LO.OS_USER_NAME, AO.OBJECT_NAME 被对象名, LO.LOCKED_MODE 模式, sess.LOGON_TIME 登录数据库时间, 'ALTER SYSTEM KILL SESSION ''' || SESS.SID || ','|...
  • 内存溢出与数据库锁表的问题

    千次阅读 2013-09-10 23:11:57
    内存溢出与锁表则不然,一般现象是操作一般时间后系统越来越慢,直到死机,但并不能明确是在什么操作上出现的,发生的时间点也没有规律,查看日志或查看数据库也不能定位出问题的代码。 更严重的是内存溢出与数据库...
  • 内存溢出与锁表则不然,一般现象是操作一般时间后系统越来越慢,直到死机,但并不能明确是在什么操作上出现的,发生的时间点也没有规律,查看日志或查看数据库也不能定位出问题的代码。 更严重的是内...
  • 内存溢出与锁表则不然,一般现象是操作一般时间后系统越来越慢,直到死机,但并不能明确是在什么操作上出现的,发生的时间点也没有规律,查看日志或查看数据库也不能定位出问题的代码。 更严重的是内存溢出与数据库...
  • 某日,生产环境上的用户表突然无故锁表,原以为只是偶发的bug。所以第一时间想到的解决方案简单粗暴:重启数据库(service mysqld restart)。问题得以解决。 10min后,该表再次锁表。终于意识到问题并没有那么简单...
  • 在执行Update后未响应(锁表)

    千次阅读 2019-04-29 20:59:49
    1.在对数据进行update操作时,有时执行的时间很长,还没有响应,大多是因为你在update后没有立即提交,又进行了其他操作,导致了锁表。 2.查看那些在对表进行操作 SELECT vs.sid, vs.serial# FROM v$locked_object...
  • mysql数据库中查询是否被

    千次阅读 2019-09-03 23:20:51
    查看表是否被:直接在mysql命令行执行:show engine innodb status\G。查看造成死锁的sql语句,分析索引情况,然后优化sql.然后show processlist,查看造成死锁占用时间长的sql语句。show status like ‘%lock%。 ...
  • Oracle数据库与解锁

    千次阅读 2015-09-08 13:32:13
    本人小菜鸟,今天在项目中遇到了一个令我费解的问题,就是我之前写的操作数据的方法全部都不能用了,例如保存、修改、删除全部都不能用了;打断点进去一步一步走发现在操作数据的时候出的问题...1、首先查看数据库被

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 417
精华内容 166
关键字:

查看锁表时间