2016-09-21 37 views
0

我正在使用Sybase ASE和一個表,其中我將保存由Java計算的結果。此表有10列,其中一列的類型爲INT值(但不是ID列),其他9列均爲VARCHAR(50)類型。是否有一個參數加速Sybase插入

這張表沒有索引或觸發器(實際上這個表真的是獨立的)。我需要將約160K行插入此表中。我試圖按批次分開工作,每次都會進行10,000次插入。我使用了兩種不同的方式,一種是Spring的JdbcTemplate.batchUpdate另一種是原生JDBC PreparedStatement.executeBatch api。

然而,沒有明確的表現贏家。對於10K插入,它們都需要大約25到30秒。

然後我認爲它可能與JDBC驅動程序有關,所以我嘗試了兩種不同的驅動程序:jConnect和jTDS。對插入性能沒有實際影響。

最後,我決定將Sybase與另一個數據庫(即我的測試中的PostgreSQL)進行比較。我保留了相同的Java代碼,令人驚訝的是PostgreSQL每10K插入只需要0.3秒,而Sybase花費25到30秒(75到100倍)。

DBA支持團隊解釋了這種差異,原因是PostgreSQL安裝在本地計算機上,而Sybase安裝在企業服務器上。但是,我完全不相信這個解釋。

有誰知道在Sybase中是否有可能會大幅影響插入速度的配置?還是有任何其他可能的原因,我的上述情況?

回答

0

數據庫服務器是否本地可能確實會產生重大差異。直到你刪除這個因素,與本地數據庫的比較沒有多大意義。

但是,除此之外,影響ASE插入性能的因素很多。首先,確保整個內存配置(例如數據緩存和過程緩存)不會太小 - 將其保留在安裝缺省值是保證令人失望的結果。然後有網絡包大小可以發揮作用。批量大小(提交之前的#rows)。和桌子的鎖定方案。 嘗試使用最少記錄的插入將有助於(需要配置設置更改),特別是因爲表沒有索引(並且沒有UNIQUE或PK約束?) ASE服務器頁大小(您在創建服務器時選擇的)也有所作爲:更大的插入基本上更好。

1

您在sybase上看到的延遲是因爲需要檢查很多因素,並將其與本地計算機上不同的數據庫進行比較,這些數據庫不正確。

對於啓動,我們需要檢查網絡延遲和sybase數據庫中使用的存儲。我們需要檢查要插入的表的sybase服務器配置,頁面大小和鎖定方案。我們還需要在插入數據時對服務器進行基本的運行狀況檢查。正如您所提到的,您已經使用了兩種不同的方式來插入數據,重要的是檢查這兩種方式是否相應地更新了您已安裝在系統上的sybase客戶端。

總結一下,它可能是一個簡單的問題,因爲它可能會阻塞sybase實例,或者它可能與無法快速寫入的存儲有關。鑑於sybase配置正確,性能會非常好。