这一段时间,因为系统升级,新系统产生的数据长度,比原来的数据长度要长,所以说要扩充一下字段长度。

alter table TableName alter column ColumnName varchar(50)    --修改字段长度sql

在执行的时候,有这样一个情况。

例如Student表的Name字段长度是nvarchar(50),

假如想变成nvarchar(100),这种情况,立刻能执行成功。 

假如想变成nvarchar(20),这种情况,会执行很久。

 

有一些表没啥问题,但是有一个表数据量较大,差不多有1亿多,执行时间太长,还把所有数据表给锁住了(如下图)。不过这种情况数据还能用语句查询。

①我就查询出这个语句的spid。之后kill掉。

SELECT   session_id, r.status, r.start_time, r.command, s.text, r.wait_time, r.cpu_time,
r.total_elapsed_time, r.reads, r.writes, r.logical_reads, r.transaction_isolation_level
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) s
WHERE R.STATUS='running' kill 75

②但是连续kill了好几遍,依然没啥效果,还是提示锁住。所有就继续看下spid为75的状态。

  方法1: 

select spid, blocked,waittime,lastwaittype,dbid,last_batch,open_tran,hostprocess,cmd from sysprocesses where spid = 75

   方法2:

USE master;
GO
EXEC sp_who '' --指定process_id;

两种方法查询出来的都是KILLED/ROLLBACK,表示,现在数据在回滚。

③查询一下,数据的回滚状态。

KILL 75 WITH STATUSONLY; 

查了一下,这个情况要等好久,有的等两三天的都有,最好的解决办法无非是重启。

----------------------------------------------------解决办法------------------------------------------------

网上找了好久,找了找到了一篇结决办法。

1.查询出处于阻塞的sql线程。

SET
TRANSACTION
ISOLATION
LEVEL
READ
UNCOMMITTED SELECT db_id(DB_NAME(er.[database_id])) [DBID] ,er.[session_id] AS [SessionID] ,er.[command] AS [CommandType] ,est.[text] [StatementText] ,er.[status] AS [Status] ,CONVERT(DECIMAL(5, 2), er.[percent_complete]) AS [Complete_Percent] ,CONVERT(DECIMAL(38, 2), er.[total_elapsed_time] / 60000.00) AS [ElapsedTime_m] ,CONVERT(DECIMAL(38, 2), er.[estimated_completion_time] / 60000.00) AS [EstimatedCompletionTime_m] ,er.[last_wait_type] [LastWait] ,er.[wait_resource] [CurrentWait] FROM
sys.dm_exec_requests
AS er INNER
JOIN
sys.dm_exec_sessions
AS es ON er.[session_id] = es.[session_id] CROSS
APPLY sys.dm_exec_sql_text(er.[sql_handle]) est WHERE er.[command] like
'Killed%'

附:查询出正在执行的语句

SELECT   spid,
blocked,
DB_NAME(sp.dbid) AS DBName,
program_name,
waitresource,
lastwaittype,
sp.loginame,
sp.hostname,
a.[Text] AS [TextData],
SUBSTRING(A.text, sp.stmt_start / 2,
(CASE WHEN sp.stmt_end = -1 THEN DATALENGTH(A.text) ELSE sp.stmt_end
END - sp.stmt_start) / 2) AS [current_cmd]
FROM sys.sysprocesses AS sp OUTER APPLY sys.dm_exec_sql_text (sp.sql_handle) AS A
WHERE spid > 50
ORDER BY blocked DESC, DB_NAME(sp.dbid) ASC, a.[text];

2.查到spid是75,根据spid查询出来系统进程hostprocess为20540。

select spid, blocked,waittime,lastwaittype,dbid,last_batch,open_tran,hostprocess,cmd from sysprocesses where spid = 69

3.在执行这条语句的机器上,用cmd命令查询出来。

tasklist|findstr 进程号

如:tasklist|findstr 75

4.cmd中根据进程名称杀死进程

taskkill /f /t /im 进程名称

如:taskkill /f /t /im /svchost.exe

如果不行,只有等,或者重启了。

参考文章:1.SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析

2. 数据库某个进程一直处在KILLED/ROLLBACK

        3.百度 谷歌 新浪 执行 SQL 出现 Lock request time out period exceeded.

   ---------------------------------------------------------------------

历史消耗

SELECT TOP 20
total_worker_time/1000 AS [总消耗CPU 时间(ms)],execution_count [运行次数],
qs.total_worker_time/qs.execution_count/1000 AS [平均消耗CPU 时间(ms)],
last_execution_time AS [最后一次执行时间],max_worker_time /1000 AS [最大执行时间(ms)],
SUBSTRING(qt.text,qs.statement_start_offset/2+1,
(CASE WHEN qs.statement_end_offset = -1
THEN DATALENGTH(qt.text)
ELSE qs.statement_end_offset END -qs.statement_start_offset)/2 + 1)
AS [使用CPU的语法], qt.text [完整语法],
qt.dbid, dbname=db_name(qt.dbid),
qt.objectid,object_name(qt.objectid,qt.dbid) ObjectName
FROM sys.dm_exec_query_stats qs WITH(nolock)
CROSS apply sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE execution_count>1
ORDER BY total_worker_time DESC

  

    

