首页 > 其他分享 >软件测试 | 什么时候使用表锁

软件测试 | 什么时候使用表锁

时间:2023-08-21 15:00:40浏览次数:45  
标签:TABLES 事务 MySQL 死锁 InnoDB 使用 表锁 软件测试

对于InnoDB表,在绝大部分情况下都应该使用行级锁,因为事务和行锁往往是我们之所以选择的InnoDB表的理由。但在个别特殊事务中,也可以考虑使用表级锁。

第一种情况是:事务需要更新大部分或全部数据,表又比较大,如果使用默认的行锁,不仅这个事务执行效率低,而且可能造成其他事务长时间锁等待和锁冲突,这种情况下可以考虑使用表锁来提高该事务的执行速度。

第二种情况是:事务涉及多个表,比较复杂,很可能引起死锁,造成大量事务回滚。这种情况也可以考虑一次性锁定事务涉及的表,从而避免死锁、减少数据库因因事务回滚带来的开销。

当然,应用中这两种事务不能太多,否则,就应该考虑使用MyISAM表了。

在InnoDB下,使用表锁要注意以下两点。

(1)使用LOCK TABLES虽然可以给InnoDB加表级锁,但必须说明的是,表锁不是由InnoDB存取引擎层管理的,而是由其上一层——MySQL Server负责的,仅当autocommint=0、innodb_table_locks=1(默认设置)时,InnoDB层才能知道MySQL加的表锁,MySQL Server也才能感知到InnoDB加的行锁,这种情况下,InnoDB才能自动识别涉及表级锁的死锁;否则,InnoDB将无法自动检测并处理这种死锁。

(2)在用LOCK TABLES对InnoDB表加锁时要注意,要将AUTOCOMMIT设为0,否则MySQL不会给表加锁;事务结束前,不要用UNLOCK TABLES释放表锁,因为UNLOCK TABALES会隐含地提交事务;COMMIT或ROLLBACK并不能释放用LOCK TABLES加的表级锁,必须用UNLOCK TABLES释放表锁。正确的方式见如下语句:

例如,如果需要写表t1并从表t读,可以按照如下做:
SET AUTOCOMMIT=0;
LOCK TABLES t1 WRITE,t2 READ,....;
[do something with table t1 and t2 here];
COMMIT;
UNLOCK TABLES;

标签:TABLES,事务,MySQL,死锁,InnoDB,使用,表锁,软件测试
From: https://blog.51cto.com/u_15605684/7175353

相关文章

  • 使用 UCS(On-Premises) 管理您的GPU资源池,释放AI大模型算力潜能
    本文分享自华为云社区《使用UCS(On-Premises)管理您的GPU资源池,释放AI大模型算力潜能》,作者:云容器大未来。AI技术现状及发展趋势过去十余年,依托全球数据、算法、算力持续突破,人工智能全面走向应用,已成为社会生产生活的支柱性技术。2020年后,当自动驾驶、人脸识别等热门应用发......
  • 如何使用Siege进行压测?
    Siege是一个HTTP/HTTPS负载测试和基准测试工具,可以模拟多个用户同时访问一个URL。centos安装Siegesudoyuminstallepel-releasesudoyuminstallsiege使用siege模拟20个并发用户。siege-c20-r1http://your_api_endpoint_here/其中:-c20表示20个并发用户。-r1......
  • 使用JMeter模拟设备通过MQTT发送数据
    需求:需要一个工具能够支持MQTT协议发送各种不同的数据。目的:模拟小型温室设备反馈,搭建一个测试环境,根据测试的数据显示硬件的状态和数值。工具:JMeter环境:需要配置Java运行环境。操作步骤:1.下载JMeter运行包下载地址:https://jmeter.apache.org/download_jmeter.cgi,下载后可以解压......
  • Lnton羚通算法算力云平台如何在OpenCV-Python中使用cvui库创建复选框
    CVUI之复选框Pythonimportnumpyasnpimportcv2importcvuidefcheckbox_test():WINDOW_NAME='Checkbox-Test'checked=[False]#创建画布frame=np.zeros((300,400,3),np.uint8)#初始化窗口cvui.init(WINDOW_NAME)while......
  • 使用QGIS切片,使用Nginx反向代理本地瓦片,并在QGIS加载图层
    使用QGIS切片(以tif为例)新建QGIS工程(.qgz)将tif文件拖到图层区打开工具箱-->栅格工具-->生成XYZ瓦片(目录)设置参数:坐标范围、层级、瓦片格式、输出目录等,点击运行输出目录不选则默认会生成到C盘的临时目录运行完毕后记录出现这段文字,关闭对话框,点击右下角路径可以预览使用......
  • ElementUI中使用<el-row>自适应布局导致显示错乱
     错乱代码(部分):<el-row:gutter="5"><el-col:xs="24":sm="12":md="8":lg="6"v-for="(item,index)incaseList":key="index"> <img:src="baseUrl+item......
  • lumerical使用 MATLAB
    使用MATLAB创建矢量图https://optics.ansys.com/hc/en-us/articles/360034404034  使用MATLAB在现场图像上叠加矢量图https://optics.ansys.com/hc/en-us/sections/1500000909761-Examples   https://optics.ansys.com/hc/en-us/articles/360034923933......
  • 角度新奇!第一次看到这样使用MyBatis的,看得我一愣一愣的。
    你好呀,我是歪歪。这期给大家分享一个读者给我分享的一个关于MyBatis的“编程小技巧”,说真的,这骚操作,直接把我看得一愣一愣的。我更情愿叫它:坑你没商量之埋雷大法。Demo为了让你丝滑入戏,我还是先给你搞个Demo。因为要使用到MyBatis嘛,所以我们先搞两个表。一个表叫做p......
  • Android ContentProvider使用
    近来使用下项目上用的不多的东西在自己的app,记录下遇到的问题:项目地址:码云在AndroidManifest.xml添加provider时,权限问题。添加android:permission=”…”,这样控制其他app访问权限使app更加安全,permission是允许读写权限,writepermission是允许写权限,readpermission是允许读权限......
  • 使用MD5算法和sha512sum校验和检验文件完整性
    目录一.前言二.MD5算法简介三.什么是校验和四.使用MD5算法和sha512sum校验和检验文件完整性五.总结一.前言在我们日常生活中,无论是下载文件、传输数据还是备份重要信息,如何确保数据的完整性始终是一个不能忽视的问题。本文将向大家介绍如何使用MD5算法和sha512sum校验和来进行文......