欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL如何查看正在運行的SQL詳解

 更新時間:2023年01月12日 13:06:38   作者:壹升茉莉清  
在項目開發(fā)里面總是要查看后臺執(zhí)行的sql語句,mysql數(shù)據(jù)庫也不例外,下面這篇文章主要給大家介紹了關于MySQL如何查看正在運行的SQL的相關資料,文中介紹的非常詳細,需要的朋友可以參考下

前言

? 在安裝MySQL的時候會默認初始化幾個MySQL運行所需的數(shù)據(jù)庫:mysql, sys, information_schema, performance_schema.這幾個庫存儲了MySQL在運行過程中的配置信息,運行信息,參數(shù)配置,數(shù)據(jù)庫信息,表信息等等。今天這個要查看正在運行的SQL主要用到的是information_schema和performance_schema這兩個庫。

processlist

processlist表位于information_schema庫中,主要是存儲的MySQL線程的一些基本信息。我們使用

desc information_schema.processlist來查看表結(jié)構(gòu):

  • ID: 線程的id
  • USER: 線程屬于哪一個用戶
  • HOST:客戶端的host信息:hostname+端口
  • DB:線程在哪一個數(shù)據(jù)庫下
  • COMMAND:線程使用哪一種命令在執(zhí)行,空閑的線程狀態(tài)為sleep
  • TIME:線程已經(jīng)運行的時間,秒為單位
  • STATE:線程正在做什么:當前的狀態(tài),行為,或者事件
  • INFO:線程正在執(zhí)行的語句,但是這個并不是很準確,所以需要使用其他的方式來完成我們的目標。

使用show processlist 或者 select * from information_schema.processlist查看processlist表

threads

threads 位于performance_schema庫中,每一行記錄的是一條服務器線程。當performance_schema初始化的時候,它會根據(jù)當時存在的線程填充線程表,之后每當服務器創(chuàng)建線程時,都會添加一條新數(shù)據(jù)。當線程結(jié)束線程表中也會刪除這條數(shù)據(jù)。使用 desc performance_schema.threads 來查看表結(jié)構(gòu):

  • THREAD_ID:線程唯一id
  • NAME:與服務器中的線程監(jiān)測代碼相關聯(lián)的名稱
  • TYPE:線程類型。分為前臺和后臺。用戶連線程是前臺線程,與內(nèi)部服務器活動相關的線程是后端線程。例如InnoDB內(nèi)部線程。
  • PROCESSLIST_ID:上邊的processlist的id
  • PROCESSLIST_USER:上邊的processlist的user
  • PROCESSLIST_HOST:上邊的processlist的host
  • PROCESSLIST_DB:上邊的processlist的DB
  • PROCESSLIST_COMMAND:上邊的processlist的COMMAND
  • PROCESSLIST_TIME:上邊的processlist的TIME
  • PROCESSLIST_STATE:上邊的processlist的STATE
  • PROCESSLIST_INFO:上邊的processlist的INFO
  • PARENT_THREAD_ID:衍生線程的id值
  • ROLE:未使用
  • INSTRUMENTED:線程執(zhí)行的事件是否插裝,(YES or ON)
  • HISTORY:是否為線程記錄歷史事件
  • CONNECTION_TYPE:用于建立連接的協(xié)議,或者NULL用于后臺線程。
  • THREAD_OS_ID:MySQL線程對應于操作系統(tǒng)的線程id

events_statements_current

events_statements_current 位于performance_schema庫中,它存儲的是當前的語句事件,表為每個線程存儲一行,顯示賢臣哥最近監(jiān)視的語句事件的當前狀態(tài)。使用desc performance_schema.events_statements_current查看表結(jié)構(gòu):

  • THREAD_ID:與事件關聯(lián)的線程id,與上邊threads的id對應
  • EVENT_ID:事件啟動時的線程當前事件號

THREAD_ID和EVENT_ID一起標志唯一一行,沒有兩行具有相同的鍵值對

  • END_EVENT_ID:在事件開始時設置null,并在事件結(jié)束時更新為線程當前事件號
  • EVENT_NAME:事件的名稱
  • SOURCE:包含生成事件的監(jiān)測代碼的源文件名稱和監(jiān)測發(fā)生所在文件的行號
  • TIMER_START,TIMER_END,TIMER_WAIT:事件的時間信息,開始時間,結(jié)束時間,事件的運行時間,單位是皮秒(萬分之一秒)。
  • LOCK_TIME:等待表鎖花費的時間。微妙為單位
  • SQL_TEXT:SQL語句的文本,對于沒有關聯(lián)SQL語句的命令為null
  • DIGEST:MD5的32個字符
  • DIGEST_TEXT:規(guī)范化語句摘要文本。
  • CURRENT_SCHEMA:語句的默認數(shù)據(jù)庫
  • OBJECT_TYPE,OBJECT_SCHEMA,OBJECT_NAME :對于嵌套語句這些列包含有關父語句的信息
  • OBJECT_INSTANCE_BEGIN:語句在內(nèi)存的對象地址
  • MYSQL_ERRNO:語句錯誤號
  • RETURNED_SQLSTATE:sql狀態(tài)返回
  • MESSAGE_TEXT:錯誤信息
  • ERRORS:該語句是否發(fā)生錯誤。
  • WARNINGS:警告次數(shù)
  • ROWS_AFFECTED:受語句影響的行數(shù)
  • ROWS_SENT:語句返回的行數(shù)
  • ROWS_EXAMINED:服務器層檢查的行數(shù)
    • CREATED_TMP_DISK_TABLES
    • CREATED_TMP_TABLES
    • SELECT_FULL_JOIN
    • SELECT_FULL_RANGE_JOIN
    • SELECT_RANGE
    • SELECT_RANGE_CHECK
    • SELECT_SCAN
    • SORT_MERGE_PASSES
    • SORT_RANGE
    • SORT_ROWS
    • SORT_SCAN
    • NO_INDEX_USED
    • NO_GOOD_INDEX_USED
    • NESTING_EVENT_ID
    • NESTING_EVENT_TYPE
    • NESTING_EVENT_LEVEL

