昨晚我正在床上睡得着着的,突然来了一条短信。什么?线上的订单无法取消!我赶紧登录线上系统,查看业务日志。发现有MySQL锁超时的错误日志。不用想,肯定有另一个事务正在修改这条订单,持有这条订单的锁。导致当前事务获取不到锁,一直等待,直到超过锁超时时间,然后报错。既然问题已经清楚了,接下来就轮到怎么排查一下到底是哪个事务正在持有这条订单的锁。好在MySQL提供了丰富的工具,帮助我们排查锁竞争问题。现场复现一个这个问题:创建一张用户表,造点数据:CREATETABLE`user`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'主键ID',`name`varchar
昨晚我正在床上睡得着着的,突然来了一条短信。什么?线上的订单无法取消!我赶紧登录线上系统,查看业务日志。发现有MySQL锁超时的错误日志。不用想,肯定有另一个事务正在修改这条订单,持有这条订单的锁。导致当前事务获取不到锁,一直等待,直到超过锁超时时间,然后报错。既然问题已经清楚了,接下来就轮到怎么排查一下到底是哪个事务正在持有这条订单的锁。好在MySQL提供了丰富的工具,帮助我们排查锁竞争问题。现场复现一个这个问题:创建一张用户表,造点数据:CREATETABLE`user`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'主键ID',`name`varchar
1.慢查询日志的作用慢查询日志默认不开启,建议手动开启,方便我们定位线上问题。执行时间超过阈值的SQL会被写入到慢查询日志当中,这样可以帮助我们记录执行时间过长的SQL语句,定位线上慢SQL问题,方便我们进行SQL性能调优。2.慢查询日志的配置2.1查看是否开启了慢查询日志showvariableslike'slow_query_log';默认是OFF,不开启,可以手动开启。2.2开启慢查询日志一种方法是可以使用MySQL命令开启:setglobalslow_query_log=1;另一种方法是修改MySQL配置文件,重新MySQL服务后,开启。修改配置文件my.cnf,加入下面一行命令slo
1.慢查询日志的作用慢查询日志默认不开启,建议手动开启,方便我们定位线上问题。执行时间超过阈值的SQL会被写入到慢查询日志当中,这样可以帮助我们记录执行时间过长的SQL语句,定位线上慢SQL问题,方便我们进行SQL性能调优。2.慢查询日志的配置2.1查看是否开启了慢查询日志showvariableslike'slow_query_log';默认是OFF,不开启,可以手动开启。2.2开启慢查询日志一种方法是可以使用MySQL命令开启:setglobalslow_query_log=1;另一种方法是修改MySQL配置文件,重新MySQL服务后,开启。修改配置文件my.cnf,加入下面一行命令slo
HashMap源码深度剖析,手把手带你分析每一行代码!在前面的两篇文章哈希表的原理和200行代码带你写自己的HashMap(如果你阅读这篇文章感觉有点困难,可以先阅读这两篇文章)当中我们仔细谈到了哈希表的原理并且自己动手使用线性探测法实现了我们自己的哈希表MyHashMap。在本篇文章当中我们将仔细分析JDK当中HashMap的源代码。首先我们需要了解的是一个容器最重要的四个功能增删改查,而我们也是主要根据这四个功能进行展开一步一步的剖析HashMap的源代码。在正式进行源码分析之前,先提一下:在JDK当中实现的HashMap解决哈希冲突的办法是使用链地址法,而我们自己之前在文章200行代码带
HashMap源码深度剖析,手把手带你分析每一行代码!在前面的两篇文章哈希表的原理和200行代码带你写自己的HashMap(如果你阅读这篇文章感觉有点困难,可以先阅读这两篇文章)当中我们仔细谈到了哈希表的原理并且自己动手使用线性探测法实现了我们自己的哈希表MyHashMap。在本篇文章当中我们将仔细分析JDK当中HashMap的源代码。首先我们需要了解的是一个容器最重要的四个功能增删改查,而我们也是主要根据这四个功能进行展开一步一步的剖析HashMap的源代码。在正式进行源码分析之前,先提一下:在JDK当中实现的HashMap解决哈希冲突的办法是使用链地址法,而我们自己之前在文章200行代码带