4

Windows XPクライアントからのWindows認証を使用すると、SQL Server 2005へのリンクテーブルを持つMicrosoft Accessアプリケーションが遅くなります。MS Access 2003 + SQL Server 2005 + Windowsへのリンクテーブル+ 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ネットワークプロトコルがサーバー上で有効になっています。

遅さがこのような状況で発生しません:

  • のApp DB上のサーバー、SQL Server認証
  • のApp DB上のサーバー、Windows認証
  • アプリケーションのWindows XPクライアント上で、 SQL Server認証
  • クライアント上のSQL Server Management Studio、Windows認証 - SQL MSで15個のクエリを実行して小さなテストを行いました。これは速くなり、サーバーのセキュリティイベントログにログオン/ログオフイベントが発生しませんでした。

私は、サーバー上のSQL Serverプロファイラを使用して遅さと、イベントログを解析したのだが、これに降りてくるようだ:

  1. アプリケーションがクエリ
  2. への新しい接続を実行します
  3. ユーザーの身元が確認されます(サーバーのセキュリティイベントログに表示され、ログオン/ログオフイベントが発生します)。これには数百ミリ秒かかります。
  4. クエリが
  5. 結果が

これは、すべてのクエリのために起こるにアクセスするために返されるSQL Server上で実行されます。フォームの中には、新しいレコードを表示するとき(サブフォームの更新、コンボの値の読み込みなど)に+ - 10のクエリを実行するものがあります。その結果、パフォーマンスが非常に低下します。

もちろん、クエリごとにSQL Serverへの新しい接続を設定する必要はなく、接続を再利用することで問題を解決できる場合があります。私は、Access/ODBCが適切な接続プーリングを実行するかどうかを調べる方法について調べてきました。私は、AccessアプリケーションのメインフォームからにSQLSetEnvAttr関数を呼び出す試みた

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

が、これは結果を改善しませんでした:私は、これらのMS KB記事を見つけました。

ご協力いただきまして誠にありがとうございます。

+0

また、認証を行っているドメインコントローラの名前を解決するクライアントでDNSの問題がないことを確認することもできます。私は、DNSの問題が、Access/ODBC/SQL Serverの奇妙な問題の原因であり、関連していない可能性があることを発見しました。 –

+0

私はフェントンが正しい道にあると思う。フロントエンドアプリケーションは、SQL Serverインスタンスとは異なるドメイン/フォレストで実行されていますか? – JohnFx

+0

接続文字列を投稿できますか?あなたの地域の価値をobfusticateしてください。 :) –

答えて

0
+0

最新のSQL Server Native Client(https://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=536fd7d5-013f-49bc-9fc7-77dede4bb075)をインストールしようとしました。これには、同じバージョンのSQL ODBCドライバ(2000.85.1132.00)が含まれています。これにはSQL Native Clientの2005.90.4035.00が含まれます。私はこの接続文字列でこれを使用しようとしました: Driver={SQL Native Client};Server=[server name];Connect_Timeout=300;Trusted_Connection=Yes;APP=Microsoft Office 2003;DATABASE=[db name] 同じ結果、まだ遅いです。 – AronVanAmmers

3

でのMicrosoft SQL Serverネイティブクライアント を確認してください:あなたは、ドメインコントローラを実行していますか?これは狂った質問のように聞こえるかもしれませんが、私は確信しています。一般的ではありませんが、私は組織がワークグループとパススルー認証でWindowsネットワークを実行しているのを見てきました。あなたが記述する症状は、このように設定されたネットワーク上で観察される症状と同じです。

適切なドメインが設定されていると仮定すると、名前付きパイプネットワークスタックのどこかに問題がある必要があります。 Windows認証を使用している場合、Named Pipesはデフォルトのプロトコルです。それはあなたが時間を持っている場合は、このの底に取得することは悪い考えではないですが、あなたは自分のパフォーマンスの問題を修正したい場合は、その後、私はあなたの接続文字列で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認証のデフォルトプロトコルです。また、サーバー上のNamed Pipesサポートを無効にすることによってプロトコルを切り替えることもできますが、これは面倒であり、予期せぬ他の問題を引き起こす可能性があります。

+0

ドメインコントローラを使用していますか? あなたの提案は有望だとは思えますが、助けにはなりませんでした。名前付きパイプは既にサーバー上で無効になっていることが判明しました。したがって、TCP/IPがクライアントとSQLサーバーの間のネットワークプロトコルとして使用されていることが確認できます。 – AronVanAmmers

+0

これは助けになりません申し訳ありません。サーバー上で名前付きパイプを有効にしようとしましたか?クライアントが名前付きパイプ接続を試みていて、TCP/IPにフェールオーバーしていると、フェールオーバーによってパフォーマンスが低下する可能性があります。もちろん、サーバーがMSネットワーキングポートがブロックされている最悪の壁の背後にある場合、これは機能しません。 –

+0

名前付きパイプを有効にしてみると、報告されます。また、なぜWindows認証ではなく、なぜSQL Server認証が高速で、なぜAccessからのほとんどすべてのクエリでSQL Serverマシンがログオン/ログオフイベントを行うのかについて説明しますか? – AronVanAmmers

関連する問題