设置应用程序分析测试数据库 app_profiling.db,创建两个表和两个过程以生成死锁。
上下文和注释
当两个或多个事务互相阻塞时,就会发生死锁。例如,事务 A 需要访问表 B,但表 B 被事务 B 锁定。事务 B 需要访问表 A,但表 A 被事务 A 锁定。这时就发生循环阻塞冲突。
当返回 SQLCODE -306 和 -307 时,就明显表示发生死锁。为解决死锁,SQL Anywhere 会自动回退形成该死锁的最后一条语句。如果不断回退语句,则会出现性能问题。
启动 Interactive SQL。单击 [开始] » [程序] » [SQL Anywhere 16] » [管理工具] » [Sybase Central]。
在 Interactive SQL 中,按以下操作连接到 app_profiling.db:
在 [连接] 窗口中,完成以下字段以连接到测试数据库 app_profiling.db:
在 [验证] 字段中,键入 [数据库]。
在 [用户 ID] 字段中键入 DBA。
在 [口令] 字段中键入 sql。
在 [操作] 下拉列表中,选择 [启动并连接到此计算机上的数据库]。
在 [数据库文件] 字段中,键入 C:\AppProfilingTutorial\app_profiling.db。
在 [启动行] 字段中键入 dbeng16 -x tcpip。
单击 [连接]。
在 Interactive SQL 中,执行以下 SQL 语句:
创建两个表:
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) ); |
在每个表中插入值:
INSERT INTO "deadlock1"("val") VALUES('x'); INSERT INTO "deadlock2"("val") VALUES('x'); |
创建两个过程:
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; |
提交对数据库所做的更改:
COMMIT; |
关闭 Interactive SQL。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |