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

SQL Anywhere 12.0.0 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Performance der Datenbank überwachen und steigern » Praktische Einführungen in die Anwendungsprofilerstellung » Praktische Einführung: Deadlocks diagnostizieren

 

Lektion 1: Schritte zur Erstellung eines Deadlocks

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.

 ♦  So bewirken Sie einen Deadlock
  1. Für diese praktische Einführung wird vorausgesetzt, dass Sie die Testdatenbank erstellt haben, app_profiling.db. Wenn dies nicht der Fall ist, finden Sie weitere Hinweise unter Eine Testdatenbank für die praktischen Einführungen in die Anwendungsprofilerstellung erstellen.

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

    1. Wählen Sie in Sybase Central im SQL Anywhere 12-Plug-In Verbindungen » Verbinden mit SQL Anywhere 12.

    2. Im Fenster Verbinden füllen Sie die folgenden Felder aus, um eine Verbindung mit der Testdatenbank app_profiling.db herzustellen, und klicken Sie dann auf Verbinden:

      • 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. Im linken Fensterausschnitt klicken Sie auf app_profiling - DBA und wählen Sie dann 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: Einen Deadlock erstellen und Informationen darüber aufzeichnen.

 Siehe auch