MySQL跟蹤SQL 慢查詢分析工具

2022-02-19 13:23:47 字數 2961 閱讀 3581

之前的工作一直使用的sql server, 用過的都知道,sql server有配套的sql跟蹤工具sql profiler,開發或者定位bug過程中,可以在操作頁面的時候,實時檢視資料庫執行的sql語句,十分方便。最近的專案使用mysql,沒有類似的功能,感覺到十分的不爽,網上也沒有找到合適的免費工具,所以自己研究做了乙個簡單工具。

功能技術方案

先看一下的效果:

mysql支援輸出日誌,通過以下命令檢視當前狀態

下面我們將所有日誌、慢sql日誌開啟,日誌輸出修改為table,定義執行2秒以上的為慢sql

注意:以上的設定,資料庫重啟後將失效,永久改變配置需要修改my.conf檔案

現在日誌檔案都存在資料庫表裡面了,剩下的工作就是取數並展示出來就行了。本專案後台使用的mvc取數,然後vue動態繫結,bootstrap渲染樣式。

前端**

效能異常sql

時間執行語句

}

@**@

}執行時長(時:分:秒,毫秒)

鎖定時長(時:分:秒,毫秒)

開始時間

資料庫操作者

執行語句

}

@**@

}}

}

}

}

後端**
using ade.tools.models;

using microsoft.aspnetcore.mvc;

using microsoft.extensions.configuration;

using system;

using system.collections.generic;

using system.io;

using system.linq;

using system.text.regularexpressions;

using mysql.data.mysqlclient;

using microsoft.extensions.caching.memory;

namespace ade.tools.controllers

public homecontroller(iconfiguration configuration)

public static datetime starttime = datetime.minvalue;

public static listtablenames

public string connstr

public jsonresult start()

int size = int.parse(configuration["size"]);

string blacklist = configuration["blacklist"].split(",");

listtablenames = gettablenames();

listlogitems = new list();

listlogitemdtos = new list();

using (mysqlconnection mysqlconnection = new mysqlconnection(this.connstr))

' " +

$"order by event_time desc ")

//+ $"limit "

.tolist();

}logitemdtos.foreach(e =>

;if (tablenames.any(a => logitem.sql.contains(a))

&& !blacklist.any(b => logitem.sql.contains(b))

)});

return new jsonresult(logitems);

}public jsonresult slow()

);});

}return new jsonresult(slowqueries);

}public string on()

return "ok";

}public string off()

return "ok";

}public string clear()

return "ok";

}public iactionresult index()

private listgettablenames()

string tracedbs = configuration["tracedatabasenames"].split(",");

string sqltables = "select distinct table_name from information_schema.columns";

foreach (var db in tracedbs)

else

}using (mysqlconnection mysqlconnection = new mysqlconnection(this.connstr))

memorycache.set(cachekey, tablenames, timespan.fromminutes(30));

return tablenames;}}

}

開啟日誌會產生大量的檔案,需要注意定時清理

PostgreSQL 慢查詢SQL語句跟蹤

示例 啟用 sql 跟蹤 postgresql 日誌支援的輸出格式有 stderr 預設 csvlog syslog 一般的錯誤跟蹤,只需在配置檔案 postgresql.conf 簡單設定幾個引數,當然還有錯誤級別等要設定。logging collector on log destination ...

PostgreSQL 慢查詢SQL跟蹤操作

postgresql 開啟慢sql捕獲在排查問題時是個很有效的手段。根據慢sql讓我在工作中真正解決了實際問題,很有幫助。postgresql 日誌支援的輸出格式有 stderr 預設 csvlog syslog 一般的錯誤跟蹤,只需在配置檔案 postgresql.conf 簡單設定幾個引數,當然...

mysql 慢查詢分析

轉自花開的地方 mysql有乙個功能就是可以log下來執行的比較慢的sql語句,預設是沒有這個log的,為了開啟這個功能,要修改my.cnf或者在mysql啟動 的時候加入一些引數。如果在my.cnf裡面修改,需增加如下幾行 long query time 1 log slow queries lo...