暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

SQLServer tempdb专题

查看基本信息

查看tempdb的数据文件和日志文件

select name,physical_name from sys.master_files where database_id=db_id('tempdb')

看tempdb log的使用率

dbcc sqlperf(logspace)

看日志状态

SELECT name,log_reuse_wait_desc FROM sys.databases where name='tempdb'

(日志状态是ACTIVE_TRANSACTION时无法收缩日志。NOTHING时可以开始收缩。)

收缩tempdb

参考官网

https://learn.microsoft.com/zh-cn/sql/relational-databases/databases/shrink-tempdb-database?view=sql-server-ver16

收缩语句:

USE tempdb;
GO

-- This command shrinks the primary data file
DBCC SHRINKFILE (tempdev, '<target_size_in_MB>');
GO

-- This command shrinks the log file, examine the last paragraph.
DBCC SHRINKFILE (templog, '<target_size_in_MB>');
GO

tempdb收缩日志文件示例:

DBCC SHRINKFILE (N'templog' , 10)

tempdb收缩数据文件示例:

DBCC FREESYSTEMCACHE('ALL')
DBCC SHRINKFILE(N'tempdev',100)
DBCC SHRINKFILE(N'temp2',100)

如日志有占用,则需要等进程占用结束。
查看哪个会话占用日志:

DBCC OPENTRAN
GO
SELECT  *
FROM    sys.dm_exec_sessions AS t2 ,
        sys.dm_exec_connections AS t1
        CROSS APPLY sys.dm_exec_sql_text(t1.most_recent_sql_handle) AS st
WHERE   t1.session_id = t2.session_id
        AND t1.session_id > 50

查看216进程信息:

select p.*,s.text 
from master.dbo.sysprocesses p 
cross apply sys.dm_exec_sql_text(p.sql_handle) s
where spid = 216

能kill的话,直接杀除会话

kill 216

迁移

参考官网:

https://learn.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ms345408(v=sql.105)

因为每次启动 SQL Server 服务时都重新创建 tempdb,所以不必实际移动数据和日志文件。在步骤 3 中重新启动服务时,将在新位置中创建这些文件。在重新启动服务之前,tempdb 将继续使用现有位置中的数据和日志文件。重新启动 SQL Server 服务后,可能要从原始位置删除旧的 tempdb 数据和日志文件。

确定 tempdb 数据库的逻辑文件名称以及在磁盘上的当前位置。

SELECT name, physical_name AS CurrentLocation
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');
GO

使用 ALTER DATABASE 更改每个文件的位置。

USE master;
GO
ALTER DATABASE tempdb 
MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf');
GO
ALTER DATABASE tempdb 
MODIFY FILE (NAME = templog, FILENAME = 'F:\SQLLog\templog.ldf');
GO

停止再重新启动 SQL Server 的实例。
验证文件更改。

SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');

最后将原始文件删除。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论