Mysql 清空缓存锁Flush Lock

清空缓存锁Flush Locks

flush table的功能是关闭所有打开的表,强制关闭所有正在使用的表,并刷新准备好的语句缓存。

这种操作需要用户拥有 FLUSH_TABLES、RELOAD权限。

flush tables在已经锁定表(对应LOCK TABLES ... READ语句)的情况下不能使用,刷新和锁定表一般用FLUSH TABLES tbl_name ... WITH READ LOCK语句。

在我们需要做备份时为了同时防止有新数据写入,那么备份时我们一般通过如下命令刷新并锁定表:FLUSH TABLES WITH READ LOCK;

该操作实现的功能即是关闭所有的表并通过全局读锁锁定所有数据库里的所有表。

而这里的flush lock即是在使用FLUSH TABLES语句时被获取的,它在语句执行期间会一直持续,除非是FLUSH TABLES添加WITH READ LOCK选项,因为在这种情况下共享(读)锁将被持有,直到锁显式释放。

执行ANALYZE table语句后会触发一个隐式的表刷新。

flush lock可通过参数锁等待超时时间(lock_wait_timeout)来设置,如果等待时间超过该参数还未获取锁则会放弃。如果通过kill杀死FLUSH TABLES语句也让锁自动放弃。然而由于mysql内部有个更低级的锁叫做表定义缓存(table definition cache)版本锁不会立即释放直至长时间运行的语句结束。这时解决锁问题的唯一办法就是杀掉长时间运行的语句对应的进程。

示意案例

-- Step1 连接1上执行按照id查询city的语句,这里sleep(180)秒只是为了让执行时间拉长。
SELECT *, SLEEP(180) FROM city WHERE ID = 1056-- Step2 连接2上执行按照id查询city的语句
FLUSH TABLES world.city-- Step3 连接3上执行按照id查询city的语句
SELECT * FROM world.city WHERE ID = 1055-- Step4 连接4上执行查看以上三个连接的会话信息。
SELECT thd_id, conn_id, state,
current_statement
FROM sys.session
WHERE current_statement IS NOT NULL
AND thd_id <> PS_CURRENT_THREAD_ID()/*
执行结果
thd_id  conn_id state   current_statement
48  9   User sleep  SELECT *, SLEEP(180) FROM city WHERE ID = 1056
50  11  Waiting for table flush FLUSH TABLES world.city
49  10  Waiting for table flush SELECT * FROM world.city WHERE ID = 1055
*/

这里我们通过sys.session来查看的结果,类似的也可以通过performance_shchema.threads或者命令show processlist查看。会话1里查看city表里id为1056的信息,会话2执行了刷新表操作,会话3执行查看city表里id为1055的信息,这是我们可以通过会话4里的系统表查看以上三个会话里的状态,可见会话2、3都是在“Waiting for table flush”即等待表刷新。

Mysql 死锁过程及案例详解之清空缓存锁Flush Lock相关推荐

  1. Mysql 死锁过程及案例详解之插入意向锁与自增锁备份锁日志锁Insert Intention Lock Auto-increment Lock Backup Lock Log Lock

    Mysql 插入意向锁与自增锁备份锁日志锁 插入意向锁Insert Intention Lock 插入意向锁Insert intention locks是记录级别的,它通过"INSERT&q ...

  2. Mysql 死锁过程及案例详解之记录锁与间隔锁Record Lock Gap Lock

    记录锁Record Lock与间隔锁GAP Lock 记录锁Record Lock 记录锁Record Locks又称为行锁,它同时包含索引和间隔锁.记录锁可以是共享锁也可能是排他锁.可以通过perf ...

  3. Mysql 死锁过程及案例详解之显式与隐式锁Explicit Table Lock Implicit Table Lock

    显式锁Explicit Table Lock与隐式锁Explicit Table Lock 显式锁Explicit Table Lock 显式表锁(Explicit Table Locks)即通过命令 ...

  4. Mysql 死锁过程及案例详解之元数据锁MetaData Lock

    Mysql数据锁MetaData Lock 元数据锁MetaData Lock 元数据锁MetaData Locks的主要作用是在执行查询或者发起事务时元数据结构受到保护,即不被修改. MetaDat ...

  5. Mysql 死锁过程及案例详解之用户自定义锁

    Mysql 用户自定义锁介绍 锁简介 当多个请求连接到数据库时,能保证同类查询执行时不相互冲突的机制即是锁.比如马路上的信号灯就是一个解决冲突的例子,在一定的时间内锁定了能通行的方向或者路线.MySQ ...

  6. mysql 之general_log日志开启详解以及清空

    General_log 详解 1.介绍 开启 general log 将所有到达MySQL Server的SQL语句记录下来. 一般不会开启开功能,因为log的量会非常庞大.但个别情况下可能会临时的开 ...

  7. wow mysql dbc_DBC中悲观锁介绍附案例详解

    DBC中悲观锁介绍附案例详解 了解下DBC中悲观锁: 代码如下: BDUtils 工具类: package JDBC; import java.sql.*; public class BDUtils ...

  8. mysql 自动截断_MySql中关于超长自动截断的案例详解

    这篇文章主要介绍了MySql超长自动截断实例详解的相关资料,这里通过实例来说明如何实现自动截断的功能,需要的朋友可以参考下 MySql超长自动截断实例详解 小伙伴问到一个问题,为啥在项目中调用插入或者 ...

  9. 数据湖架构Hudi(五)Hudi集成Flink案例详解

    五.Hudi集成Flink案例详解 5.1 hudi集成flink flink的下载地址: https://archive.apache.org/dist/flink/ Hudi Supported ...

最新文章

  1. Meta标签中的format-detection属性及含义
  2. unity 关闭自己脚本_unity中使用代码控制脚本的开启和关闭 enabled
  3. 低头编码的程序员们,你们颈椎不疼吗?
  4. 想多赚钱就要多培养自己脖子以上的能力
  5. seo关键词互点软件报价_舟山seo关键词优化软件
  6. 人脸检测(八)--HOG特征原理及实现
  7. Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition(SPP-net)
  8. 百分点感知智能实验室:语音识别技术发展阶段探究
  9. 2022高淇Java300集完整版
  10. 软件测试专业术语对照表
  11. 用树莓派做一个实时垃圾分类器|超实用!!
  12. 无法启用网络发现和文件共享或共享无法访问
  13. Revit二次开发——revit怎么给桥梁加钢筋
  14. 管理经济分析01:博弈论与经济学
  15. JAVA实验3:Java-MySQL实现银行转账系统
  16. Php设计模式之【适配器模式 Adapter Pattern】
  17. js dialer app分析,
  18. .NetCore源码阅读笔记系列之Security (一) Authentication AddCookie
  19. 时无英雄,使竖子成名!
  20. EPIC解决下载不稳定,蓝色块挡住绿色条

热门文章

  1. boost::spirit模块实现罗马数字解析器的测试程序
  2. boost::signals2模块thread_safe_signals 库替代线程模型的基本测试
  3. 一个简单的 Hello world! 例子使用 boost::mpi::group 和 boost::mpi::broadcast()
  4. boost::edge_list用法的测试程序
  5. boost::contract模块实现虚拟可选结果的测试程序
  6. DCMTK:OFStandard类的测试程序
  7. DCMTK:列出DICOM结构化报告文件的内容
  8. VTK:可视化算法之CutStructuredGrid
  9. VTK:可视化之ComplexV
  10. VTK:图片之ImageToPolyDataFilter