摘自:http://blog.chinaunix.net/uid-31401119-id-5781305.html

1  Flush tables简介

官方手册中关于Flush tables的介绍, Closes all open tables, forces all tables in use to be closed, and flushes the query cache. FLUSH TABLES also removes all query results from the query cache, like the RESET QUERY CACHE statement.其解析就是关闭所有已打开的表对象,同时将查询缓存中的结果清空。就是说Flush tables的一个效果就是会等待所有正在运行的SQL请求结束。

因为,SQL语句在执行前,都会打开相应的表对象,如select * from t1语句,会找到t1表的frm文件,并打开表内存对象。为了控制表对象使用的内存空间和其他资源,MySQL会隐式(后台表对象管理线程)或显式(flush tables等)来关闭已打开但并没有使用的表对象。

然而,正在使用的表对象是不能关闭的(如SQL请求仍在运行),因此,Flush Tables操作会被正在运行的SQL请求阻塞。

2  Flush tables影响

1)flush tables会等待正在运行的所有语句执行结束,即使运行的是查询请求;

2)如果flush tables等待SQL请求操作的表集合为{tables},这里的tables组合应该是当前正在有sql在运行的,已经打开的表,同一个库中,没有sql运行的表是不计算在内,因此 若 库star中有3张表,tx1和tx2被打开了,,的若有新请求操作{tables}中的任意一表,这些请求都会阻塞(即使是普通查询),如会话3;

3)如果其他会话新请求操作{tables}外的其他表,不会被阻塞,如会话4。

从此可知,flush tables操作可认为是{tables}所有表的表级排他锁,会阻塞其他会话关于{tables}表上的所有操作。假设一个大查询或长事务过程中(如会话1)执行flush tables操作,那么flush tables会等待长事务的结束(如会话1),同时阻塞关于{tables}的新请求。

3 Flush tables with read lock

Flush tables with read lock是另一个常见的操作,与Flush tables的作用是一样的,同样会等待所有正在运行的SQL请求结束,只是增加了一个全局读锁,即阻塞所有库所有表的写操作,直到unlock tables操作完成。

1)与flush tables一样,flush tables with read lock会等待正在运行的所有语句执行结束。

2)如果flush tables with read lock等待SQL请求操作的表集合为{tables},若有新请求操作{tables}中的任意一表,这些请求都会阻塞。

a)    如果是查询请求,在flush tables with read lock结束后就可执行。

b)    如果是插入、更新等写请求,必须等待unlock tables释放读锁。

3) 如果其他会话新请求操作{tables}外的其他表,则

a)    如果是查询请求,不会被阻塞。

b)    如果是写请求,必须等待unlock tables释放读锁

因此,flush tables with read lock操作是{tables}所有表的表级排他锁,同时是库级读锁,会阻塞库上所有写操作,直到执行unlock tables。其影响面比flush tables更大。也就是比flush tables多一点影响,阻塞了{tables}之外的表的写操作,不影响其读操作,只有unlock tables之后,释放了这个对库的全局读锁之后,才可以写。

4 一致性备份的问题

一般情况下,很少会主动使用flush tables和flush tables with read lock操作。更多使用这两个命令是mysqldump进行数据备份的时候。如果使用mysqldump进行一致性备份时,一般指定了--master-data和--single-transaction这两个参数,那么在备份操作执行前,先执行flush tables和flush tables with read lock这两个命令,以获得此一致性读的binlog位置。

获得binlog位置的过程为:

1)    flush tables操作是等待正在运行的所有操作结束;

2)    flush tables with read locks是为了加 库级全局读锁,禁止写操作;

3)    通过show master status获得此时binlog位置;

4)    unlock tables释放全局读锁,允许写请求。

先执行flush tables而不是直接执行flush tables with read locks的原因是,flush tables阻塞其他请求的可能性更少。假设flush tables的过程中出现大查询,从前面的分析知道,仅影响其他会话关于{tables}表的请求,而不像flush tables with read locks会阻塞所有写操作。

然而,以上操作只是大大减少了全局读锁的影响范围,如果在flush tables和flush tables with read locks之间出现大事务,还是有可能会出现所有写操作hang住的情况。因此,必须谨慎使用一致性备份的功能。

另外,经测试,如果出现flush tables阻塞其他会话的情况,如会话3、会话5的操作,是不会记录慢查询日志的,但事实上,应用程序可能是得不到迅速的响应了。