如何查看正在運行的SQL

1、processlist表記錄的是MySQL正在運行的線程信息,而每一個線程在threads表中都有用線程的一個唯一id >>> thread_id。events_statements_current表中記錄著唯一線程id和該線程對應的SQL語句sql_text.

2、所以我們可以先在processlist拿到processlist對應的id

3、通過threads表的字段分析,我們之后一個processlist_id和thread_id一一對應,所以之后在threads表中通過processlist_id拿到thread_id

4、最后一步就是關鍵,我們通過thread_id在events_statements_current表中拿到sql_text,也就是我們需要拿到的sql語句。

拿到正在執(zhí)行的processlist_id

select id from information_schema.processlist

拿到與processlist_id對應的thread_id

select thread_id from performance_schema.threads where processlist_id in (上一步拿到的processlist_id列表)

拿到正在執(zhí)行的sql語句

select thread_id, sql_text from performance_schema.events_statements_current where thread_id in (上一步拿到的thread_id列表)

完整SQL

SELECT a.*, c.thread_id, c.sql_text from information_schema.processlist a
LEFT JOIN performance_schema.threads b on a.id = b.PROCESSLIST_ID
LEFT JOIN performance_schema.events_statements_current c on c.THREAD_ID = b.THREAD_ID

總結(jié)

到此這篇關于MySQL如何查看正在運行的SQL的文章就介紹到這了,更多相關MySQL查看正在運行SQL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL動態(tài)字符串處理DYNAMIC_STRING

    MySQL動態(tài)字符串處理DYNAMIC_STRING

    本文主要給大家簡單講解了mysql如何使用DYNAMIC_STRING來進行動態(tài)字符串的保存,非常的實用,有需要的小伙伴可以參考下
    2016-10-10
  • MySQL數(shù)據(jù)庫主從復制與讀寫分離

    MySQL數(shù)據(jù)庫主從復制與讀寫分離

    大家好,本篇文章主要講的是MySQL數(shù)據(jù)庫主從復制與讀寫分離,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • MySQL最大連接數(shù)max_connections設置的兩種方法

    MySQL最大連接數(shù)max_connections設置的兩種方法

    MySQL的最大連接數(shù)可以通過兩種方法進行設置,通過命令行臨時修改和通過配置文件永久修改這兩種方法,本文將通過代碼示例給大家詳細的講解一下這兩種方法,需要的朋友可以參考下
    2024-05-05
  • 開啟MySQL的binlog日志的方法步驟

    開啟MySQL的binlog日志的方法步驟

    這篇文章主要介紹了開啟MySQL的binlog日志的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Mysql 聚合函數(shù)嵌套使用操作

    Mysql 聚合函數(shù)嵌套使用操作

    這篇文章主要介紹了Mysql 聚合函數(shù)嵌套使用操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • MySQL模糊查找like通配符使用(小白入門篇)

    MySQL模糊查找like通配符使用(小白入門篇)

    這篇文章主要為大家介紹了MySQL模糊查找like通配符使用的小白入門篇學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • MySQL 5.7安裝后默認登錄密碼的查看方法

    MySQL 5.7安裝后默認登錄密碼的查看方法

    許多朋友安裝MySQL 5.7之后不知道默認登錄密碼在哪里查看,本文小編將通過代碼示例和圖文結(jié)合的方式給大家介紹MySQL 5.7安裝后默認登錄密碼的查看方法,需要的朋友可以參考下
    2023-12-12
  • MySQL如何使用使用Xtrabackup進行備份和恢復

    MySQL如何使用使用Xtrabackup進行備份和恢復

    Xtrabackup是由Percona開發(fā)的一個開源軟件,可實現(xiàn)對InnoDB的數(shù)據(jù)備份,支持在線熱備份(備份時不影響數(shù)據(jù)讀寫)。本文講解如何使用該工具進行備份和恢復
    2021-06-06
  • mysql中的utf8與utf8mb4存儲及區(qū)別

    mysql中的utf8與utf8mb4存儲及區(qū)別

    本文主要介紹了mysql中的utf8與utf8mb4存儲及區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • mysql 實現(xiàn)互換表中兩列數(shù)據(jù)方法簡單實例

    mysql 實現(xiàn)互換表中兩列數(shù)據(jù)方法簡單實例

    這篇文章主要介紹了mysql 實現(xiàn)互換表中兩列數(shù)據(jù)方法簡單實例的相關資料,需要的朋友可以參考下
    2016-10-10

最新評論