最近、新しい仕事に就いたのですが、その仕事には別のデータベース サーバーと通信する Web サーバーがあります。最近、次のような ASP ページを実行するとデッドロック エラーが発生するようになりました。
エラー: MSSQL 2kTransaction (プロセス ID 103) は、別のプロセスとのロック リソースでデッドロックされ、デッドロックの対象として選択されました。トランザクションを再実行してください。
上記のエラーは、asp ページが MSSQL 2k データベースにアクセスしようとしたときに発生します。
彼らはサーバーの問題だと考えているので、私に対処を依頼しました。どんな助けでも大歓迎です。
答え1
通常、デッドロックはデータベース設計の問題、またはアプリケーションがデータベース リソースにアクセスする方法の不一致が原因で発生します。インフラストラクチャではなく、データベースに変更を加えることで、問題の解決策が見つかることがよくあります。デッドロックは機能テストでは見つからないことがよくありますが、パフォーマンスとスケーラビリティのテストでは見つかる傾向があります。
トレースを使用すると、より詳細な情報が SQL ログに記録され、開発チームを支援できます。
例: DBCC TRACEON (3605,1205,-1) - ログ メッセージのキャプチャが完了したら、必ずこれをオフにしてください (DBCC TRACEOFF)。
次に、SQL インストールでよくある事項を確認します。
- それがSP4
- 適切なハードウェア設定 (ログ ファイルは RAID 1 ドライブ、データ ファイルは RAID 5 ドライブ、tempdb は RAID 1 ドライブ、バックアップは RAID 5 ドライブ) を備えています。これは、実際のサーバーにとって最低限必要な設定です。
- メンテナンス プランが設定されています (バックアップ、インデックスの再構築、整合性チェック、統計の更新)。SQL 2000 には、このためのメンテナンス プラン ウィザードがあると思います。
最後に、SQL 2008 R2 への移行計画を開始します。SQL 2000 は現在メインストリーム サポートが終了しており、2013 年には延長サポートが終了します。
答え2
理解する必要があるなぜデッドロックが発生します。製品ドキュメントの指示に従ってください。デッドロックの検出と終了そしてデッドロックのトラブルシューティング。
デッドロックの情報がなければ、デッドロックを解決する方法を事前に言うことは不可能です。通常、解決策は、データ モデルを変更する (例: 不足しているインデックスを追加する) か、アプリケーション設計を修正する (アクセス パターンとクエリを変更する) ことです。