5

4 時間実行されていたプロセスがあります。非常に長時間実行されていたため、データベースで他の問題が発生していたため、プロセスを強制終了することにしました。

現在、プロセスは中断状態にあります。また、sp_who2 を照会した後、それ自体がブロックされていることも示しています。

アクティビティ モニターでは、waitresource 情報は次のとおりです。

objectlock lockPartition=0 objid=xxx subresource=FULL dbid=2 id=lockyyyy mode=X associatedObjectid=xxx

objid と associatedObjectId が同じ値であることがわかります。

sys.objects テーブルを照会しても、そのオブジェクト ID の結果は表示されません。

Sql Server は、もう存在しないオブジェクトのロックを待っていますか? Sql Server を再起動せずにこのプロセスを取り除くにはどうすればよいですか? (DBA はヘルプ リクエストに応答していません)。

これはテスト環境ですが、変更の 1 つがプロセスがアクセスしていたオブジェクトの 1 つに影響を与えているため、データベースに変更をデプロイできないため、すべての開発/テストが停止していることに注意してください。

編集: アクティビティ モニターからの詳細情報: Command = 'KILLED/ROLLBACK' TASK STATE = 'SUSPENDED'

4

2 に答える 2

2

私はこれを5回経験しました。大規模な INSERT/UDPATE/DELETE ステートメントを強制終了すると、この状態から回復するのに (回復したとしても) 数時間かかることがあります。

statusonly で kill <spid> を実行します。

ROLLBACK プロセスのパーセンテージと推定待ち時間が表示されます。

0% または 100% と 0 の推定時間が表示されることがあります。じっと我慢していれば、いずれ回復するかもしれません。サーバーを再起動すると、ロールバック プロセスはオフラインで完了し、データベースは IN RECOVERY 状態を示し、通常はサーバーが回復するのを待つよりも高速になります。

回復プロセスが終了するまでユーザーはデータベースを使用できないことに注意してください。ただし、KILLED/ROLLBACK 状態の SPID が他のプロセスをロックしている場合は、再起動することもできます。

于 2016-02-20T00:29:27.423 に答える