MySQL 慢查詢日誌及相關信息

1、首先查看MySQL服務器狀態信息,包括當前MySQL啓動後的運行時間,當前MySQL的客戶端會話連
        接數,當前MySQL服務器執行的慢查詢數,當前MySQL執行了多少SELECT語句、執行了多少
        UPDATE/DELETE/INSERT語句等統計信息,便於咱們根據當前MySQL服務器的運行狀態進行對
        應的調整或優化工做。
    一、SHOW STATUS 指令語句來查看MySQL服務器的狀態信息
    二、查看單個信息語法 
        SHOW [統計範圍] STATUS [LIKE '狀態項名稱']
            --統計範圍關鍵字分爲GLOBAL和SESSION(或LOCAL)兩種。
        例如:
            --查看MySQL本次啓動後的運行時間(單位:秒)
            show status like 'uptime';
            
            --查看select語句的執行數
            show [global] status like 'com_select';
            
            --查看insert語句的執行數
            show [global] status like 'com_insert';
            
            --查看update語句的執行數
            show [global] status like 'com_update';
            
            --查看delete語句的執行數
            show [global] status like 'com_delete';
            
            --查看試圖鏈接到MySQL(無論是否鏈接成功)的鏈接數
            show status like 'connections';
            
            --查看線程緩存內的線程的數量。
            show status like 'threads_cached';
            
            --查看當前打開的鏈接的數量。
            show status like 'threads_connected';
            
            --查看當前打開的鏈接的數量。
            show status like 'threads_connected';
            
            --查看建立用來處理鏈接的線程數。若是Threads_created較大,你可能要增長
              thread_cache_size值。
            show status like 'threads_created';
            
            --查看激活的(非睡眠狀態)線程數。
            show status like 'threads_running';
            
            --查看當即得到的表的鎖的次數。
            show status like 'table_locks_immediate';
            
            --查看不能當即得到的表的鎖的次數。若是該值較高,而且有性能問題,你應首先優化
               查詢,而後拆分表或使用複製。
            show status like 'table_locks_waited';
            
            --查看建立時間超過slow_launch_time秒的線程數。
            show status like 'slow_launch_threads';
            
            --查看查詢時間超過long_query_time秒的查詢的個數。
            show status like 'slow_queries';
            
            修改 MySQL> set [字段] = 值;mysql

2、查看MySQL執行的歷史記錄及執行時間,分析出最爛SQL方便優化。
    一、在my.cnf中的[mysqld](其餘地方可能無效)下插入log=/etc/tmp/mysql.log(日誌的地址能夠本身
        定義,不過不要在home裏面,不然可能顯示不出來,主要要有寫的權限).而後要重啓數據庫,用
        service mysqld restart 命令就能夠了.這個log會將全部的執行語句記錄下來,因此在數據庫很忙的
        時候,這個日誌可能變得很大,不宜查看。
        用tail -f /etc/tmp/mysql.log 命令能夠持續觀察執行語句,也能夠將該文件下載下來慢慢看.
    
    二、另外還有一個慢查詢歷史記錄,也在my.cnf文件裏,配置語句爲
        log-slow-queries=/var/lib/mysql/slowquery.log 
        long_query_time=5 
        log-queries-not-using-indexes=1
        
        注: log-slow-queries 是慢查詢歷史記錄的地址,
            long_query_time 限定超過X秒才能加入到歷史記錄裏面,
            log-queries-not-using-indexes 限定沒有使用索引的查詢語句.
        這個日誌因爲記錄語句很少,因此能夠長期開啓.
    
    三、操做
        (1) 查看慢SQL日誌是否啓用
            mysql> show variables like 'log_slow_queries'; 
            +------------------+-------+
            | Variable_name    | Value |
            +------------------+-------+
            | log_slow_queries | ON    |
            +------------------+-------+
            1 row in set (0.00 sec)sql

        (2) 查看執行慢於多少秒的SQL會記錄到日誌文件中
            mysql> show variables like 'long_query_time';
            +-----------------+-------+
            | Variable_name   | Value |
            +-----------------+-------+
            | long_query_time | 1     |   
            +-----------------+-------+
            1 row in set (0.00 sec)
            這裏value=1, 表示1秒
        
        (3)配置my.ini文件(inux下文件名爲my.cnf), 查找到[mysqld]區段,增長日誌的配置,以下示例:
            [mysqld]
            log="C:/temp/mysql.log"
            log_slow_queries="C:/temp/mysql_slow.log"
            long_query_time=1數據庫

            log指示日誌文件存放目錄;
            log_slow_queries指示記錄執行時間長的sql日誌目錄;
            long_query_time指示多長時間算是執行時間長,單位s。緩存

            Linux下這些配置項應該已經存在,只是被註釋掉了,能夠去掉註釋。但直接添加配置項也OK
    
    服務器

相關文章
相關標籤/搜索