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

SQL Anywhere 12.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Performanceverbesserungen, Diagnosen und Monitoring » Praktische Einführungen in die Anwendungsprofilerstellung » Praktische Einführung: Deadlocks diagnostizieren

 

Lektion 1: Einrichten der Datenbank

Deadlocks treten auf, wenn zwei oder mehr Transaktionen einander blockieren. Beispiel: Transaktion A erfordert Zugriff auf Tabelle B, aber Tabelle B ist von Transaktion B gesperrt. Transaktion B erfordert Zugriff auf Tabelle A, aber Tabelle A ist von Transaktion A gesperrt. Es entsteht ein zyklischer Blockierungskonflikt.

Ein Anzeichen für Deadlocks ist die Rückgabe von SQLCODE -306 und -307. Um einen Deadlock aufzulösen, setzt SQL Anywhere automatisch die letzte Anweisung zurück, die den Deadlock bewirkt hat. Es entstehen Performanceprobleme, wenn Anweisungen fortwährend zurückgesetzt werden.

 Erstellen eines Deadlocks
  1. In dieser praktischen Einführung wird vorausgesetzt, dass Sie die Testdatenbank app_profiling.db erstellt haben.

  2. Verbinden Sie sich wie folgt mit app_profiling.db:

    1. Klicken Sie in Sybase Central im SQL Anywhere 12-Plug-In auf Verbindungen » Verbinden mit SQL Anywhere 12.

    2. Füllen Sie im Fenster Verbinden die folgenden Felder aus, um eine Verbindung mit der Testdatenbank app_profiling.db herzustellen.

      • Authentifizierung   Datenbank

      • Benutzer-ID   DBA

      • Kennwort   sql

      • Aktion   Eine Datenbank auf diesem Computer starten

      • Datenbankdatei   C:\AppProfilingTutorial\app_profiling.db

      • Startzeile   dbeng12 -x tcpip

    3. Klicken Sie auf Verbinden.

  3. Klicken Sie im linken Fensterausschnitt auf app_profiling - DBA und anschließend auf Datei » Interactive SQL öffnen.

    Interactive SQL wird gestartet und stellt eine Verbindung mit der Datenbank app_profiling.db her.

  4. In Interactive SQL:

    1. Führen Sie die folgenden SQL-Anweisungen aus, um zwei Tabellen zu erstellen, die Sie später zur Erstellung des Deadlocks verwenden werden:

      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. Führen Sie die folgenden SQL-Anweisungen aus, um Werte in beide Tabellen einzufügen:

      INSERT INTO "deadlock1"("val") VALUES('x');
      INSERT INTO "deadlock2"("val") VALUES('x');
    3. Führen Sie die folgenden SQL-Anweisungen aus, um zwei Prozeduren zu erstellen, die Sie später zur Verursachung des Deadlocks verwenden werden:



      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. Führen Sie die folgenden SQL-Anweisungen aus, um die Änderungen festzuschreiben, die Sie an der Datenbank durchgeführt haben:

      COMMIT;
  5. Schließen Sie Interactive SQL.

  6. Klicken Sie auf diesen Link, um mit der praktischen Einführung fortzufahren: Lektion 2: Erstellen eines Deadlocks und Aufzeichnen von Informationen darüber.

 Siehe auch