sql >> データベース >  >> RDS >> Sqlserver

ADO.NETがT-SQLストアドプロシージャを呼び出すと、SqlTimeoutExceptionが発生します

    問題の根本にあるのはADO.NET接続であると判断すると、このスレッドが答えにつながりました。

    基本的に、SQL Server Management Studio(SSMS)を介した接続には、デフォルトでSET ARITHABORT ONがあります。 。 ADO.NET接続はそうではありません。

    ARITHABORT OFFの設定 SSMSを介してクエリを直接実行すると、同じように応答時間が遅くなります。

    この設定の有無にかかわらず実行する場合の主な違いは、2つの呼び出しに対して異なるクエリプランが作成されることです。 ARITHABORTの場合 OFFでした 、SSMSコマンドは、ADO.NET接続が使用していた、事前にコンパイルされたキャッシュクエリプランを使用するため、タイムアウトになります。

    データベースの管理者として次のコマンドを実行すると、ARITHABORTに関係なく、すべてのクエリが期待どおりに実行されます。 設定。

    DBCC DROPCLEANBUFFERS
    DBCC FREEPROCCACHE
    

    コンパイルされたクエリプランが破損しているか、無効になっているとしか考えられません。

    私は他のスレッドの解決策としてこれを使用します(私は答えに賛成しました)

    ありがとう。



    1. Oracleで文字列内の単語数をカウントするにはどうすればよいですか?

    2. データベース名を指定せずにPostgreSQLに接続するにはどうすればよいですか?

    3. docker-composeによるpostgresへのDjango接続

    4. Oracleの複数のREPLACE関数