欢迎投稿

今日深度:

为什么不记录慢查询?,不记录慢

为什么不记录慢查询?,不记录慢


㈠ 背景介绍:
  
  2014/8/18 13点37分收到前端说反馈有玩家掉线情况,检查CPU、慢查询、DB请求量,并未发现异常,DB表现一如往常。


㈡ 定位原因:

INSERT INTO t (col1, col2, col3, col4, col5, col6, col7) VALUES ('3532082239485507011_130_99', '130_99', 130, 99, 3532082239485507011, 2172353000317425008, 29078) 

这个长事务执行 1个多小时没有退出,Kill 掉对应的进程,程序前端恢复正常


㈢ 处理思路:

  ⑴ 查询视图

select trx_id,trx_state,trx_started,trx_requested_lock_id,trx_weight,trx_mysql_thread_id from information_schema.innodb_trx where trx_state='RUNNING';

  ⑵ show engine innodb status\G; 关注Transactions部分提取SQL及事务信息
  

㈣ 我的疑问:


为什么这条执行了1个多小时的SQL没有被记录到慢查询日志中呢??


㈤ 原来如此:


Query_time - Lock_time > long_query_time  <===记录
Query_time - Lock_time < long_query_time  <===不记录



㈥ 模拟场景:


⑴ Query_time - Lock_time > long_query_time

Session_A:

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> select emp_no,hire_date from employees where emp_no=10170 for update;
+--------+------------+
| emp_no | hire_date  |
+--------+------------+
|  10170 | 1986-01-02 |
+--------+------------+
1 row in set (0.00 sec)

Session_B:

mysql> select emp_no,hire_date,sleep(3) from employees where emp_no=10170 for update;


过段时间在A做commit,B会执行、并被记录到slow log中:

# Time: 140818 22:37:31
# User@Host: root[root] @ localhost []  Id:     1
# Query_time: 3.049016  Lock_time: 0.018891 Rows_sent: 1  Rows_examined: 1
use employees;
SET timestamp=1408372651;
select emp_no,hire_date,sleep(3) from employees where emp_no=10170 for update;




⑵ Query_time - Lock_time < long_query_time

Session_A:

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> select emp_no,hire_date from employees where emp_no=10170 for update;
+--------+------------+
| emp_no | hire_date  |
+--------+------------+
|  10170 | 1986-01-02 |
+--------+------------+
1 row in set (0.00 sec)

Session_B:

mysql> select emp_no,hire_date from employees where emp_no=10170 for update;

过段时间在A做commit,B会执行、但不会被记录到slow log中


㈦ 我的收获:

我们日常做性能剖析实际上应该包括2个方面:

1)基于执行时间的分析

2)基于等待时间的分析


By water

Good Luck!



怎设置慢查询日志?默认mysql是不会记录慢查询日志的,问怎设置让其记录慢查询?

Linux:

在mysql配置文件my.cnf中增加

log-slow-queries=/var/lib/mysql/slowquery.log (指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log)
long_query_time=2 (记录超过的时间,默认为10s)
log-queries-not-using-indexes (log下来没有使用索引的query,可以根据情况决定是否开启)
log-long-format (如果设置了,所有没有使用索引的查询也将被记录)

Windows:

在my.ini的[mysqld]添加如下语句:
log-slow-queries = E:\web\mysql\log\mysqlslowquery.log
long_query_time = 2(其他参数如上)
 

为何我的网速突然很慢 怎查是不是被人蹭网了

网速变慢不一定是被人蹭网,原因是有很多方面的。

首先你是单线还是和别人共享宽带?如果是共享可能是路由器设置问题。

如果是单线可能和当地线路不稳定有关系,建议打电话过去咨询一下。

如果不是线路问题,有可能电脑中了病毒或者木马,用杀毒的软件进行杀毒。或者使用360安全卫士、优化大师等类似软件清除系统垃圾,如果还是很慢你可以重装下系统。
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/2751.html NewsArticle 为什么不记录慢查询?,不记录慢 ㈠ 背景介绍: 2014/8/18 13点37分收到前端说反馈有玩家掉线情况,检查CPU、慢查询、DB请求量,并未发现异常,DB表现一如往常。 ㈡ 定位原因: INSERT...
相关文章
    暂无相关文章
评论暂时关闭