2010-11-17 69 views
0

今年早些時候,我們從SQL Server 2005遷移到2008年,升級後我們發現獲取表和視圖的元數據以及它們各自的列需要大約15分鐘2008與以前幾乎立即在2005年相比。在SQL Server 2008上獲取元數據 - 極其緩慢

簡而言之,這裏是基本的java代碼,需要15分鐘才能完成,並將我們的服務器利用率降低到接近100%。模式變量是對保存從此查詢返回的信息的內部對象的引用。

Connection con = db.open(); 
DatabaseMetaData metaData = con.getMetaData(); 
String types[] = { "TABLE", "VIEW" }; 
ResultSet resultSet = metaData.getTables(null, null, "%", types); 
while (resultSet.next()) 
{ 
    schema.addTable(tableName); 

    ResultSet columnSet = metaData.getColumns(null, null, tableName, "%"); 
    while (columnSet.next()) 
     schema.addColumn(tableName, columnSet.getString(4)); 
    columnSet.close(); 
} 
resultSet.close(); 

我們在這個問題上很努力地搜索了谷歌,似乎是2008 R2版本應該解決一些模式加載性能問題。缺少昂貴的升級費用,其他人是否有任何關於如何提高查詢性能的好主意?

僅供參考 - 我們正在使用最新的jTDS驅動程序。使用Microsoft的Java驅動程序時,我們也注意到了類似的性能。

+0

你看過數據庫日誌,看看它在數據庫方面做了什麼?你也可以讓驅動程序準確輸出它想要做什麼嗎? – 2010-11-17 15:32:52

+0

是的,對數據庫端sp_columns的調用每個表的平均值爲0.7秒。我們有1,354個表格和視圖,大約15.79分鐘。所以sp_columns調用就是問題所在。我們可以通過從INFORMATION_SCHEMA.COLUMNS中獲取來編寫我們自己的存儲過程,以更快的速度完成這項工作,但是以這種方式調用它的想法是保持我們的產品數據庫不可知。如有必要,我們會去存儲的proc路線。 – rmmeans 2010-11-17 15:48:05

回答

0

請參閱this post,並嘗試將SQL Server 2008的數據庫兼容級別切換爲100.也許如果您將數據庫從2005年移至2008年,那麼性能將會從此出現。