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 = ''
该语句为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 + R SHOW 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 = '' WHERE id = ''
开启了了一个JDBC事务
附:参考博客
1. http://my.oschina.net/quanzhong/blog/222091 详细解释了innodb_trx innodb_locks innodb_lock_waits 三个表各个字段的含义。
2.
SQL性能优化常见措施(Lock wait timeout exceeded)的更多相关文章
- SQL性能优化
引言: 以前在面试的过程中,总有面试官问道:你做过sql性能优化吗?对此,我的答复是没有.一次没有不是自己的错误,两次也不是,但如果是多次呢?今天痛下决心,把有关sql性能优化的相关知识总结一下,以便 ...
- 如何进行正确的SQL性能优化
在SQL查询中,为了提高查询的效率,我们常常采取一些措施对查询语句进行SQL性能优化.本文我们总结了一些优化措施,接下来我们就一一介绍. 1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE ...
- 如何进行SQL性能优化
在SQL查询中,为了提高查询的效率,我们常常采取一些措施对查询语句进行SQL性能优化.本文我们总结了一些优化措施,接下来我们就一一介绍. 1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE ...
- mysql 性能优化常见命令
mysql 性能优化常见命令: 一: 当发现mysql程序运行缓慢时,在排除sql主机问题之后,可以尝试在schema,table,和sql上进一步进行考查: 1:mysql> show ful ...
- Oracle SQL性能优化技巧大总结
http://wenku.baidu.com/link?url=liS0_3fAyX2uXF5MAEQxMOj3YIY4UCcQM4gPfPzHfFcHBXuJTE8rANrwu6GXwdzbmvdV ...
- java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction问题 1.问题描述 执行了几条update语句 ...
- SQL性能优化技巧
作者:IT王小二 博客:https://itwxe.com 这里就给小伙伴们带来工作中常用的一些 SQL 性能优化技巧总结,包括常见优化十经验.order by 与 group by 优化.分页查询优 ...
- 想让DBA瞬间崩溃,那就让他去做SQL性能优化
摘要:很多大数据计算都是用 SQL 实现的,跑得慢时就要去优化 SQL,但常常碰到让人干瞪眼的情况. 本文分享自华为云社区<做 SQL 性能优化真是让人干瞪眼>,作者: 石臻臻的杂货铺 . ...
- SQL性能优化案例分析
这段时间做一个SQL性能优化的案例分析, 整理了一下过往的案例,发现一个比较有意思的,拿出来给大家分享. 这个项目是我在项目开展2期的时候才加入的, 之前一期是个金融内部信息门户, 里面有个功能是收集 ...
随机推荐
- CSS3 制作一个边框向周围散开的按钮效果
我们将要达到的是如下的效果(若效果未出现请刷新): 分析 主要还是运用CSS3的transition, animation, transform还有渐变背景等特性. 由于按钮在鼠标进入时有不同的样式, ...
- CSharpGL(4)设计和使用Camera
CSharpGL(4)设计和使用Camera +BIT祝威+悄悄在此留下版了个权的信息说: 主要内容 描述在OpenGL中Camera的概念和用处. 设计一个Camera以及操控Camera的Sate ...
- CoreProfiler/NanoProfiler性能调试监控系列总目录
NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇 NanoProfiler - 适合生产环境的性能监控类库 之 大数据篇 NanoProfiler - 适合生产环境的性能监控类 ...
- 为什么可以说Java语言是准动态语言?
什么是动态语言? 动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化.比如JavaScript便是一个典型的动态语言. 除此之外如Ruby.Python ...
- Lua table之弱引用
Lua采用了基于垃圾收集的内存管理机制,因此对于程序员来说,在很多时候内存问题都将不再困扰他们.然而任何垃圾收集器都不是万能的,在有些特殊情况下,垃圾收集器是无法准确的判断是否应该将当前对象清理.这样 ...
- SQLite帮助类SQlitehelper 实现对SQLite数据的增删改查
public class SQLiteHelper { public const string sConn = "Data Source=" + @"path" ...
- Atitit 研发团队建设----福利法案--非物质福利与物质福利法案
Atitit 研发团队建设----福利法案--非物质福利与物质福利法案 1.1. 何为非物质福利法案??1 1.2. 福利类型1 1.2.1. 公共福利1 1.2.2. 个人福利2 1.2.3. 组织 ...
- iOS --------Crash 分析(一)
iOS Crash 分析(文一)- 开始 1. 名词解释 1. UUID 一个字符串,在iOS上每个可执行文件或库文件都包含至少一个UUID.目的是为了唯一识别这个文件. 2. dwarfdump 苹 ...
- Android开发-之SQLite数据库
之前我们讲了如何将数据存储在文件中,那么除了这种方式呢,就是我们常见的大家都知道的将数据存储在数据库当中了. 将数据存储在数据库中的优势: 1)存储在数据库中的数据更加方便操作,比如增.删.改.查等 ...
- Data Flow的Error Output
一,在Data Flow Task中,对于Error Row的处理通过Error Output Tab配置的. 1,操作失败的类型:Error(Conversion) 和 Truncation. 2, ...