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

ブロックされた SQL プロセスの識別とブロックの解除

2016 年 10 月 27 日 - 機械翻訳について
その他のバージョン: PDFpdf | ライター翻訳版 (2014 年 3 月 18 日) | 英語版 (2015 年 8 月 22 日) | フィードバック


目次


概要

このドキュメントでは、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

/image/gif/paws/22156/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