mysql查看程序執行的sql,mysql查看當前執行的sql

本文目錄一覽:

Mysql學會查看sql的執行計劃

首先在Mysql的服務中有 連接器、查詢緩存(Mysql8 已經刪除)、分析器、優化器、執行器等,所有跨存儲引擎的功能都在這一層實現

而一條sql怎麼執行是由優化器決定的, 優化器是在表裡面有多個索引的時候,決定使用哪個索引;或者在一個語句有多表關聯(join)的時候,決定各個表的連接順序。

而執行計劃就是優化器優化後的sql的執行的詳細方案

Mysql中查看執行計劃的方式有兩種 : 1. 使用desc    2.使用 explain  使用它倆的效果是一樣的

接下來要通過執行計劃知道sql是怎麼執行的

執行計劃中有幾個重要的字段, 分別是 

id,  table,  type,  possible_keys,  key,  key_len, Extra

id :  可以通過ID來查看在多表聯查中sql是先查詢哪張表的 id相同的從上往下依次執行,id不同的id大的先執行

table :   table當然就是查詢的表名

type :  查詢的類型   查詢類型分為  ALL,  index,  range,  ref , eq_ref, const(system),  null

        ALL: 指的全盤掃描,沒有走任何索引   查詢結果集大於25% 優化器可能會走全盤掃描   字符串查詢的時候一定要加”” 不然可能會全索引掃描(隱式轉換)   統計信息 失效 或者 過舊 也可能走全盤掃描  因為優化器會參考統計信息來制定執行計劃

        index: 全索引掃描  就是掃描整顆索引樹

           range: 索引範圍  查詢索引樹的一部分範圍   範圍索引中     =  =  like  的效率會比  or   in  的效率高, 使用like %再前面的不走索引

            ref:   輔助索引的等值查詢            

                    當查詢的數據量小,優化器也有可能會走索引的全盤掃描  這裡我就不貼圖了;

            eq_ref : 多表連接查詢中,被連接的表的連接條件列是主鍵或者唯一鍵

            const(system): 主鍵 或者 唯一鍵 的等值查詢

               null: 沒有數據

            他們的性能是依次遞增的 全盤掃描性能最差,  const性能最高

possible_keys:  查詢過程中可能用到的索引

key: 真正使用到的索引

key_len:  走索引的長度

        這個是怎麼計算的呢?  

                key_len 的計算方法 :

                    int 類型最長存儲4個字節長度的數字  有not null  是4字節  沒有的話會花1字節存儲是不是null

                    tinyint 最大存儲一個字節    也會花1字節來判斷是不是null

                    字符串類型 : 字符集 utf8mb4  1-4字節

                    varchar超過255會預留2個字節存儲長度 沒超預留1個字節

                    key_len 永遠是你設置的長度的最大的  

        聯合索引可以通過key_len 來判斷走了幾個索引

        使用desc format=json select * from table 可以查看詳細情況

filtered:  索引掃描過濾掉數據的佔比

Extra: 額外的信息 

         Using filesort :MySQL 對數據在sql層進行了排序,而不是按照表內的索引進行排序讀 取。 效率比較低

         Using temporary :使用臨時表保存中間結果,也就是說 MySQL 在對查詢結果排序時使用了臨時表,常見於order by 或 group by。

         Using index :表示 SQL 操作中使用了覆蓋索引(Covering Index),避免了訪問表的數據行,效率高。

         Using index condition :表示 SQL 操作命中了索引,但不是所有的列數據都在索引樹上,還需要訪問實際的行記錄。

         Using where :表示 SQL 操作使用了 where 過濾條件。

         Select tables optimized away :基於索引優化 MIN/MAX 操作或者 MyISAM 存儲引擎優化 COUNT(*) 操作,不必等到執行階段再進行計算,查詢執行計劃生成的階段即可完成優化。

          Using join buffer (Block Nested Loop) :表示 SQL 操作使用了關聯查詢或者子查詢,且需要進行嵌套循環計算

 

如何查看mysql執行過的語句

開啟記錄MySQL執行過SQL語句的方法很簡單:編輯/etc/my.cnf文件,在[mysqld]節下面添加:log=/var/lib/mysql/sql_row.log行(日誌的路徑自己根據需要定義)。

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Default to using old password format for compatibility with mysql 3.x

# clients (those using the mysqlclient10 compatibility package).

old_passwords=1

log=/var/lib/mysql/sql_row.log

# Disabling symbolic-links is recommended to prevent assorted security risks;

# to do so, uncomment this line:

# symbolic-links=0

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

修改完畢後,記得重啟 MySQL:

service mysql restart

# 或者

/etc/init.d/mysqld stop

/etc/init.d/mysqld start

現在你去 /var/lib/mysql/ 路徑下的 sql_row.log 文件應該是能夠看到 MySQL 什麼時候執行了哪些程序了。

如何記錄MySQL執行過的SQL語句

第一種: 查 Slow query 的 SQL 語法:

log_slow_queries = /var/log/mysql/mysql-slow.log

long_query_time = 2 (超過 2秒的 SQL 語法記錄起來, 設短一點來記錄除錯也是一種方法 XD)

