SQL性能优化常见措施(Lock wait timeout exceeded)
SQL性能优化常见措施
目 录
1、mysql中explain命令使用
2、mysql中mysqldumpslow的使用
3、mysql中修改my.ini配置文件记录日志
4、mysql中如何加索引
5、需求分析中考虑程序性能及配置事务
6、解决行思索的常用命令
一、mysql中explain命令使用
使用explain显示的信息可以帮助选择更好的索引和写出更优化的查询语句。MySQL的EXPLAIN语法常运行在SELECT语句上。
EXPLAIN SELECT * FROM assets_check_outer_order_res WHERE id = '1468289'
该语句为sql生成一个执行计划Query Execution Plan(QEP)。explain用于解释sql的执行计划,后边的sql不执行。在查询得到的结果中,possible_keys表示应用在这张表中的索引;
EXPLAIN SELECT * FROM assets_check_outer_order_res GROUP BY id
当前没有加任何索引,如果数据量大的话,查询时间明显会很长
EXPLAIN SELECT * FROM assets_check_outer_order_res USE INDEX (id) GROUP BY id
使用上述语句,添加了索引之后,查询速度明显变快很多。同时可以通过rows显示的行数,可以看到查询得到了很大成都上的优化。数据库具体是如何使用索引来执行的,有待进一步研究。
二、mysql中mysqldumpslow的使用
如果不知道是哪个sql慢,就开启mysql的慢查询日志。对记录的日志文件用mysql安装目录下的bin目录下的 mysqldumpslow查看。具体命令是 mysqldumpslow -s c -t 10 /path/to/slow.log。 可以提取出top10慢的sql语句模式。这样就找到了哪些语句慢。
- -s, 是表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒叙;
- -t, 是top n的意思,即为返回前面多少条的数据;
- -g, 后边可以写一个正则匹配模式,大小写不敏感的;
使用mysqldumpslow命令可以非常明确的得到各种我们需要的查询语句,对MySQL查询语句的监控、分析、优化是MySQL优化的第一步,也是非常重要的一步。
三、mysql中修改my.ini配置文件记录日志
Windows下开启MySQL慢查询,MySQL在Windows系统中的配置文件一般是是my.ini找到[mysqld]下面加上
log-slow-queries = F:\MySQL\log\mysqlslowquery.log和long_query_time = 2。
log-slow-queries = F:\MySQL\log\mysqlslowquery.log为慢查询日志存放的位置,一般这个目录要有MySQL的运行帐号的可写权限,一般都将这个目录设置为MySQL的数据存放目录;long_query_time=2中的2表示查询超过两秒才记录.
log-slow-queries=/data/mysqldata/slowquery.log long_query_time=2 log-queries-not-using-indexes 添加log-queries-not-using-indexes参数,表示记录下没有使用索引的查询
四、mysql中如何加索引
通过SQL来添加索引,或者Navicat视图中添加索引。
五、需求分析中考虑程序性能及配置事务
@Transcational(progration=Progration.supports rollback=Exception.class)
六、解决行思索的常用命令
如果在某一个业务逻辑中,需要更新多个表,涉及到多次与数据库中表的修改交互操作。那么,很可能在操作表中同一行数据的时候出现lock wait timeout exceeded异常,这个异常产生的原因是前一个JDBC事务占用改行的锁,后一个事务也一直试图去占用该行的锁,后一个事务一直去占用,等到好久还是没有拿到这个锁的话,就会出现这个异常,出现了这种死锁的情况。,Mysql的 InnoDB存储引擎是支持事务的,事务开启后没有被主动Commit。导致该资源被长期占用,其他事务在抢占该资源时,因上一个事务的锁而导致抢占失败!因此出现锁等待超时。
当在本机安装好mysql之后,会发现本地默认的有一个information_schema数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。它们实际上是视图,而不是基本表。
快捷键:选中当前行:shift+Home 或 Shift + End 执行当前行:ctrl + shift + RSHOW PROCESSLIST SHOW FULL PROCESSLIST SELECT * FROM information_schema.`PROCESSLIST` 当死锁发生时,用于显示当前跟数据连接的所有线程kill 7658932 kill 线程ID:7658932,即可以杀死死锁的线程SHOW CREATE TABLE assets_check_temp 显示assets_check_temp建表的SQL语句,同DDL效果SHOW TABLE STATUS LIKE 'assets_check_%' SHOW ENGINE INNODB STATUS 显示了指定表的结构,创建时间、表的总列数SELECT * FROM information_schema.INNODB_TRX SELECT * FROM information_schema.INNODB_LOCKS SELECT * FROM information_schema.INNODB_LOCK_WAITS 分别表示:当前运行的所有事务、当前出现的锁、锁等待的对应关系;trx是事务transaction的缩写。当有JDBC事务时,第一个表有数据。当产生锁等待的时候,第二个表中有数据。可以用于排查错误。START TRANSACTION;UPDATE assets_check_temp SET id = '1' WHERE id = '1468300' 开启了了一个JDBC事务
附:参考博客
1. http://my.oschina.net/quanzhong/blog/222091 详细解释了innodb_trx innodb_locks innodb_lock_waits 三个表各个字段的含义。
2.
SQL性能优化常见措施(Lock wait timeout exceeded)相关推荐
- mysql lock wait_Mysql错误: Lock wait timeout exceeded 解决办法
一.临时解决办法: 执行mysql命令:show full processlist; 然后找出插入语句的系统id 执行mysql命令:kill id 或 首先,查看数据库的进程信息: show ful ...
- SQL性能优化技巧,常见优化10经验,数据库查询好慢,还能怎么办
我熟练应用ctrl c和ctrl v 开发curd代码好多年了. mysql查询为什么会慢,关于这个问题,在实际开发经常会遇到,而面试中,也是个高频题. 遇到这种问题,我们一般也会想到是因为索引. 那 ...
- 做 SQL 性能优化真是让人干瞪眼
很多大数据计算都是用 SQL 实现的,跑得慢时就要去优化 SQL,但常常碰到让人干瞪眼的情况. 比如,存储过程中有三条大概形如这样的语句执行得很慢: select a,b,sum(x) from T ...
- 如何进行正确的SQL性能优化
在SQL查询中,为了提高查询的效率,我们常常采取一些措施对查询语句进行SQL性能优化.本文我们总结了一些优化措施,接下来我们就一一介绍. 1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE ...
- 想让DBA瞬间崩溃,那就让他去做SQL性能优化
本文分享自华为云社区<做 SQL 性能优化真是让人干瞪眼>,作者: 石臻臻的杂货铺 . 很多大数据计算都是用 SQL 实现的,跑得慢时就要去优化 SQL,但常常碰到让人干瞪眼的情况. 比如 ...
- MySQL高性能实战——part3——分析SQL,定位慢SQL(性能优化的前提)
前言: 此文借鉴<MySQL高性能>一书,还有MySQL官方文档,笔者将通过自身的一些实战经验和阅读习惯对本书进行一个总结,整理,归纳出企业级开发中常用的优化案列和部分概念!! 官方文 ...
- SQL性能优化15个小技巧
SQL性能优化15个小技巧 前言 sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到. 如果某天你负责的某个线上接口,出现了性能问题,需要做优化.那么你首先想到的很有 ...
- Sql性能优化看这一篇就够了
前言: 一个优秀开发的必备技能:性能优化,包括:JVM调优.缓存.Sql性能优化等.本文主要讲基于Mysql的索引优化. 首先我们需要了解执行一条查询SQL时Mysql的处理过程: 其次我们需要知道, ...
- 高效sql性能优化极简教程
一,sql性能优化基础方法论 对于功能,我们可能知道必须改进什么:但对于性能问题,有时我们可能无从下手.其实,任何计算机应用系统最终队可以归结为: cpu消耗 内存使用 对磁盘,网络或其他I/O设备的 ...
最新文章
- L1正则化为什么又叫做稀疏因子?
- R之ddlpy函数学习[转载]
- 上海内推 | 极氪智能科技百万年薪「氪学家」项目招聘规控/感知算法工程师
- KMP 算法 学习 整理
- 【研究】Joomla二阶注入
- mysql相关知识点_MySQL相关知识点
- Linux下解压rar格式文件
- Linux LVM的PV操作
- 电子签章在商业银行的应用取得重要进展,“6类”场景深化应用
- 运筹系列10:线性规划开源软件GLPK和PyMathProg
- python实验原理_python实验报告5
- 非IE浏览器(谷歌、火狐、Edge)使用IE打开指定链接
- 概率论与数理统计学习笔记——第7讲——连续型随机变量(2.5.4指数分布及其与泊松分布的关系)
- 智力答题源码php,php儿童智力测评系统
- 面向过程(PO)和面向对象(OO)的区别(思维导图)
- 测试用例设计——WEB通用测试用例(转)
- python数据类型与数据结构--内置数据类型
- android 对短信的操作(伪造信息)
- caffe ssd中输入图片大小对于内存使用和运行时间的影响
- 别在看不起女程序媛了,一个高颜值女程序媛的日常
热门文章
- L1-024. 后天-PAT团体程序设计天梯赛GPLT
- 未定义标识符 stringc/c++(20)_拓展巩固练习(2020.5.20)
- 关于perl中中文乱码的解决办法
- codevs 5965 [SDOI2017]新生舞会
- HTTP协议与HTTPS的区别
- koa2+koa-views示例
- [Everyday Mathematics]20150225
- NFS+rsync+inotify镜像
- [LeetCode] Surrounded Regions, Solution
- centos7永久修改ip地址