爲何要監控sql語句,以及如何監控,都有哪幾種方式能夠監控。

快速閱讀

爲何要監控sql語句,以及如何監控,都有哪幾種方式能夠監控。mysql

咱們知道sql server 中有個工具叫sql profile ,能夠實時監控sql server中 執行的sql 語句,以方便調試bug 或者確認最終生成的sql語句sql

爲何要監控sql語句?

  1. 由於程序大了之後,sql語句有可能被多個地方調用 。你不能確認當前時間是否是隻執行了你須要的那條語句 。
  2. 有的持久層框架採用linq的語法來寫sql , 程序中不方便輸出sq語句
  3. 線上運行的程序,沒有辦法更改程序。但須要確認問題出錯在哪裏?執行了哪些sql語句。能夠根據sql 語句來判斷 出錯的地方。

如何在mysql中監控sql語句?

默認mysql是不開啓的sql語句監控的,當須要開啓的時候 ,執行如下命令。數據庫

SHOW VARIABLES LIKE "general_log%"; -- off 是關閉,若是是on表示已經開啓
SET GLOBAL general_log = 'ON'; --開啓日誌監控。

我是已經開啓的狀態 ,若是沒有開啓的時候 ,general_log 是顯示的off .框架

以下圖所示 ,會看到日誌默認保存的路徑 位置工具

C:\ProgramData\MySQL\MySQL Server 5.5\Data\hcb-PC.log

1564155112158

接下來咱們執行幾條sql語句來查看3d

執行sql調試

SELECT * FROM `platform`
UPDATE `platform` SET platform_type=2 WHERE id=1

接下來咱們去看下日誌日誌

1564155346364

能夠看到日誌中包含了code

Time                 Id Command    Argument

分別對應時間 ,id, 命令, 參數orm

參數指的就是執行的sql語句。

如何讓mysql中的sql語句顯示在表中

在日誌中查看不方便 ,若是讓sql語句顯示在數據庫中的一個表中?

執行以下sql

SET GLOBAL log_output = 'TABLE'; 
SELECT * FROM mysql.general_log ORDER BY  event_time DESC

1564155773993

用processlist顯示

USE `information_schema`;
SELECT * FROM PROCESSLIST WHERE info IS NOT NULL;

具說這種方式能夠實時顯示,可是個人不知道爲啥不能實時顯示新的sql 先記錄一下。

1564156127696

友情提示

​ 我對個人文章負責,發現好多網上的文章 沒有實踐,都發出來的,讓人走不少彎路,若是你在個人文章中遇到沒法實現,或者沒法走通的問題。能夠直接在公衆號《愛碼農愛生活 》留言。一定會再次複查緣由。讓每一篇 文章的流程都能順利實現。

相關文章
相關標籤/搜索