簡體   English   中英

ODBC DSN減慢MSSQL超時

[英]ODBC DSN slows MSSQL to timeouts

Windows XP SP3下的MS SQL Server 2008 R2中有數百萬個記錄數據庫。

我的同事編寫了一個.Net應用程序,該應用程序直接連接到該數據庫並運行合理數量的查詢。 我不知道.Net,但是我確定該應用程序不會使用ODBC連接到DB。

另一方面,我編寫了一個命令行python(CPython版本2.7.5)應用程序,該應用程序連接到該數據庫並對其運行簡單查詢,以將數據通過Internet發送到其他地方。 使用pyodbc 3.0.7(來自http://www.lfd.uci.edu/~gohlke/pythonlibs/的安裝程序)和使用SQL Server Native Client 10.0驅動程序的DSN建立數據庫連接。 我嘗試在Windows Data Sources (ODBC)小程序的“ Connection Pooling選項卡中禁用和啟用此驅動程序的Connection Pooling 該腳本從數據庫發送100條記錄,然后關閉連接並休眠2分鍾,然后再次運行。

這兩個程序都與db在同一台計算機上持續運行。

問題是,當我刪除定義的DSN時,.Net應用程序運行良好(當然python腳本未運行)。 當我再次定義DSN並啟動python腳本以並行運行.Net應用程序時,大約5個小時沒有問題。 但是隨后,盡管python腳本基本沒問題,.Net應用程序開始從數據庫獲取超時。

發生這種情況可能會出錯嗎?

編輯:

python腳本(使用ODBC連接)始終運行良好。 但是.Net應用幾個小時后就落后於常規性能。 當我關閉python腳本時,.Net應用程序仍然停留在后面。 但是,當我刪除為python腳本定義的ODBC DSN時,.Net應用程序將恢復正常性能。 真奇怪 正如我說的,我對.Net一無所知,所以這可能是.Net應用程序部分的非標准代碼所致,可能是打開的事務,鎖,太多的連接等。通過刪除記錄和重建索引將數據庫大小減半,到目前為止,似乎已經解決了.Net應用程序問題。

編輯2:

python腳本運行的唯一兩個查詢是:

SELECT TOP 100 FROM tbl_data WHERE id > ? ORDER BY id

SELECT * FROM tbl_data WHERE id = ?

第一個查詢通常在python腳本的每次運行中僅運行一次。 第二個最多運行100次。 id是主鍵,因此也被索引。 如您所見,查詢再簡單不過了。 對於第一個查詢,我讀取了程序中的整個結果集,以使游標未在DB服務器上保持打開狀態。 另外,我還關閉了我正在使用的驅動程序的ODBC applet中的連接池,因此,在每次運行腳本后,都應該釋放數據庫連接,並且應該釋放數據庫服務器上的所有資源。 該腳本將休眠2分鍾,然后重復此過程。

.Net應用程序運行的查詢要復雜得多,再加上數據庫上的一些觸發器。 奇怪的是,它本身運行得很好。 但是,定義DSN后,它會在單個插入語句上開始等待很長時間,這有時會導致超時。

我還應該說Windows和MSSQL不會使用Microsoft的最新修補程序進行更新,因此,如果它是ODBC驅動程序中的錯誤或MSSQL本身,則可能已經為其他人解決了。

編輯3

表聚集在PK索引上。 數據表現在包含約150萬條記錄。 數據庫大小約為160GB。 服務器的規格不高。 Intel Core i7 2600、4GB RAM,1TB普通SATA磁盤驅動器。

有很多因素會影響性能。 可能存在資源爭用,SQL Server配置欠佳,磁盤速度慢,索引丟失等...

我將首先在兩個進程都運行時監視系統資源。 您可以使用perfmon來監視OS和SQL計數器。 我將從看

  • ProcessorInformation /%ProcessorTime

    邏輯磁盤/平均磁盤秒/讀取

    邏輯磁盤/平均磁盤秒/寫入

    內存/可用兆字節

    SQLServerBufferManager / BufferCacheHitRatio

    SQLServerBufferManager / PageLifeExpectency

這是一篇有關使用perfmon的精彩文章, http: //www.brentozar.com/archive/2006/12/dba-101-using-perfmon-for-sql-performance-tuning/

下一步是優化查詢和SQL Server性能。

查詢性能, http://technet.microsoft.com/zh-cn/magazine/2007.11.sqlquery.aspx SQL Server性能,

  • -將不同卷上的數據和日志文件分開(最好使用raid 10)

    -tempdb( http://technet.microsoft.com/zh-cn/library/ms175527 (v = SQL.105) .aspx

    -配置最小/最大內存

    -配置內存中的鎖定頁面和即時文件初始化

    -檢查此鏈接, http: //www.brentozar.com/sql/sql-server-performance-tuning/

關鍵是,有太多可能影響數據庫的可能性,幾乎不可能根據所提供的信息來確定問題。 我建議您仔細閱讀所有這些內容,以找出系統運行不正常的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM