Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データベース・パフォーマンスのモニタリングと改善 » アプリケーション・プロファイリングのチュートリアル » チュートリアル:デッドロックの診断

 

レッスン 2:デッドロックの作成

このチュートリアルは、テスト・データベースが作成されていることを前提としています。テスト・データベースを作成していない場合は、レッスン 1:テスト・データベースの作成を参照してください。

ヒント

このチュートリアルの SQL 文をコピーして Interactive SQL にペーストできます。

♦  デッドロックを作成するには、次の手順に従います。
  1. Sybase Central を起動し、ユーザ ID に DBA、パスワードに sql を使用してテスト・データベース app_profiling.db に接続します。

    Sybase Central の起動とデータベースへの接続の操作に慣れていない場合は、ローカル・データベースへの接続を参照してください。

  2. 左ウィンドウ枠で、app_profiling - DBA をクリックし、[ファイル] - [Interactive SQL を開く] を選択します。

    Interactive SQL が起動し、app_profiling.db データベースに接続します。

  3. Interactive SQL で、次の SQL 文を実行します。

    1. テーブルを 2 つ作成します。

      CREATE TABLE "DBA"."deadlock1" (
         "id" UNSIGNED BIGINT NOT NULL DEFAULT AUTOINCREMENT, 
         "val" CHAR(1) ); 
      CREATE TABLE "DBA"."deadlock2" ( 
         "id" UNSIGNED BIGINT NOT NULL DEFAULT AUTOINCREMENT, 
         "val" CHAR(1) );
    2. 各テーブルに値を挿入します。

      INSERT INTO "deadlock1"("val") VALUES('x');
      INSERT INTO "deadlock2"("val") VALUES('x');
    3. 後でデッドロックを発生させるために使用する 2 つのプロシージャを作成します。

      CREATE PROCEDURE "DBA"."proc_deadlock1"(  ) 
         BEGIN 
            LOCK TABLE "DBA"."deadlock1" IN EXCLUSIVE MODE; 
            WAITFOR DELAY '00:00:20:000'; 
            UPDATE deadlock2 SET val='y'; 
         END; 
      CREATE PROCEDURE "DBA"."proc_deadlock2"(  ) 
         BEGIN 
            LOCK TABLE "DBA"."deadlock2" IN EXCLUSIVE MODE; 
            WAITFOR DELAY '00:00:20:000'; 
            UPDATE deadlock1 SET val='y'; 
         END;
    4. データベースに加えた変更をコミットします。

      COMMIT;
  4. Interactive SQL を終了します。