為什麼不記錄慢查詢?,不記錄慢

來源:互聯網
上載者:User

為什麼不記錄慢查詢?,不記錄慢
㈠ 背景介紹:
  
  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: 1use 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安全衛士、最佳化大師等類似軟體清除系統垃圾,如果還是很慢你可以重裝下系統。
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.