第二種: 設 MySQL Replication 用 binlog:

log_bin = /var/log/mysql/mysql-bin.log (此檔要用 mysqlbinlog 解來看)

mysql 會將所有 INSERT/UPDATE/DELETE 語法記於此(但是語法可能跟你想的不同), 這是要寫給 SLAVE 用的 log 檔

第三種: 推薦此方法, 將 MySQL 執行的每行指令全都記錄起來:

log = /tmp/mysql.log

restart mysql 後, tail -f /tmp/mysql.log 就可以看到羅!

補充: 最早前的方法是 mysqldump, 然後執行完後再 mysqldump, 再 diff, 但是在 DB 1G 後就放棄此方法了 XD

如何查看mysql中執行sql語句

如果我的理解沒錯的話,你的意思是正在執行的sql語句吧,

命令:

mysqlshow full processlist;

示例:

mysqlselect sleep(20);

另一個session執行:

mysqlshow full processlist;

— 可以看到正在執行的語句 —

| 183 | root | localhost | NULL | Query | 6 | User sleep | select sleep(20) |

mysql中怎樣顯示服務器正在執行的sql任務

查詢Oracle正在執行的sql語句及執行該語句的用戶

SELECT b.sid oracleID,       b.username 登錄Oracle用戶名,       b.serial#,       spid 操作系統ID,       paddr,       sql_text 正在執行的SQL,       b.machine 計算機名FROM v$process a, v$session b, v$sqlarea cWHERE a.addr = b.paddr   AND b.sql_hash_value = c.hash_value

查看正在執行sql的發起者的發放程序

SELECT OSUSER 電腦登錄身份,       PROGRAM 發起請求的程序,       USERNAME 登錄系統的用戶名,       SCHEMANAME,       B.Cpu_Time 花費cpu的時間,       STATUS,       B.SQL_TEXT 執行的sqlFROM V$SESSION ALEFT JOIN V$SQL B ON A.SQL_ADDRESS = B.ADDRESS                   AND A.SQL_HASH_VALUE = B.HASH_VALUEORDER BY b.cpu_time DESC

查出oracle當前的被鎖對象

SELECT l.session_id sid,       s.serial#,       l.locked_mode 鎖模式,       l.oracle_username 登錄用戶,       l.os_user_name 登錄機器用戶名,       s.machine 機器名,       s.terminal 終端用戶名,       o.object_name 被鎖對象名,       s.logon_time 登錄數據庫時間FROM v$locked_object l, all_objects o, v$session sWHERE l.object_id = o.object_id   AND l.session_id = s.sidORDER BY sid, s.serial#;

kill掉當前的鎖對象可以為

alter system kill session ‘sid, s.serial#‘;

如何看mysql執行的sql語句

1先通過status命令查看Mysql運行狀態

mysql status;

————–

mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1

Connection id: 113752

Current database: information_schema

Current user: push_user@localhost

SSL: Not in use

Current pager: stdout

Using outfile: ”

Using delimiter: ;

Server version: 5.1.73 Source distribution

Protocol version: 10

Connection: Localhost via UNIX socket

Server characterset: latin1

Db characterset: utf8

Client characterset: latin1

Conn. characterset: latin1

UNIX socket: /tmp/mysql.sock

Uptime: 22 days 8 hours 31 min 23 sec

Threads: 38 Questions: 1037751897 Slow queries: 2356 Opens: 79836

Flush tables: 1 Open tables: 64 Queries per second avg: 537.282

————–

在上面顯示列表的最後一條,我們來查看Slow queries這一項的值,如果多次查看的值大於0的話,說明有些查詢sql命令執行時間過長。

2)這時再通過show processlist命令來查看當前正在運行的SQL,從中找出運行慢的SQL語句,找到執行慢的語句後,再用explain命令查看這些語句的執行計劃。

mysql show processlist;

+——–+———–+———————+——————–+———+——-+——-+——————+

| Id | User | Host | db | Command | Time | State | Info |

+——–+———–+———————+——————–+———+——-+——-+——————+

| 50270 | ambari | DataBase-01:41512 | ambari | Sleep | 23 | | NULL |

| 50271 | ambari | DataBase-01:41511 | ambari | Sleep | 6 | | NULL |

| 50272 | ambari | DataBase-01:41514 | ambari | Sleep | 23 | | NULL |

| 62452 | oozie | DataBase-02:42987 | oozie | Sleep | 25 | | NULL |

| 63660 | ambari | DataBase-01:56052 | ambari | Sleep | 0 | | NULL |

| 110404 | push_user | localhost:33817 | quartz | Sleep | 12 | | NULL |

| 112835 | push_user | localhost:46571 | hibernate | Sleep | 1 | | NULL |

| 113163 | push_user | localhost:56585 | hibernate | Sleep | 1 | | NULL |

| 113289 | push_user | 14.118.132.20:47333 | DW | Sleep | 628 | | NULL |

| 113320 | push_user | localhost:47428 | hibernate | Sleep | 3 | | NULL |

| 113321 | push_user | localhost:47429 | hibernate | Sleep | 3 | | NULL |

