【问题标题】:Execution time of ALTER COLUMNALTER COLUMN 的执行时间
【发布时间】:2023-03-09 05:17:01
【问题描述】:

有一个 60 列和 200 行的表。将BIT 列从NULL 更改为NOT NULL,现在运行执行时间超过3 小时。为什么需要这么长时间?

这是我正在执行的查询:

ALTER TABLE tbl
ALTER COLUMN col BIT NOT NULL

除了创建一个新列,使用旧列中的值更新它,然后删除旧列并重命名新列之外,还有更快的方法吗?

这是在 MS SQL Server 2005 上。

【问题讨论】:

    标签: sql sql-server-2005 alter-table


    【解决方案1】:

    ALTER 是否被其他语句持有的元数据共享锁阻塞?任何 ALTER 都需要元数据独占锁,因此会被使用该表的任何其他语句阻塞。

    检查Activity Monitor,或查看sys.dm_exec_requests,看看谁在阻止您的 ALTER INDEX。

    【讨论】:

    • 非常感谢。不知道,还以为这种情况下SQL Server会报错?
    • 如果你设置了LOCK TIMEOUT,它会抛出一个锁超时错误。
    【解决方案2】:

    它在 3 小时后仍然运行(当您发布问题时),还是在 3 小时后完成?

    如果它仍在运行,则运行 DBCC OPENTRAN:您可能在某处有一个打开的事务在表上留下了模式锁

    或SELECT * FROM sys.sysprocesses WHERE blocked <> 0 为您提供被阻止的内容

    【讨论】:

    • DBCC OPENTRAN 会释放锁吗?
    • @Tommy Jakobsen:不。关闭连接/应用程序/查询窗口将
    • 那么我为什么要运行 DBCC OPENTRAN?
    猜你喜欢
    • 2011-11-27
    • 2013-07-18
    • 2020-11-05
    • 2020-07-01
    • 1970-01-01
    • 2017-05-08
    • 2011-02-06
    • 2019-08-10
    • 1970-01-01
    相关资源
    最近更新 更多