none
SQLServerへのリクエストが時々失敗します

    質問

  • よろしくお願いします。

    SQL Server 2008 R2 のExpress版を利用しています。

    OSはWindows Server2008 Standardで、32bit版で、それをサーバとしてVB6の業務アプリケーションで使用しています。

    クライアント数は同時に、とはなりませんが50~100くらいはあるかと思います。

    以前は、Windows2003SBSとSQL Server 2000Workgroupを利用していた(やや情報がはっきりしていませんが・・・)を利用していました。

    サーバマシンが古くなってきたので、機器ごと変えて上記の構成にしたのですが、

    サーバを変えてからいくつかのクライアントマシンでSQL発行時にエラーが起こります(以前はありませんでした)。

    それも定期的に、必ず起こるわけではなく、同じ処理をしていてもたまに起こる、といった具合に起こります。

    また、起こったマシン名を元にSQLServerのログを確認しても、それらしい記述(エラーが起こったなど)は見当たりませんでした。

    現在も色々と調査しておりますが、問題の切り分け方として、次にどのようにすればよいかなど、ご存知の方がおられましたらご教示お願いします。

    2012年4月19日 4:11

回答

  • 機器の不調などによるネットワーク障害の可能性はありませんか? もしくはルーティングなどのネットワーク設定に問題があるのかもしれません。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2012年4月20日 6:00
  • タイムアウトが発生したということですが、ざっくり分けても、接続時のタイムアウト、クエリ実行時のタイムアウトが考えられます。
    まずは、そのどちらかであるかを判別することが重要だと思います。
    今アプリケーションで受け取れているエラーメッセージを全てここに書いてみてもらえると、何か分かるかもしれません。
    プロバイダ名やよく分からない番号とか出ていたら、それをすべてです。意外なところから、誰かが何か気付くかもしませんし。

    その結果、接続時のタイムアウトであれば、今まさにされているようなネットワークでの対処が有効である可能性が高まりそうです。

    いずれにしても、ピーク時に発生するということであれば、接続タイムアウト、クエリタイムアウトの値を延ばすという対処が必要に思います。

    2012年4月24日 11:27

すべての返信

  • > サーバを変えてからいくつかのクライアントマシンでSQL発行時にエラーが起こります(以前はありませんでした)。

    とりあえず、起きたエラーをここに書いてみるか、そのエラーメッセージでググってみるかしてみてはいかがでしょうか。
    あなた以外の人に何が起きているのか理解してもらうためには、もうちょっと説明をする必要があると思います。
    2012年4月19日 7:16
  • 説明が上手くなく、申し訳ありません。

    起こっているエラーのほとんどは、タイムアウトが発生した、というものでした。
    これにより、自前のアプリケーションのSQLを使用する処理がところどころで止まってしまい、問題となっています。

    ところが、何か情報や原因はないかとSQLServerのManagement Studioで
    [サーバ]-[管理]-[SQL Server ログ]-[現在]で
    ログを確認したところ、そのようなエラーの痕跡はなかったので、他にどこを確認すればよいか
    原因解明になるのか分からず、困っております。

    現在調査した段階ではクライアントの使用率がピークになる頃に起こっているので、接続数の問題だろうか
    と考えてもいますが、WindowsServerにもSQLServerにも同時接続数の制限という話を聞いたことは無いので
    その方向ではないだろうと考えています。

    2012年4月20日 5:45
  • 機器の不調などによるネットワーク障害の可能性はありませんか? もしくはルーティングなどのネットワーク設定に問題があるのかもしれません。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2012年4月20日 6:00
  • お返事たいへんありがとうございます。
    現在、当方もネットワーク障害の方向で考えております。
    今回の問題はサーバ機器を替えてからの現象ですので、とりあえずメーカーに連絡し、
    NICのあるマザーボードの交換をお願いすることにしました。

    # というより、こういう環境でのNICは、機器標準装備のものではなく
    # きちんとしたものを購入してセットしたほうが良かったりするのでしょうか・・・?


    • 編集済み rewip1978 2012年4月20日 8:44
    2012年4月20日 8:43
  • # というより、こういう環境でのNICは、機器標準装備のものではなく
    # きちんとしたものを購入してセットしたほうが良かったりするのでしょうか・・・?

    そんなことはないですよ。ただ、私の経験上、ドライバーに不具合があり、ドライバーをアップデートして安定したことがありました。このケースは、サーバーをリブートすると時々ネットワークが無効になるという現象でしたので、今回の件とはちょっと違うとは思いますが・・・


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2012年4月20日 9:18
  • タイムアウトが発生したということですが、ざっくり分けても、接続時のタイムアウト、クエリ実行時のタイムアウトが考えられます。
    まずは、そのどちらかであるかを判別することが重要だと思います。
    今アプリケーションで受け取れているエラーメッセージを全てここに書いてみてもらえると、何か分かるかもしれません。
    プロバイダ名やよく分からない番号とか出ていたら、それをすべてです。意外なところから、誰かが何か気付くかもしませんし。

    その結果、接続時のタイムアウトであれば、今まさにされているようなネットワークでの対処が有効である可能性が高まりそうです。

    いずれにしても、ピーク時に発生するということであれば、接続タイムアウト、クエリタイムアウトの値を延ばすという対処が必要に思います。

    2012年4月24日 11:27
  • こんにちは、rewip1978 さん。

    MSDN フォーラムのご利用ありがとうございます。オペレーターの山本です。

    みなさんから参考になるアドバイスをいただいていると思われましたので、勝手ながら一旦回答としてマークさせていただきました。
    いただいた情報の中で、解決に役立った投稿や、参考になる情報など有効な情報には回答としてマークすることをお願いしています。
    今後、同じ問題でこのスレッドを参照される方にも、有効な情報を活用いただけるかと思いますので、ご協力よろしくお願いいたします。
    アドバイスくださったみなさん、情報ありがとうございます。

    rewip1978 さん、一旦回答としてマークさせていただきましたが、その後何かわかりましたら、情報更新していただけるとうれしいです。
    _____________________
    日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海

    2012年5月2日 9:03
    モデレータ
  • 皆様、返事大変遅れまして申し訳ございませんでした。

    原因等分かりましたので、参考になるかどうかは不明ですが、ここに記載させていただきます。

    はじめにネットワークの障害を確認したのですが、問題は解決できませんでした。

    そこで、当方のプログラム側に問題があるという方針になり、確認作業を行っていましたところ、
    VB内で問題の起きた部分のあたりに、SQL文で

    ...WITH (UPDLOCK)...

    という構文が使用されており、これが以前(SQL Server 2000Workgroup)はUpdateのみロック、
    SELECT文はOKとなっていたものが、今回(SQL Server2008 R2)ではSELECT文も含めてロックがかかり、
    これが他のSELECT利用するプログラムでタイムアウトの原因になっていたようです。

    はたしてこれが仕様なのか、それともどこかDB側の設定によるものかはまだ自分も分かっていませんが、
    とりあえずこれ(UPDLOCK)を用いない方法があるということでプログラムを変更してみたところ、今回の問題は解決いたしました。

    みなさま大変お騒がせしました。問題に関してはこれでクローズとさせていただきます。
    ありがとうございました。

    2012年5月11日 2:54