• mysql锁表处理方法


    1.Mysql锁概述

    锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MyISAM和MEMORY存储引擎采用的是表级锁;BDB存储引擎采用的是页面锁,但也支持表级锁;InnoDB存储引擎既支持行级锁,也支持表级锁,但默认情况下是采用行级锁。

    2.锁表及解锁

    客户端连接Mysql时会产生一个connection,当多个连接(数据库连接)同时对一个表的数据进行更新操作,那么速度将会越来越慢,执行一段时间后将出现数据表被锁的现象,从而影响到其它的查询及更新。尤其当我们使用循环的时候更加容易出现锁表这种情况,导致其它连接无法读写此表。一旦遇到无法对某张表进行读写操作时,而其它表可以正常读写,就要检查是不是该表被锁了,如果被锁住就要解锁,解锁方式有以下两种。

    • show processlist
      该命令是显示用户正在运行的线程,默认只显示前100条数据,如果要显示全部线程,执行show full processlist。需要注意的是只有root用户能看到所有正在运行的线程外,其他用户都只能看到自己正在运行的线程,看不到其它用户正在运行的线程。show processlist 显示的信息都是来自MySQL系统库information_schema中processlist表,执行select * from information_schema.processlist语句也能显示相同的数据。显示结果如图:

      参数解释如下:
      Id:就是这个线程的唯一标识,当我们发现这个线程有问题的时候,可以通过kill命令将这个线程杀掉。
      User: 就是指启动这个线程的用户。
      Host: 记录了发送请求的客户端的 IP 和 端口号。通过这些信息在排查问题的时候,我们可以定位到是哪个客户端的哪个进程发送的请求。
      DB: 当前执行的命令是在哪一个数据库上。如果没有指定数据库,则该值为NULL。
      Command: 是指此刻该线程正在执行的命令。
      Time: 表示该线程处于当前状态的时间。
      State: 线程的状态。
      Info: 线程执行的语句。
      需要关注的是state列的值,不同值如下:
      Checking table:正在检查数据表。
      Closing tables:正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。
      Connect Out:从服务器正在连接主服务器。
      Copying to tmp table on disk:由于临时结果集大于tmp_table_size,正在将临时表从内存存储转为磁盘存储以此节省内存。
      deleting from main table:服务器正在执行多表删除中的第一部分,刚删除第一个表。
      deleting from reference tables:服务器正在执行多表删除中的第二部分,正在删除其他表的记录。
      Locked:被其他查询锁住了。
      Sending data:正在处理SELECT查询的记录,同时正在把结果发送给客户端。
      Sleeping:正在等待客户端发送新请求。
      如果发现state值为Locked,找到Id值,Kill掉就行。

    • select * from information_schema.innodb_trx

      需要看trx_rows_locked和trx_mysql_thred_id,如果trx_rows_locked里的值不为0,说明有阻塞数据,执行Kill trx_mysql_thred_id。

    烦请各位看官觉得有用就给个推荐吧!

  • 相关阅读:
    unity的#pragma strict,#pragma downcast等指令分享
    Unity3d 添加多相机后编译警告
    Invoke计时器
    unity3d UI自动适合屏幕分辨率
    实现卷轴效果的脚本
    .unity3d格式的导出与加载
    Linux 网络编程
    姿态解算基本完成,程序编写笔记
    验证网络上四元数的正确性
    2440 模拟IIC 可以读取 L3G4200D ,ADXL345
  • 原文地址:https://www.cnblogs.com/yqzc/p/12491987.html
Copyright © 2020-2023  润新知