透過 DBMS「外掛程式」或其他解決方案進行效能分析

透過 DBMS「外掛程式」或其他解決方案進行效能分析

我正在開發一個系統監控產品,目前專注於系統層級的效能。我們正在擴展到監控資料庫系統。現在我們可以從選定的 DBMS 中獲取簡單的性能信息,例如連接計數、磁碟 IO 速率、鎖定等待時間等。

然而,我們確實想要一種方法來測量進入 DBMS 的每個查詢的執行時間,沒有要求客戶端在其應用程式程式碼中實現監控。

一些潛在的解決方案可能是:

  • 位於客戶端和伺服器之間的某種代理。 SSL 可能是一個問題,而且它要求我們對每個 DBMS 進行逆向工程和實作網路協定。
  • 每個 DBMS 系統的插件,可在查詢進入時自動記錄效能資訊。

其他問題包括「匿名」SQL,即採用類似SELECT * FROM products WHERE price > 20 AND name LIKE "%disk%"和 生成 的內容SELECT * FROM products WHERE price > ? AND name LIKE "%?%",儘管透過一些巧妙的解析和正規表示式這應該不會太困難。

我們主要關注:

  • MySQL
  • SQL資料庫
  • 甲骨文
  • 雷迪斯
  • 蒙古資料庫
  • 記憶體快取

我們是否可以利用任何插件式機制來實現這些功能?或者有更簡單的解決方案嗎?

答案1

沒有適用於所有資料庫的通用解決方案。嘗試測量 Oracle 上的查詢回應時間是非常困難的。我沒有對 memcache/nosql 資料庫進行過效能分析。

對於 mysql 有mysql代理- 可以輕鬆編寫腳本。但是,您可能會從慢速查詢日誌(閾值為零)中獲得所需的一切。我使用的是修改後的版本這個腳本“匿名”我的查詢。

有一些(非常昂貴的)工具,例如 Compuware 的 client vantage,可以嗅探網路流量並推斷各個層(包括資料庫)的效能指標。我所知道的唯一可比較的免費軟體工具是週一過去其中(AFAIK)不提供測量持久 TCP 連線上的資料庫回應時間所需的深度檢查。

雖然可以透過網路服務匯集所有存取來捕獲所有指標,但這會在事務中引入延遲。對於任何代理類型操作都是如此 - 但對於透過 SSL 的非持久連接來說尤其痛苦。

您是否考慮過如何收集/維護/分析所有這些數據?您可能想看看石墨

您使用什麼類型的客戶端?在開始查看資料庫之前,您應該測量客戶端的回應關係 - 只有當您遇到效能問題時才需要開始擔心資料庫效能。如果客戶端是一個網頁瀏覽器,那麼這是一個簡單得多的任務。只需將您的網頁伺服器設定為記錄回應時間並開始混合資料即可。您甚至可以添加簡單的附加元件來測量頁面響應 - 這是感知性能的更好指標 - 例如雅虎的迴旋鏢

相關內容