コラボレーション : Cisco ICM Logger

ブロックされた SQL プロセスの特定および終了

2014 年 3 月 18 日 - ライター翻訳版
その他のバージョン: PDFpdf | 機械翻訳版 (2013 年 8 月 21 日) | 英語版 (2006 年 9 月 18 日) | フィードバック

概要

このドキュメントでは、Cisco Intelligent Contact Management(ICM)システムで、他のプロセスをブロックしている Microsoft SQL プロセスを特定して削除する方法について説明します。他のプロセスがハングしているような錯覚を与えるため、他のプロセスをブロックしている SQL プロセスを特定することは重要です。実際にはプロセスはハングしておらず、ブロックしているプロセスによってリソースが解放されるのを待機しているだけです。

前提条件

要件

次の項目に関する知識があることが推奨されます。

  • Cisco ICM のデータベース アーキテクチャ

  • Cisco ICM のレポート アーキテクチャ

  • Microsoft SQL クエリ ユーティリティ(Microsoft SQL サーバ バージョン 7.0 または 2000 のクエリ アナライザ、または Microsoft SQL サーバ バージョン 6.5 用の ISQL_W)

使用するコンポーネント

このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づくものです。

  • Cisco ICM バージョン 4.6.2 以降

  • Microsoft SQL サーバ バージョン 6.5 以降

このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されたものです。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。対象のネットワークが実稼働中である場合には、どのような作業についても、その潜在的な影響について確実に理解しておく必要があります。

表記法

ドキュメント表記の詳細は、『シスコ テクニカル ティップスの表記法』を参照してください。

ブロックされたプロセスの診断

SQL プロセスが他のプロセスをブロックしていないかを判別するには、保存された sp_who コマンドを、クエリ アナライザ(Microsoft SQL サーバ バージョン 7.0 または 2000)または ISQL_W(Microsoft SQL バージョン 6.5)で実行する必要があります。

次の図は sp_who コマンドを実行した場合の仮定的な結果を示しています。

図 1:sp_who

BLOCK-1.gif

プロセスの BlkBy 列に値がある場合、その値をサーバ プロセス ID(SPID)に持つプロセスによって、プロセスがブロックされていることを示します。この例では、SPID 9 のプロセスが、SPID 13 のプロセスをブロックしています。このために、SPID 13 のプロセスは終了できずにいます。

ブロックされたプロセスのソースの特定

ブロックされているプロセスとブロックしているプロセスを特定できたら、次のステップは、ブロックしているプロセスのソースを特定して、それを終了できるようにすることです。

sp_who の結果ウィンドウの HostName 列と Login 列を使用して、ブロックしているプロセスのソースを診断することは可能ですが、多くの場合、この方法ではプロセスの動作について必要なすべての詳細情報を入手できない可能性があります。このような情報を入手できる可能性がある 1 つの方法は、ブロックしているプロセスのソースであるマシンに移動して、ハングしている ISQL_W、クエリ アナライザ、または Enterprise Manager セッションがないかを確認することです。

もう 1 つの方法は、プロセスが実行しているクエリの一部を確認して、その他の識別情報を入手することです。次のコマンドを実行します。

dbcc
inputbuffer(<x>)

上記のコマンド構文で、「x」は、ブロックしているプロセスの SPID を示しています。図 1 に示した sp_who コマンドのデータを使用する場合、「x」は「9」になります。次に示すのは、dbcc inputbuffer コマンドを実行した場合の仮定的な結果です。

図 2:dbcc inputbuffer

BLOCK-2.gif

dbcc inputbuffer コマンドによるクエリを表示することはできますが、このクエリが意図する情報は未だ得られていない可能性があります。このようなケースで、sp_who コマンドの結果によっても HostName が明確に特定されない場合は、次のような標準の SQL および DOS ネットワーキング コマンドを実行して、ソースの IP アドレスとホスト名を特定します。

  1. ブロックしているプロセスの SPID で次の SQL クエリを実行し、マシンの MAC アドレスを取得します。

    select * from master.dbo.sysprocesses where
    spid = <y>
    

    このクエリで「y」はブロックしているプロセスの SPID を示し、「9」(図 2 を参照)に置き換えられます。

    net_address 列には、指定した SPID に対応するマシンの MAC アドレスが含まれます。

  2. 次の DOS ネットワーキング コマンドを DOS ウィンドウで実行し、この MAC アドレスに対応する IP アドレスを特定します。

    arp
    -a
    

    このコマンドでは、接続されているすべてのマシンの IP アドレスが表示されます。

  3. sysprocesses クエリ(手順 1)の net_address 値と、arp -a の結果(手順 2)の対応する物理アドレスを照合します。これにより、物理アドレスに対応する IP アドレスが、ブロックしているプロセスを実行しているマシンの IP アドレスであるかを確認できます。次の DOS ネットワーキング コマンドを DOS ウィンドウで実行して、このマシンに対応するホスト名を見つけます。

    ping -a
    <IPaddress>
    
    

    このコマンドで、<IPaddress>arp -a コマンドで特定した IP アドレスを示します。

    ブロックしているプロセスを実行しているマシンの IP アドレス、ホスト名、またはその両方がわかれば、ブロックの根本的な問題を探し出すことが容易になります。

ブロックされたプロセスの終了

ブロックしているプロセスを終了する方法は 3 つあります。

  • ブロックしているプロセスを実行しているマシンに移動して、Microsoft SQL サーバに接続しているアプリケーションを特定します。アプリケーションをシャットダウンできる場合は、終了します。

    注:アプリケーションの終了には時間がかかる場合があります。これは、アプリケーションが実行している処理の性質によって異なります。さらに、Microsoft SQL サーバでは、この終了プロセスによって、アプリケーションが開始したコミットされていない処理のロールバックもトリガーされます。これが、問題のプロセスを終了する最も安全な方法です。

  • 次の SQL コマンドで、ブロックしているプロセスを強制終了します。

    kill
    <z>
    
    

    このコマンドで、<z> はブロックしているプロセスの SPID です。

    注意 注意:ブロックしているプロセスを kill コマンドで終了すると、ブロックしているプロセスがデータベースの更新を実行している場合に SQL データベースを破損する可能性があるため、これは非常に危険な方法です。また、ブロックしているプロセスが kill プロセスで元に戻す(ロールバックする)必要のある多くの処理を実行している場合、kill コマンドが終了するまでに時間がかかる場合があります。kill コマンドの詳細は、SQL オンライン ブックを参照してください。この資料は、Microsoft SQL サーバのインストール メディアにも収録されています。

  • ブロックしているプロセスを終了する最後の方法は、ブロックしているプロセスを実行しているマシンをリブートすることです。

    注:Microsoft SQL サーバに接続されているアプリケーションが正常にシャットダウンされないため、kill コマンドを実行する場合と同様に、ブロックしているプロセスをこの方法で終了するのは非常に危険です。

関連するシスコ サポート コミュニティ ディスカッション

シスコ サポート コミュニティは、どなたでも投稿や回答ができる情報交換スペースです。


関連情報


Document ID: 22156