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. 创建两个表

      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. 创建两个过程,稍后用它们形成死锁

      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。