标签: truncate

为什么要同时使用 TRUNCATE 和 DROP?

在我工作的系统中有很多使用临时表的存储过程和 SQL 脚本。使用这些表后,最好删除它们。

我的许多同事(几乎所有人都比我更有经验)通常会这样做:

TRUNCATE TABLE #mytemp
DROP TABLE #mytemp
Run Code Online (Sandbox Code Playgroud)

我通常DROP TABLE在我的脚本中使用单个。

在 aTRUNCATE之前立即执行 a 有什么好的理由DROP吗?

sql-server sybase truncate

105
推荐指数
2
解决办法
4万
查看次数

截断了 200GB 的表,但未释放磁盘空间

我只剩下 2GB 了,所以我需要删除这个历史表。该表现在为空,但数据库磁盘空间未释放。并且数据库文件是320GB。

sql-server truncate sql-server-2012

25
推荐指数
3
解决办法
7万
查看次数

为什么 DELETE 会对性能产生挥之不去的影响?

最后是一个测试脚本,用于比较@table 变量和#temp 表之间的性能。我想我已经正确设置了 - 性能计时是在 DELETE/TRUNCATE 命令之外进行的。我得到的结果如下(以毫秒为单位)。

@Table Variable  #Temp (delete)  #Temp (truncate)
---------------  --------------  ----------------
5723             5180            5506
15636            14746           7800
14506            14300           5583
14030            15460           5386
16706            16186           5360
Run Code Online (Sandbox Code Playgroud)

只是为了确保我是理智的,这表明 CURRENT_TIMESTAMP (aka GetDate()) 是在语句时使用的,而不是批处理时,因此 TRUNCATE/DELETE 与SET @StartTime = CURRENT_TIMESTAMP语句之间不应有交互。

select current_timestamp
waitfor delay '00:00:04'
select current_timestamp

-----------------------
2012-10-21 11:29:20.290

-----------------------
2012-10-21 11:29:24.290
Run Code Online (Sandbox Code Playgroud)

当使用 DELETE 清除表时,第一次运行和后续运行之间的跳转非常一致。我对DELETE 的理解缺少什么?我已经重复了很多次,交换了顺序,调整了 tempdb 的大小以使其不需要增长等。

CREATE TABLE #values (
  id int identity primary key, -- will be clustered …
Run Code Online (Sandbox Code Playgroud)

performance sql-server delete truncate sql-server-2012

20
推荐指数
1
解决办法
4094
查看次数

PostgreSQL - 在级联上截断表并用 1 重置所有层次序列

在级联上截断表时,有什么方法可以重置所有表序列。

我已经阅读了这篇文章如何在 postgres 中重置序列并用新数据填充 id 列?

ALTER SEQUENCE seq RESTART WITH 1;
UPDATE t SET idcolumn=nextval('seq');
Run Code Online (Sandbox Code Playgroud)

它仅适用于一个序列,但我的问题是重新启动截断表的所有序列。

考虑当我使用TRUNCATE sch.mytable CASCADE;它影响3个相关表,这意味着三个序列,是否有任何解决方案可以一次性重新启动此序列。

postgresql sequence truncate

20
推荐指数
1
解决办法
3万
查看次数

截断 AG 中包含 170 亿行的表

我需要截断一个包含 170 亿行的表,该表位于作为 AG 一部分的数据库中。

此操作对 AG 延迟和日志备份大小有什么影响?

有推荐的方法吗?

sql-server truncate transaction-log availability-groups

20
推荐指数
2
解决办法
3269
查看次数

截断表需要哪些权限?

我有一个对数据库具有以下权限的 SQL 帐户:

在此处输入图片说明

db_executor您看到此帐户所属的角色是由以下脚本创建的:

CREATE ROLE [db_executor] AUTHORIZATION [dbo]
GO

GRANT EXECUTE TO [db_executor] 
GO
Run Code Online (Sandbox Code Playgroud)

当我运行一个selectupdateinsertdelete放在桌子上,它工作正常。当我尝试truncate桌子时,它给了我这个错误信息:

找不到对象“TableName”,因为它不存在或您没有权限。

此帐户缺少什么权限?

sql-server permissions truncate sql-server-2012

18
推荐指数
2
解决办法
7万
查看次数

截断 SQL Server 错误日志的安全方法

我们的空间快用完了。清除错误日志的安全方法是什么?

清除此问题的安全方法是什么?

sql-server sql-server-2008-r2 truncate disk-space errors

17
推荐指数
1
解决办法
4万
查看次数

为什么是truncate DDL?

我有一个面试问题,这是我面试时问的。我回答了这个问题,但面试官对我的回答并不那么信服。所以,有人请用我的理解纠正我吗?

问:为什么 Truncate 是 DDL 而 Delete 是 DML?两者都做几乎相同的工作(删除行)

答。当我们使用 Truncate 时,我们正在取消分配由数据分配的整个空间,而不保存到撤消表空间中。但是,在删除的情况下,我们将所有数据放入撤消表空间,然后删除所有数据。

请,如果有人知道上述最佳答案,请解释。

oracle delete truncate ddl

15
推荐指数
1
解决办法
3万
查看次数

PostgreSQL:TRUNCATE 后未释放磁盘空间

我有TRUNCATE一个巨大的(~120Gb)表,名为files

TRUNCATE files;
VACUUM FULL files;
Run Code Online (Sandbox Code Playgroud)

表大小为 0,但没有释放磁盘空间。任何想法如何回收我丢失的磁盘空间?

更新: 磁盘空间在大约 12 小时后释放,我这边没有任何操作。我使用 Ubuntu 8.04 服务器。

postgresql truncate disk-space

14
推荐指数
1
解决办法
6393
查看次数

为什么在创建临时表的存储过程末尾截断临时表会更快地释放临时数据库空间?

SQL Server 缓存在存储过程中创建的临时表,并且仅在过程结束和随后执行时重命名它们。我的问题与 tempdb 空间何时被释放有关。我读到该表在程序结束时截断。我在评论中读到这是在每个会话的基础上处理的,并且在 MSDN看到了一个关于是否需要清理的问题。但是如果它从来没有被同一个会话执行过两次呢?

我还听说有一个后台垃圾收集进程,一旦表超出范围,就会释放该空间。

在创建它的存储过程结束时截断临时表似乎会导致表在 tempdb 中用于数据的空间比不使用 truncate 语句时释放的空间更快,尽管与预期相反。为什么?

使用或不使用这种截断语句的相对性能影响是什么?使用 SNAPSHOT 隔离时,tempdb 经常受到压力,我认为尽快从大型临时表中释放 tempdb 中使用的空间将防止 tempdb 不必要的增长。这种潜在的空间节省是否会以性能为代价?

这是一些重现问题的代码(主要来自@TheGameiswar,有一些更改):

SET NOCOUNT ON;
GO
ALTER PROC usp_test
AS
BEGIN
    IF object_id('tempdb..#temp') IS NOT NULL
        DROP TABLE #temp

    SELECT *
    INTO #temp
    FROM [dbo].[Event_28] -- This is a table with 15313 rows, using 35648 KB according to sp_spaceused

    --SELECT SUM(user_object_reserved_page_count) AS [user object pages used]
    --  ,(SUM(user_object_reserved_page_count) * 1.0 / 128) …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures truncate tempdb temporary-tables

12
推荐指数
1
解决办法
6511
查看次数