2011-03-04 27 views
0

本網站上有很多人聲明:「優化性能是萬惡之源」。我現在的問題是我有很多複雜的SQL查詢,其中許多使用用戶在PL/pgSQL或PL/python中創建的函數。我的問題是,我沒有任何性能分析工具來顯示我,哪些功能實際上使查詢變慢。我目前的方法是排除各種功能,並花時間查詢每一個。我知道我也可以使用解釋分析,但我不認爲它會爲我提供有關用戶創建的函數的信息。對各種數據庫技術進行自動性能測試的可行方法?

我當前的方法非常繁瑣,特別是因爲PostgreSQL中沒有查詢進度,所以如果我選擇在太多的數據上運行它,有時候我必須等待查詢運行60秒。

因此,我正在考慮創建一個工具,它可以通過修改SQL查詢自動執行SQL查詢的性能分析,並在各種版本的實際處理時間內創建一個工具。每個版本都是簡化的版本,可能只包含一個用戶創建的功能。我知道我沒有描述如何清楚地做到這一點,而且我可以想到很多複雜的因素,但我也可以看到許多這些因素都有解決方法。我基本上需要你的直覺感覺這種方法是否可行。

另一個類似的想法是將查詢設置服務器設置work_mem運行到各種值,並顯示這將如何影響性能。

這樣的工具可以使用JDBC編寫,因此可以對其進行修改以適用於所有主要數據庫。在這種情況下,它可能是一個可行的商業產品。

+0

其實我們引用Don Knuth的話:「不成熟的優化是萬惡之源。」基本思路:1)在使其更快之前做好準備。 2)加快速度時保持正確。 3)知道何時停止使其更快。我不確定我在哪裏學到了這三個 - 也許是由Kernighan和Plauger編寫的編程風格的元素。 – 2011-03-04 15:15:16

回答

1

Apache JMeter可用於加載測試和監視SQL查詢(使用JDBC)的性能。它將不會修改你的SQL。

其實我不認爲任何工具可以簡化,然後重新運行你的SQL。那個「簡化」應該如何工作?

+0

我還沒有弄清楚簡化的細節,但一種方法可能是減少選定列的數量。一種不同的方式可能是用虛擬值替換任何用戶構建的函數(如果函數返回該值,則返回整數(如果返回該值)。也許可以通過刪除左連接來簡化它。有人聰明需要仔細考慮這一點。 – David 2011-03-04 15:16:15