4

從Windows XP客戶端使用Windows身份驗證時,我們使用SQL Server 2005鏈接表的MS Access應用程序速度很慢。MS Access 2003 +將錶鏈接到SQL Server 2005 + Windows身份驗證=緩慢

我們一直在使用SQL Server身份驗證成功運行它,但現在我們想要轉移到Windows身份驗證以獲得更好的安全控制。

設置:

  • 數據庫服務器:Windows 2003服務器,SQL Server 2005 SP2的
  • 客戶端:WINDOWS XP SP3,SQL Server ODBC驅動程序v2000.85.1132.00
  • MS Access應用程序:MS訪問2003
  • 連接字符串:
    DRIVER=SQL Server;SERVER=[server name];Connect Timeout=300;Trusted Connection=True;APP=Microsoft Office 2003;WSID=[server name];DATABASE=[db name]
  • 只有TCP/IP網絡協議在服務器上啓用。

的緩慢並在這些情況下發生:

  • 應用的數據庫服務器,SQL Server身份驗證
  • 應用的數據庫服務器,Windows身份驗證
  • 應用程序的Windows XP客戶端上, SQL Server身份驗證
  • 客戶端上的SQL Server Management Studio,Windows身份驗證 - 我在SQL MS中運行15個查詢做了一個小測試。這很快,並沒有導致服務器上的安全事件日誌中的任何登錄/註銷事件。

我已經分析了使用SQL Server Profiler和服務器上的事件日誌緩慢,似乎歸結爲這樣:

  1. 應用程序運行一個查詢
  2. 到一個新的連接SQL Server已打開(在SQL Server Profiler中可見)
  3. 驗證用戶身份(在服務器上的安全事件日誌中可見,發生登錄/註銷事件)。這需要幾百毫秒。
  4. 查詢SQL Server上運行
  5. 結果返回給訪問

發生這種情況,每次查詢。某些表單在顯示新記錄(更新子表單,裝載組合值等)時運行+ - 10查詢。這導致性能非常低下。

當然,爲每個查詢建立到SQL Server的新連接不是必需的,重用連接可能會解決問題。我一直在尋找有關如何確保Access/ODBC執行正確連接池的信息。我發現這些MS KB文章:

Frequently Asked Questions About ODBC Connection Pooling
How to Enable Connection Pooling in an ODBC Application

我已經打過電話從Access應用程序的主要形式SQLSetEnvAttr功能,但是這並沒有改善的結果。

任何幫助是極大的讚賞。

+0

您可能還會檢查您是否遇到了解決正在進行身份驗證的域控制器名稱的客戶端的DNS問題。我發現DNS問題可能是Access/ODBC/SQL Server的各種奇怪問題的原因,這些問題似乎沒有關係。 – 2009-07-24 20:31:56

+0

我認爲芬頓正在走上正軌。前端應用程序是否在與SQL Server實例不同的域/林中運行? – JohnFx 2009-07-24 20:48:08

+0

你可以發佈你的連接字符串嗎?請體諒你的本地價值觀。 :) – 2009-07-27 20:42:19

回答

3

的第一個問題我已經是:你運行一個域控制器?這可能聽起來像一個瘋狂的問題,但我只是想確定。雖然越來越不常見,但我看到組織運行帶有工作組的Windows網絡和「直通」身份驗證。您描述的症狀與以此方式設置的網絡中觀察到的症狀相同。

假設您確實設置了正確的域,則必須在命名管道網絡堆棧中的某處出現問題。如果您使用Windows身份驗證,則命名管道是默認協議。這不是一個壞主意去的這條底線,如果你有時間,但如果你只是想解決您的性能問題,那麼我會迫使TCP/IP協議的連接字符串中:

DRIVER=SQL Server;SERVER=tcp:[server name];Connect Timeout=300;Trusted Connection=True;APP=Microsoft Office 2003;WSID=[server name];DATABASE=[db name] 

請注意添加tcp:前綴。我從Jon Galloway's blog.獲得了此語法TCP/IP是SQL Server身份驗證的默認協議。您還可以通過禁用服務器上的命名管道支持來使協議切換,但這更麻煩,可能會導致其他意外問題。

相關問題