栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mysql加写锁不生效

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mysql加写锁不生效

1. 背景

  需要验证:程序查询mylsq失败后执行流程是否符合预期。
  待测试的程序:1.定时从mysql中读取数据;2.程序已经配置读写超时。

验证过程:
  程序启动之后,添加写锁,下一次查询mysql应该失败,会执行失败流程。发现添加写锁之后,还能正确读取数据。

2. 加锁/解锁

加锁:

  • locak table ‘table’ [read|write]

解锁:

  • unlock tables
3. 失效原因

加锁之后的表现:

  1. 程序中定时读取数据正常
  2. 当前窗口终端,能查询到数据
  3. 新开启的终端,查询数据阻塞

从表现看 1和2 在加锁前都有从db中读取过数据,3是在加锁之后开始读数据。推测和缓存有关。

查询发现有开启缓存:

MariaDB> show variables like "%query_cache%";
+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| have_query_cache             | YES      |
| query_cache_limit            | 1048576  |
| query_cache_min_res_unit     | 4096     |
| query_cache_size             | 33554432 |
| query_cache_strip_comments   | OFF      |
| query_cache_type             | ON       |
| query_cache_wlock_invalidate | OFF      |
+------------------------------+----------+

缓存会在数据更新之后失效,更新一下表数据,程序定时查询失败,符合预期。

4. 总结

  在需要对表加锁进行验证,如果加锁之后还能读到数据,失效的原因可能和开启缓存有关。解决办法,执行update或insert更新一下表。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1021269.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号