① mysql有一条sql语句导致一直锁表,怎么解决
-- 查看那些表锁到了
show OPEN TABLES where In_use > 0;
-- 查看进程号
show processlist;
--删除进程
kill 1085850;
② 怎么查看 sql server 数据库有没有锁表
查看sql server数据库被锁表可以用用如下语句:
拓展资料:
SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2012 的大型多处理器的服务器等多种平台使用。
Microsoft SQL Server 是一个全面的数据库平台,使用集成的商业智能 (BI)工具提供了企业级的数据管理。Microsoft SQL Server 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。
③ oracle 锁表、解锁的语句
1.正确方法用 select xxx from table for update; <- 锁表
直接用update table set xxx的话,只能锁row
不要commit的意思是不提交该transaction。若commit或rollback,则释放所有lock资源
2.commit = confirm 确认并提交该次会话中的修改
rollback = cancel 取消该次会话
④ sql server 查询哪条语句引起的锁表
1、select * from sys.dm_tran_locks或sp_LOCK 查看request_node 字段中为'X'(排他锁)或'IX'(意向排他锁)
2、用sp_who2 + pid(进程ID) 查看进程的详细信息
3、用dbcc inputbuffer(pid) 查看一起死锁的语句内容
以上方法应该能解决你的问题。
⑤ oracle 锁表时,怎么查出是哪些SQL语句导致了锁表
SELECT /*+ rule */ lpad(' ',decode(l.xisn ,0,3,0))||l.oracle_username User_name,
o.owner,o.object_name,o.object_type,s.sid,s.serial#
FROM v$locked_object l,dba_objects o,v$session s
WHERE l.object_id=o.object_id
AND l.session_id=s.sid
ORDER BY o.object_id,xisn DESC
执行此SQL即可,结果一看便知,适用于oracle, 其他不解释~
⑥ 如何查询锁表的SQL
用下边的语句查询,如果想结束直接kill
SELECT SPID=p.spid,
DBName = convert(CHAR(20),d.name),
ProgramName = program_name,
LoginName = convert(CHAR(20),l.name),
HostName = convert(CHAR(20),hostname),
Status = p.status,
BlockedBy = p.blocked,
LoginTime = login_time,
QUERY = CAST(t.TEXT AS VARCHAR(MAX))
FROM MASTER.dbo.sysprocesses p
INNER JOIN MASTER.dbo.sysdatabases d
ON p.dbid = d.dbid
INNER JOIN MASTER.dbo.syslogins l
ON p.sid = l.sid
CROSS APPLY sys.dm_exec_sql_text(sql_handle) t
WHERE p.blocked = 0
AND EXISTS (SELECT 1
FROM MASTER.dbo.sysprocesses p1
WHERE p1.blocked = p.spid)
⑦ 两个SQL的锁表问题
不是很明白的你的意思,查看是否锁表的sql:
select s.SID,s.SERIAL#,s.username,
decode(l.type,'TM','TABLE LOCK',
'TX','ROW LOCK',
NULL) LOCK_LEVEL,
o.owner,o.object_name,o.object_type,s.terminal,s.machine,s.program,s.osuser
from v$session s,v$lock l,dba_objects o
where s.sid=l.sid
and o.object_id=l.id1
and s.username is not null ;
如果1 .2是同时操作一张表,最好是执行完一条sql先commit一下在执行第二条这样肯定不会锁表,我不知道我理解对了没有?
ps:不能,数据库的事务机制不允许同一时刻同一记录update 如果先update操作会先lock table等执行完释放资源才有其他的操作。
以下是我做过的测试:
eg:select * from table for update;
1.不允许做for update查询。
2.允许普通search查询。
3.不允许对表中任何记录做update操作;
4.允许insert操作;
5.不允许delete操作。
另:一楼说的是对的。
⑧ 之下下面sql语句为什么会导致锁表
如果SQL语句里 导致表有循环连接就会锁表
⑨ 怎么查找mysql中的锁表语句
怎么查找mysql中的锁表语句
show processlist;
SHOW PROCESSLIST显示哪些线程正在运行。您也可以使用mysqladmin processlist语句得到此信息。如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程(也就是,与您正在使用的MySQL账户相关的线程)。如果有线程在update或者insert 某个表,此时进程的status为updating 或者 sending data。
⑩ sql server中怎样查询引起死锁的sql语句
DECLARE@spidINT
DECLARE@blkINT
DECLARE@countINT
DECLARE@indexINT
DECLARE@lockTINYINT
SET@lock=0
CREATETABLE#temp_who_lock
(
idINTIDENTITY(1,1),
spidINT,
blkINT
)
--if@@error<>0return@@error
INSERTINTO#temp_who_lock
(spid,
blk)
SELECT0,
blocked
FROM(SELECT*
FROMmaster..sysprocesses
WHEREblocked>0)a
WHERENOTEXISTS(SELECT*
FROMmaster..sysprocesses
WHEREa.blocked=spid
ANDblocked>0)
UNION
SELECTspid,
blocked
FROMmaster..sysprocesses
WHEREblocked>0
--if@@error<>0return@@error
SELECT@count=Count(*),
@index=1
FROM#temp_who_lock
--select@count,@index
--if@@error<>0return@@error
IF@count=0
BEGIN
SELECT'没有阻塞和死锁信息'
--return0
END
WHILE@index<=@count
BEGIN
IFEXISTS(SELECT1
FROM#temp_who_locka
WHEREid>@index
ANDEXISTS(SELECT1
FROM#temp_who_lock
WHEREid<=@index
ANDa.blk=spid))
BEGIN
SET@lock=1
SELECT@spid=spid,
@blk=blk
FROM#temp_who_lock
WHEREid=@index
SELECT'引起数据库死锁的是:'+Cast(@spidASVARCHAR(10))+'进程号,其执行的SQL语法如下';
SELECT@spid,
@blkDBCCinputbuffer(@spid)
DBCCinputbuffer(@blk)
END
SET@index=@index+1
END
IF@lock=0
BEGIN
SET@index=1
WHILE@index<=@count
BEGIN
SELECT@spid=spid,
@blk=blk
FROM#temp_who_lock
WHEREid=@index
IF@spid=0
SELECT'引起阻塞的是:'+Cast(@blkASVARCHAR(10))+'进程号,其执行的SQL语法如下'
ELSE
SELECT'进程号SPID:'+Cast(@spidASVARCHAR(10))+'被'+'进程号SPID:'+Cast(@blkASVARCHAR(10))+'阻塞,其当前进程执行的SQL语法如下'
PRINT(LTRIM(@spid)+''+LTRIM(@blk));
if(@spid<>0)
BEGIN
DBCCinputbuffer(@spid)--
END
DBCCinputbuffer(@blk)--引起阻塞语句
SET@index=@index+1
END
END
DROPTABLE#temp_who_lock
--return0
--KILL54