各位大哥,大姐,叔叔,阿姨帮帮我这个可怜的人吧!!!!这张表为什么会锁????

haif1978 2003-12-04 04:07:22
一个SQL6.5的数据库,最近升级到SQL 2000,却不知道为什么一个使用频繁的档案表突然出现了类型为S的锁,一年下来也就是一两次,并且这一年内档案表数据记录并没有大的数量变动范围不超过500条。出现锁的内容一直是一个提取名称的 SELECT 语句。客户都要把我杀了。帮帮我吧!!!!!!!!!!
1。为什么我的会在数据库升级后出现这么频繁的表锁定?
2。有什么可以很好的解决方法么?
3。如果我将档案表提取的字段做成视图是否会好些?
...全文
35 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengdali 2003-12-05
  • 打赏
  • 举报
回复
select * from table with (..)


SELECT 语句中“加锁选项”的功能说明
SQL Server提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能。用户既能使用SQL Server的缺省设置也可以在select 语句中使用“加锁选项”来实现预期的效果。 本文介绍了SELECT语句中的各项“加锁选项”以及相应的功能说明。
功能说明: 
NOLOCK(不加锁)
此选项被选中时,SQL Server 在读取或修改数据时不加任何锁。 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll Back)中的数据, 即所谓的“脏数据”。

HOLDLOCK(保持锁)
此选项被选中时,SQL Server 会将此共享锁保持至整个事务结束,而不会在途中释放。

UPDLOCK(修改锁)
此选项被选中时,SQL Server 在读取数据时使用修改锁来代替共享锁,并将此锁保持至整个事务或命令结束。使用此选项能够保证多个进程能同时读取数据但只有该进程能修改数据。

TABLOCK(表锁)
此选项被选中时,SQL Server 将在整个表上置共享锁直至该命令结束。 这个选项保证其他进程只能读取而不能修改数据。

PAGLOCK(页锁)
此选项为默认选项, 当被选中时,SQL Server 使用共享页锁。

TABLOCKX(排它表锁)
此选项被选中时,SQL Server 将在整个表上置排它锁直至该命令或事务结束。这将防止其他进程读取或修改表中的数据。

使用这些选项将使系统忽略原先在SET语句设定的事务隔离级别(Transaction Isolation Level)。 请查阅SQL Server 联机手册获取更多信息。

haif1978 2003-12-05
  • 打赏
  • 举报
回复
谢谢大家的关心,我想产生锁的原因可能是由于频繁的产生查询造成的
因为产生锁的语句是一个SELECT查询,并未同时不会有其他用户对档案表进行更新后删除的操作

其实我更想知道产生类型为S锁的原因,
在多大的数据查询情况下会产生S型的锁,

如果最最不济就是在我身上产生的锁是SQL 2000的bug !!!!!!,w-w-w-w-w-w-w
pengdali 2003-12-04
  • 打赏
  • 举报
回复
P_LOCK --检测SQL SERVER当前资源LOCK的状态。

是:

SP_LOCK --检测SQL SERVER当前资源LOCK的状态。
pengdali 2003-12-04
  • 打赏
  • 举报
回复
P_LOCK --检测SQL SERVER当前资源LOCK的状态。
SP_MONITOR --显示当前的SESSION的状态。
SP_WHO2 --显示当前SQL SERVER和client的连接状态和CPU,I/O的状态。

. 列出特定用户的进程
此示例显示如何通过登录名查看有关单个当前用户的信息。

USE master
EXEC sp_who 'janetl'

C. 显示所有活动进程
USE master
EXEC sp_who 'active'

D. 通过进程 ID 显示特定进程
USE master
EXEC sp_who '10' --specifies the process_id
txlicenhe 2003-12-04
  • 打赏
  • 举报
回复
可以查一下:
1:sp_who 或 sp_who2
2: Select * from sysprocesses where blocked <> 0
3: 企业管理器->服务器->管理工具->活动->当前活动 然后把他kill掉。。。
4:SQL事件探查器,监控一下,看主要是那些处理引起的死锁.然后做相应的处理.
用事件探查器new一个trace,监视一下造成你sqlserver停顿的情况。。。

最好的办法还是检查一下引起锁的原因,一般是由你的代码引起的。
txlicenhe 2003-12-04
  • 打赏
  • 举报
回复
try sp3

http://www.microsoft.com/china/sql/downloads/sp3.asp
zjcxc 2003-12-04
  • 打赏
  • 举报
回复
你可以考虑将取名称的改为视图/存储过程试试


另外,你的SQL装补丁了吗?没有就快装上:
SQL补丁:
'全部补丁的位置
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9032f608-160a-4537-a2b6-4cb265b80766

'应该安装的补丁sql 2000 sp3
http://download.microsoft.com/download/3/c/0/3c06f7e7-39f5-4dec-b295-a3849e348a39/chs_sql2kasp3.exe

'for asp的补丁
http://download.microsoft.com/download/3/c/0/3c06f7e7-39f5-4dec-b295-a3849e348a39/chs_sql2kasp3.exe

'桌面版本的补丁
http://download.microsoft.com/download/3/c/0/3c06f7e7-39f5-4dec-b295-a3849e348a39/CHS_SQL2KDeskSP3.exe

zjcxc 2003-12-04
  • 打赏
  • 举报
回复
考虑是否你程序的问题.
haif1978 2003-12-04
  • 打赏
  • 举报
回复
修改:
在sql 6.5 下一年下来也就是一两次,

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