mysql flush tables_MySQL 清理缓存—flush tablesFlush tables的影响相关推荐

  1. mysql中flush什么意思_mysql - Flush语法

    今天仔细看了下Flush语法,同时在工作中也经常使用Flush命令,在这儿汇总下.MySQL的FLUSH句法(清除或者重新加载内部缓存) FLUSH flush_option [,flush_opti ...

  2. MySQL优化之查询缓存(mysql8官方已经废弃这个功能)

    对于缓存,一般人想到的是 redis.memcache 这些内存型的缓存. 但是实际上 mysql 也提供了缓存,mysql 里面的缓存是查询缓存,可以把我们查询过的语句缓存下来,下一次查询的时候有可 ...

  3. Hibernate,Session清理缓存时间点

    当应用程序调用org.hibernate.Transaction的commit()的时候,commit()方法先清理缓存,然后再向数据库提交事务. 当应用程序显示调用Session.flush()方法 ...

  4. maven清理缓存_mybatis源码初探【二】缓存的实现

    前言 上一篇文章中我们从整体出发,对mybatis的配置.启动流程进行了简单的解析说明 这次我们准备深入学习mybaits的缓存原理以及使用 目录 为了提升一丢丢阅读体验,在文章最前面显示这鸡肋的目录 ...

  5. Hibernate:Session_Flush清理缓存

    Session_Flush 概念 使用方法 基本使用 注意事项 概念 flush是Session中定义的方法. 作用: 清理缓存(清空临时集合中的数据). 使用方法 考虑到flush方法的特性,我们在 ...

  6. 清理linux的缓存文件,linux系统清理缓存教程

    今天用spot on light 查了一下开发服务器的内存占用,只剩下60MB,用下面的方法就可以实现清空缓存频繁的文件访问会导致系统的Cache使用量大增.接下来是小编为大家收集的linux系统清理 ...

  7. android studio 导入库提示失败的处理方法以及androidstudio 清理缓存的方法

    错误提示如下图 方法1: 导入库的时候时候回提示失败,原因呢就是远程的库没有下载过来,这个时候需要清理下缓存在重新打开就可以了 清理缓存的方法如下图 如果换没有好那么看看方法二 去build下看看ma ...

  8. iphone清理缓存小技巧_苹果手机清理垃圾小技巧!小内存也不发愁

    阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到文章了.每天都会有分享,都是免费订阅,请您放心关注.注图文来源网络,侵删 时至 ...

  9. 如何防止android app被误删除,如何避免手机清理缓存时误删了重要文件【注意事项】...

    如何避免手机清理缓存时误删了重要文件? 缓存只是内存中少部分数据的复制品,所以CPU到缓存中寻找数据时,也会出现找不到的情况(因为这些数据没有从内存复制到缓存中去),这时CPU还是会到内存中去找数据, ...

  10. Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理

    基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...

最新文章

  1. 俄罗斯自研Elbrus CPU参数曝光,CEO年近九旬仍未退休
  2. 可惜了,你们只看到“双马会”大型尬聊
  3. 【循序渐进学Python】7.面向对象的核心——类型(上)
  4. K-Means算法理论及Python实现
  5. MaxComputeSql性能调优
  6. 凝聚式层次聚类 java_凝聚法层次聚类之ward linkage method
  7. html中两个div垂直居中对齐,在div中垂直居中的两个元素
  8. 突破性能极限,阿里云神龙最新ASPLOS论文解读
  9. iOS推送机制下AppDelegate中代理函数执行顺序
  10. WinCE设备仿真器+虚拟串口+GPS模拟器搭建开发测试环境
  11. 编译orge1.7.0
  12. 你有多久没有看过星星
  13. python画旋转六边形
  14. 人生的镜像-菌群人生,从出生到死亡的菌群演替
  15. 集线器,路由器,交换机的作用和区别是什么以及如何区分?
  16. 最详细的Android图片压缩解释
  17. JS如何手写new(一看就懂)
  18. python中pass的含义_python中pass语句意义与作用(实例分析)
  19. 【mud】npc对话函数与自动对话匹配(gongsun.c)
  20. 常用软件开发模型的介绍

热门文章

  1. 2021高考数学成绩查询,2021八省联考成绩相继公布!数学平均60多分,八个省市本科录取率曝光...
  2. 主页被锁定为 hao.360.cn
  3. 计算机课程设计心得,课程设计心得体会450字
  4. 上海名媛 -- 精致女孩的打拼生活
  5. 明解C语言中级篇练习代码------第八章
  6. kubernetes更换IP地址重新初始化master节点
  7. shareSdk 新浪微博的登录分享测试
  8. 分享几个边玩儿边学的游戏App,学习从未如此轻松有趣
  9. 相机外部参数—世界坐标、相机坐标、物体坐标变换
  10. 自建dnspod解析服务器,利用DNSPOD配置智能解析双线服务器