Richten Sie die Testdatenbank für die Anwendungsprofilerstellung app_profiling.db ein, um einen Deadlock zu erstellen, indem Sie zwei Tabellen und zwei Prozeduren erstellen.
Voraussetzungen
In dieser Lektion wird davon ausgegangen, dass Sie die Rollen und Privilegien haben, die im Abschnitt "Privilegien" am Anfang dieser praktischen Einführung aufgeführt sind: Praktische Einführung: Deadlocks diagnostizieren.
In dieser praktischen Einführung wird vorausgesetzt, dass Sie die Testdatenbank app_profiling.db erstellt haben. Siehe Praktische Einführung: Testdatenbank für die praktischen Einführungen in die Anwendungsprofilerstellung erstellen.
Kontext und Bemerkungen
Deadlocks treten auf, wenn zwei oder mehr Transaktionen einander blockieren. Transaktion A erfordert beispielsweise 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.
Starten Sie Interactive SQL. Klicken Sie auf Start » Programme » SQL Anywhere 16 » Administrationstools » Sybase Central.
Stellen Sie in Interactive SQL folgendermaßen eine Verbindung mit app_profiling.db her:
Füllen Sie im Fenster Verbinden die folgenden Felder aus, um eine Verbindung mit der Testdatenbank app_profiling.db herzustellen:
Geben Sie im Feld Authentifizierung auf Datenbank ein.
Im Feld Benutzer-ID geben Sie DBA ein.
Im Feld Kennwort geben Sie sql ein.
Wählen Sie in der Dropdown-Liste Aktion die Option Eine Datenbank auf diesem Computer starten und eine Verbindung herstellen aus.
Geben Sie im Feld Datenbankdatei Folgendes ein: C:\AppProfilingTutorial\app_profiling.db.
Geben Sie im Feld Startzeile Folgendes ein: dbeng16 -x tcpip.
Klicken Sie auf Verbinden.
Führen Sie in Interactive SQL die folgenden SQL-Anweisungen aus:
Erstellen Sie zwei Tabellen:
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) ); |
Fügen Sie Werte in jede Tabelle ein.
INSERT INTO "deadlock1"("val") VALUES('x'); INSERT INTO "deadlock2"("val") VALUES('x'); |
Erstellen Sie zwei Prozeduren:
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; |
Schreiben Sie die Änderungen fest, die Sie an der Datenbank durchgeführt haben:
COMMIT; |
Schließen Sie Interactive SQL.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |