0

SQL Server 2000 データベースを使用して従来の ASP で記述されたサイトの問題を解決しようとしています。

数日おきに、サイトがダウンしているようです。Web サイトにアクセスしようとしても応答がありません。ブラウザーの読み込みインジケーターが回転し、ページは空白のままになります。

サイトがダウンした後に sp_who2 を実行すると、大量の CPU 時間を占有するプロセスが常に存在します。このプロセスは、データベース内の他のすべてのプロセスをブロックします。

このプロセスを強制終了することで、サイトを再び機能させることができます。

何が起こっているのかわかりません。このプロセスがロックされる前に実行されたストアド プロシージャを見ると、何も問題はありません。このストアド プロシージャを実行するページは、すべての接続オブジェクトを閉じます。

このデッドロックの原因、またはそれを防ぐ方法についてのアイデアはありますか?

4

1 に答える 1

1

これが問題かどうかはわかりませんが、すべてのレコードセットと接続が常に閉じられているわけではない可能性があります...過去に同様の問題が発生したとき、次のルーチンで終了しました.. (これは単なるスニペットであることに注意してください1 つのレコードセットを閉じると、実際の手順では、実際に 15 の異なるレコードセットを調べて、それらを閉じる必要があるかどうかを確認します.. )。

modCloseObjects () プロシージャは、ページの最後、リダイレクトの前、エラー処理内などで常に呼び出されます...

' subroutine will close and set the objects to Nothing. '
' Close Recordsets and then the Connection '
sub modCloseObjects()

    'Close the record sets one by one '
    If ucase(TypeName(oRS)) = "RECORDSET" then
        if oRS.state <> adStateClosed then
            oRS.close
            Set oRS = Nothing
         end if
    end if

    ' if you have other recordSet objects, add them to the rourtine here: '


    ' Close the connection '

    If ucase(TypeName(objConn)) = "CONNECTION" then
        if objConn.state <> adStateClosed then
             objConn.close
             Set objConn = Nothing
        end if
    end if

end sub

adovbs.inc がない場合は、次の定数も必要になります。

Const adStateClosed = &H00000000
于 2012-09-26T14:29:30.313 に答える