使用Sybase行锁说明及测试文档

更新时间:2023-09-22 12:22:01 阅读量: 经管营销 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Sybase11.9.X 表级锁与行级锁的转换

Sybase11.9.X表级锁与行级锁的转换

一、

简介

Sybase通过封锁来保证当前活动事务使用的数据的一致性,数据的一致性是指如果多个用户重复执行一组事务,每次的结果应该是相同的,即并发的查询和修改互不干扰。

Sybase11.9.X支持三种封锁级别:行级锁、页面锁和表级锁。行级锁是对操作的数据行封锁,页面锁是对数据或索引页的所有数据行封锁,表级锁是对整个表封锁。Sybase11.9.X系统默认的封锁类型是表级锁,一般来说,将封锁类型设为行级锁可以降低封锁冲突。

以下将介绍如何将Sybase11.9.X系统的封锁类型设为行级锁。 二、

操作方法

? 修改Sybase11.9.X系统封锁类型: 可通过如下指令:

sp_configure ‘lock scheme’,1,’datarows’ go

(其中datarows表示行级锁、datapages表示页级锁、allpages表示表级锁)将数据库默认的封锁级别由表级锁改为行级锁。

修改之后通过指令: sp_configure ‘lock scheme’ go

查询已修改数据库系统的封锁类型。

但是这种设置方法只能对在设置之后创建的表生效,也就是说已经创建的表仍然保留数据库原来的设置。要改变已创建的表的锁级别,请按下步操作。

新太科技技术开发中心 2 /9

Sybase11.9.X表级锁与行级锁的转换

? 修改已创建表的封锁类型:

1、

进入需操作的数据库,运行下面语句:

select 'alter table' , name , 'lock datarows' , char(13) , 'go' from sysobjects where type = 'U'

go

生成批量将表改为行级锁的脚本,如下例: alter table test lock datarows go

alter table test1 lock datarows go …… 2、

运行生成的脚本,每次操作5条记录,对于如下报错:

Server Message: Number 4963, Severity 16 Line 1:

Table 'test' is already locked in the desired locking scheme. ……

可不预理会,报错是说明表已经定义为行锁。对于操作等待,一般是由于有其它会话正在对该表进行加锁操作,这种情况或者等待加锁的会话运行结束或者暂时退出,请数据库较闲时再进行操作。 三、

测试报告

由于查询操作将对执行查询的表加共享锁,而插表、更新表操作将对执行操作的表加排他锁。所以测试将选择查询、插表、更新表三种SQL操作来测试修改

新太科技技术开发中心 3 /9

Sybase11.9.X表级锁与行级锁的转换

行级锁时数据库的并发性。

首先创建测试表: create table test (

no

int

not null, not null,

name varchar(10)

constraint pky_test primary key (no) ) go

测试编号:1.1 测试项目:修改为行级锁前数据库状况 系统功能: 修改为行级锁前插表、查询操作 测试程序: 用户操作: 1、 执行以下SQL: insert into test values(1,’Mike’) go 2、执行以下SQL: select * from test go 测试结果及分析:ok

新太科技技术开发中心 4 /9

系统响应: 1. ( 1 row affected) 2. name No ----------- ---- 1 Mike Sybase11.9.X表级锁与行级锁的转换

测试编号:1.2 测试项目:正在表操作时,同时修改为行级锁数据库状况 系统功能: 正在查询时,同时进行行级锁修改 测试程序: 用户操作: 1. 执行以下SQL: begin tran select * from test go 2.打开另一session,执行以下SQL: alter table test lock datarows go 3.在另一个session中执行SQL: commit tran go 测试结果及分析:ok

测试编号:1.3 测试项目:正在表操作时,同时修改为行级锁数据库状况 系统功能: 正在插表时,同时进行行级锁修改 系统响应: 1. no name ----------- ---- 1 Mike 2 Jack 2.成功执行。 3.将事务提交。 新太科技技术开发中心 5 /9

Sybase11.9.X表级锁与行级锁的转换

测试程序: 用户操作: 1. 执行以下SQL: begin tran insert into test values(2,’Jack’) go 2.打开另一session,执行以下SQL: alter table test lock datarows go 3.在另一个session中执行SQL: commit tran go 测试结果及分析:ok

测试编号:1.4 测试项目:修改为行级锁后数据库状况 系统功能: 修改为行级锁前插表、查询操作 系统响应: 1. 1 row affected) 2.处于等待状态。 No name ----------- ---- 1 Mike 3.第二session执行成功。 新太科技技术开发中心 6 /9

Sybase11.9.X表级锁与行级锁的转换

测试程序: 用户操作: 1. 执行以下SQL: insert into test values(3,’Rose’) go 2、执行以下SQL: select * from test go 系统响应: 1. 1 row affected) 2. no name ----------- ---- 1 Mike 2 Jack 3 Rose 测试结果及分析:ok

测试编号:1.5 测试项目:正在表操作时,同时修改数据库系统参数的数据库状况 系统功能: 正在插表时,同时进行数据库锁类弄参数据的修改 新太科技技术开发中心 7 /9

Sybase11.9.X表级锁与行级锁的转换

测试程序: 用户操作: 1. 执行以下SQL: 系统响应: 1. 1 row affected) 2.成功执行。 3.将事务提交。 begin tran insert into test(4,’Jane’) go 2.打开另一session,执行以下SQL: sp_configure scheme’,1,datarows go 3.在另一个session中执行SQL: commit tran go 测试结果及分析:ok

测试编号:1.6 ‘lock 测试项目:对表进行行操作时,同时对同一表的另一行操作的数据库状况 系统功能: 对表的一行执行update,同时对同一表的另一行执行update,将不互相影响 新太科技技术开发中心 8 /9

Sybase11.9.X表级锁与行级锁的转换

测试程序: 用户操作: 1、 执行以下SQL: 系统响应: 1.成功执行 1 row affected) 2.成功执行。 1 row affected) 3.将事务提交。 begin tran go update test set name=’jessica’ where no=1 go 2.打开另一session,执行以下SQL: begin tran go update test set name=’john’ where no=2 go 3.在两个session中执行SQL: commit tran go 测试结果及分析:ok 结论:

1、改变表或系统的封锁类型并不会影响数据库的运行。

2、改变表的封锁类型为行级锁将只对数据行加锁,可以极大的减少封锁冲突。

新太科技技术开发中心 9 /9

本文来源:https://www.bwwdw.com/article/nfyd.html

Top