之前的工作一直使用的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...