| 113322 | push_user | localhost:47430 | hibernate | Sleep | 3 | | NULL |

| 113357 | push_user | localhost:52337 | hibernate | Sleep | 3 | | NULL |

| 113364 | push_user | localhost:57206 | hibernate | Sleep | 3 | | NULL |

| 113366 | push_user | localhost:34813 | hibernate | Sleep | 1 | | NULL |

| 113398 | push_user | localhost:37382 | hibernate | Sleep | 1 | | NULL |

| 113498 | push_user | localhost:47626 | quartz | Sleep | 12717 | | NULL |

| 113709 | push_user | localhost:59382 | hibernate | Sleep | 1 | | NULL |

| 113710 | push_user | localhost:33627 | hibernate | Sleep | 1 | | NULL |

| 113715 | hive | DataBase-02:54968 | hive | Sleep | 2390 | | NULL |

| 113716 | hive | DataBase-02:54969 | hive | Sleep | 2390 | | NULL |

| 113717 | hive | DataBase-02:54974 | hive | Sleep | 2336 | | NULL |

| 113718 | hive | DataBase-02:54975 | hive | Sleep | 2336 | | NULL |

| 113719 | push_user | localhost:48243 | hibernate | Sleep | 1 | | NULL |

| 113720 | push_user | localhost:48245 | hibernate | Sleep | 1 | | NULL |

| 113721 | push_user | localhost:48244 | hibernate | Sleep | 1 | | NULL |

| 113722 | push_user | localhost:48247 | hibernate | Sleep | 1 | | NULL |

| 113723 | push_user | localhost:48249 | hibernate | Sleep | 1 | | NULL |

| 113724 | push_user | localhost:48248 | hibernate | Sleep | 1 | | NULL |

| 113745 | push_user | localhost:50684 | hibernate | Sleep | 1 | | NULL |

| 113746 | push_user | localhost:50685 | hibernate | Sleep | 1 | | NULL |

| 113747 | push_user | localhost:50695 | hibernate | Sleep | 1 | | NULL |

| 113748 | push_user | localhost:50696 | hibernate | Sleep | 1 | | NULL |

| 113749 | push_user | localhost:50697 | hibernate | Sleep | 1 | | NULL |

| 113750 | push_user | localhost:50699 | hibernate | Sleep | 1 | | NULL |

| 113751 | push_user | localhost:50700 | hibernate | Sleep | 1 | | NULL |

| 113752 | push_user | localhost | information_schema | Query | 0 | NULL | show processlist |

| 113753 | push_user | 14.118.132.20:28688 | DW | Sleep | 396 | | NULL |

+——–+———–+———————+——————–+———+——-+——-+——————+

38 rows in set (0.00 sec)

或者通過如下命令查詢:

mysql use information_schema;

mysql select * from PROCESSLIST where info is not null;

+——–+———–+———–+——————–+———+——+———–+————————————————–+

| ID | USER | HOST | DB | COMMAND |

TIME | STATE | INFO |

+——–+———–+———–+——————–+———+——+———–+————————————————–+

| 113752 | push_user | localhost | information_schema | Query |

0 | executing | select * from PROCESSLIST where info is not null |

+——–+———–+———–+——————–+———+——+———–+————————————————–+

1 row in set (0.00 sec)

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/189149.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-29 08:01
下一篇 2024-11-29 08:01

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • Python購物車程序

    Python購物車程序是一款基於Python編程語言開發的程序,可以實現購物車的相關功能,包括商品的添加、購買、刪除、統計等。 一、添加商品 添加商品是購物車程序的基礎功能之一,用…

    編程 2025-04-29
  • 爬蟲是一種程序

    爬蟲是一種程序,用於自動獲取互聯網上的信息。本文將從如下多個方面對爬蟲的意義、運行方式、應用場景和技術要點等進行詳細的闡述。 一、爬蟲的意義 1、獲取信息:爬蟲可以自動獲取互聯網上…

    編程 2025-04-29
  • Hibernate日誌打印sql參數

    本文將從多個方面介紹如何在Hibernate中打印SQL參數。Hibernate作為一種ORM框架,可以通過打印SQL參數方便開發者調試和優化Hibernate應用。 一、通過配置…

    編程 2025-04-29
  • Vb運行程序的三種方法

    VB是一種非常實用的編程工具,它可以被用於開發各種不同的應用程序,從簡單的計算器到更複雜的商業軟件。在VB中,有許多不同的方法可以運行程序,包括編譯器、發布程序以及命令行。在本文中…

    編程 2025-04-29
  • Python一元二次方程求解程序

    本文將詳細闡述Python一元二次方程求解程序的相關知識,為讀者提供全面的程序設計思路和操作方法。 一、方程求解 首先,我們需要了解一元二次方程的求解方法。一元二次方程可以寫作: …

    編程 2025-04-29
  • 如何使用GPU加速運行Python程序——以CSDN為中心

    GPU的強大性能是眾所周知的。而隨着深度學習和機器學習的發展,越來越多的Python開發者將GPU應用於深度學習模型的訓練過程中,提高了模型訓練效率。在本文中,我們將介紹如何使用G…

    編程 2025-04-29

發表回復

登錄後才能評論