扩充表字段长度,引发的意外KILLED/ROLLBACK的更多相关文章

  1. SQL Server扩充表字段长度,引发的意外KILLED/ROLLBACK

    这一段时间,因为系统升级,新系统产生的数据长度,比原来的数据长度要长,所以说要扩充一下字段长度. ) --修改字段长度sql 在执行的时候,有这样一个情况. 例如Student表的Name字段长度是n ...

  2. 解决DB2事物日志满、扩充表字段长度和表空间的命令

    解决DB2事物日志满.扩充表字段长度和表空间的命令 转:http://blog.sina.com.cn/s/blog_4c0137d10100bb5r.html 一.通常我们在使用db2导入数据或进行 ...

  3. SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析[转]

    本文将为您描述SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析,教程操作方法: 今天遇到一个很奇怪的情况,发现一个会话异常,这个会话只是在执行一个简单的存储过 ...

  4. zencart加大数据表字段长度

    批量表产品名称过长导致被截断的情况,是由于产品名称超出了数据库表中字段设置的最大长度,下面通过修改数据库表字段长度来避免此类情况发生: ) ; ) ; ) ; ) ; ) ; ) ; ) ; ) ; ...

  5. db2中修改表字段的长度,查看表字段长度,以及查看表字段已存放值大小

    修改表字段语句: alter table 表名 alter column  字段名 set data type varchar(7700) 如: ALTER TABLE JV_BI_BACK_OPER ...

  6. SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析

    今天遇到一个很奇怪的情况,发现一个会话异常,这个会话只是在执行一个简单的存储过程,里面使用了链接服务器(Linked Server)查询另外一台服务器数据(存储过程里面没有任何显性事务.UPDATE. ...

  7. MySQL表字段长度的限制

    在MySQL建表时,遇到一个奇怪的现象: root::>CREATE TABLE tb_test ( ) NOT NULL, ) DEFAULT NULL, ) DEFAULT NULL, ) ...

  8. MySQL 建表字段长度的限制

    脑补,varchar(N),N指的是最大字符数,不是字节数. 先上测试说明:   在MySQL建表时,遇到一个奇怪的现象: root@localhost : test 10:30:54>CREA ...

  9. mysql 修改表字段长度

    方案一: change ALTER TABLE t1 CHANGE a a VARCHAR(); change 可以用来更改字段名称和类型 ALTER TABLE table_name CHANGE ...

随机推荐

  1. Dreamweaver CS5 CS6 代码格式化、美化插件(可同一时候格式化HTML、JavaScript、CSS )眼下最好用的代码格式化扩展

    Dreamweaver CS5 CS6 代码格式化.美化插件(可同一时候格式化HTML.JavaScript.CSS )眼下最好用的代码格式化扩展. 众所周知,Dreamweaver CS5 CS6 ...

  2. 设置Eclipse的workspace路径

    首次启动Eclipse/MyEclipse时, 会弹出"Workspace Launcher"对话框, 提示设置Workspace路径. 设定好路径后, 若勾选了"Use ...

  3. nyist oj 756 重建二叉树

    重建二叉树 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描写叙述 题目非常easy.给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!). 输入 输入有多组 ...

  4. iOS 获取导航栏和状态栏的高度

    CGRect rect = [[UIApplication sharedApplication] statusBarFrame]; 状态栏的高度: float status height =  rec ...

  5. Java的单例模式

    单例模式:单例模式确保其一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式又分为:懒汉式,饿汉式等; 特点: a.单例只有一个实例. b.必须自己创建自己唯一的实例 c.单例类必须 ...

  6. .NET Core容器化之多容器应用部署@Docker-Compose

    1.引言 紧接上篇.NET Core容器化@Docker,这一节我们先来介绍如何使用Nginx来完成.NET Core应用的反向代理,然后再介绍多容器应用的部署问题. 2. Why Need Ngin ...

  7. C#相关知识总结

    字符串相关知识   判断某字符串中包含某个字符,并过滤 if (string.Contains("*")) string = string.Replace('*',' '); // ...

  8. 《软件开发者路线图:从学徒到高手》【PDF】下载

    <软件开发者路线图:从学徒到高手>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196346 图书简介 作为一名软件开发者,你在奋力 ...

  9. 《程序设计语言——实践之路【PDF】下载

    <程序设计语言--实践之路[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382240 内容简介 <程序设计语言--实践之路(第3版 ...

  10. JS获取字符对应的ASCII码

    有时候会需要用到字符的ASCII码,一时之间调试时可能会忘记字符与ASCII码对应的数字. 最近喜欢用浏览器控制台直接跑JS代码,将这个代码直接贴到浏览器控制台,即可调试(谷歌浏览器快捷键 ctrl+ ...