Questions tagged «tempdb»

TempDB是MS SQL Server的一部分。它是一个系统数据库,用作临时表,内部对象和行版本的存储区。


2
如何查找导致tempdb增长的SQL语句?
服务器(SQL Server 2008)的tempdb每月增加几次,达到500GB +。是否有可能找出导致该问题的SQL语句?这个问题通常不是由造成create table #temp...; insert into #temp...或select ... into #temp...而又复杂的连接。 某些tempdb文件的Initial Size每次也会自动设置为更大的值。怎么预防呢? 有时,缓存的计划会阻止调整大小/缩小文件。如何找到哪个持有tempdb?

1
在生产环境中收缩Tempdb的最佳实践
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 5年前。 在SQL Server 2008中收缩Temporary db时,最佳做法是什么? 使用以下内容有风险吗? use tempdb GO DBCC FREEPROCCACHE -- clean cache DBCC DROPCLEANBUFFERS -- clean buffers DBCC FREESYSTEMCACHE ('ALL') -- clean system cache DBCC FREESESSIONCACHE -- clean session cache DBCC SHRINKDATABASE(tempdb, 10); -- shrink tempdb dbcc shrinkfile ('tempdev') -- shrink …


2
当SQL Server没有可用的物理内存时会发生什么?
在进行谷歌搜索时,我发现了一些相互矛盾的信息。 一些站点指出,当没有物理内存可用于数据时,SQL Server会将已存在的数据移至TEMPDB中(请参阅:SQL Server:使TempDb神秘化和建议)。 但是其他站点指出,当剩余的物理内存不足时,操作系统可以使用PAGE FILE并将数据从物理内存移至该页面(请参阅SQL Server的页面文件)。 我想知道当SQL Server的物理内存用尽时,它将在哪里写入数据?要tempdb还是OS页面文件?还是两者都可以?

1
将溢出排序到tempdb,但估计的行等于实际的行
在最大内存设置为25GB的SQL Server 2016 SP2上,我们有一个查询,在一分钟内执行大约80次。该查询将大约4000页溢出到tempdb。这会在tempdb磁盘上导致大量IO。 当您查看查询计划(简化查询)时,您会看到估计的行数等于实际的行数,但仍然会发生溢出。因此,过时的统计信息不能成为问题的原因。 我做了一些测试,然后查询溢出到Tempdb: select id --uniqueidentifier from SortProblem where [status] ='A' order by SequenceNumber asc option (maxdop 1) 但是,如果我选择其他列,则不会发生溢出: select startdate --datetime from SortProblem where [status] ='A' order by SequenceNumber asc option (maxdop 1) 因此,我尝试“扩大” id列的大小: select CONVERT(nvarchar(512),id) from SortProblem where [status] ='A' order by SequenceNumber asc …

1
TempDB争用
我们在SQL Server 2014 SP1上有一个活动的OLTP 40GB数据库。发现查询随着IO_Completion等待而变慢,磁盘队列长度增加到900,并且SQL Server停止响应。我们尝试了什么: 重新启动实例,并在一分钟后开始以相同的方式运行。 第二次重新启动后,我们更改了每个tempdb数据文件的初始大小(创建了16个数据文件),它开始正常工作。 注意:我们将表变量用于中间结果集。这些结果集很小。 一个月内发生了两次。每次我手动向数据文件添加一点空间时,它就会开始正常工作。更有趣的是,我们在SQL Server 2008 R2和SQL Server 2012上使用的相同设置(相同的硬件,相同的文件夹和文件设置,相同的工作负载)可以正常工作。 请帮助我们找到永久的解决方案。 所有数据文件的初始大小都相同,为1000MB,当前为1500MB。都是一样的。每个自动增长为100MB。在此之前,我们面临着PFS和GAM页面争用的问题,我们增加到16个,问题得以解决。跟踪标记1117和1118均被启用。2个NUMA节点上的24个内核。所有数据文件都在同一卷上。简单磁盘,无SAN。 实例在物理计算机上。带表变量的查询和带哈希联接的查询是最常见的生成IO_Completion等待的方法。 wBob的详细回答促使我们进行了更详细的搜索。我们以前是怎么错过它的: 用户取消了数据库“ tempdb”中文件“ templog”的自动增长,或者在7704毫秒后超时。使用ALTER DATABASE可以为此文件设置较小的FILEGROWTH值,或显式设置新的文件大小。 每当发生这种类型的问题时,我们都会在日志中找到此问题。我们正在将TempDB移至单独的快速驱动器。

3
在SQL Server 2012上运行大量SQL查询时系统磁盘空间不足
我是SQL Server 2012的新手,如果有人可以提供帮助,我将不胜感激。我已将大型数据库的副本还原到SQL Server 2012,并且尝试对它运行一些简单查询。 我试图对数据库的136898115行表运行SELECT查询。该SELECT查询只有一个简单WHERE子句。每次我运行此查询时,它都会失败,因为系统磁盘(安装Windows的分区- C:\)的空间不足(此分区只有6GB的可用空间),我不明白为什么。我将tempdb定义在另一个驱动器上,该驱动器具有14 TB以上的可用空间。当然,我的数据库也位于其他驱动器上。 是什么使我的系统分区空间不足?是页面文件吗?

2
查找哪个会话持有哪个临时表
我们有一个SQL Server 2005数据库,临时数据库已满。通过进入SQL Server Management Studio,我可以看到tempdb中的所有临时表。是否可以判断哪个会话正在保存哪个临时表?理想情况下,该查询将列出每个会话使用的临时表。 谢谢,

2
在将文件添加到tempdb的上下文中,热点是什么?
我试图找出是否有可能在不重新启动SQL Server服务的情况下将tempdb文件添加到SQL Server。我在数据库管理员那里看到了这个答案: Tempdb添加文件需要重新启动 一个答案指出: 添加-无需中断。尽管正如Microsoft的Sean指出的那样,SQL将更喜欢使用填充较低的文件。如果您要从1个数据文件开始添加更多数据,则SQL会在一段时间内使用新数据文件,但是您的性能不会比仅拥有一个文件更糟。但是,如果您已经有2个以上并添加一个以上,则它将在新的1个热点上出现并降低性能。 但是,有一条评论警告以下内容: 我将在“添加”部分添加一个附录:“添加:不,但是您很可能会失衡,所以您会发现热点,这会使情况变得更糟。” 我有关于该评论的以下问题,但被指示在我自己的新问题(此问题)中提出这些问题,而不是通过对该问题的答案中的评论来询问评论者。 特别: 什么是热点?(我通过Google获得了一些信息,但未详细添加文件后在tempdb上进行热点时会发生什么情况) 热点问题会使tempdb变得更糟吗? 数据库中哪些特定的事情会变得更糟?

1
为什么在存储过程的末尾截断临时表以更快地创建其可用的tempdb空间?
SQL Server缓存在存储过程中创建的临时表,并仅在过程结束并随后执行时重命名它们。我的问题与何时释放tempdb空间有关。我已经知道该表在过程结束时被截断了。我已经读到评论说,这是基于每个会话进行处理的,并且看到了有关是否需要在MSDN上进行清理的问题。但是,如果它从未在同一会话中两次执行过,该怎么办? 我还听说过,有一个后台垃圾收集过程,一旦表超出范围,就会释放该空间。 尽管有相反的预期,但在创建存储过程的末尾截断一个临时表时,似乎导致该表在tempdb中用于释放数据的空间比没有使用truncate语句时要快。为什么? 使用或不使用这样的截断语句对性能的影响是什么?使用SNAPSHOT隔离时,经常会感到tempdb压力,我认为尽快从大型temp表中释放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] …


1
大内存环境中的SQL Server TempDB行为
阅读这个问题使我想起了我前一段时间遇到的一个问题。 我们有一个具有512GB RAM的SQL Server,主数据库是450 GB。我们在TempDB中看到了很多动作(好吧,我认为这是“很多动作”-可能不是!)。我安装了演示版的RamDisk Plus服务器,创建了一个50GB的ramdrive,将其指向TempDB,并且根本看不到性能的提高。 是对TempDB的写入始终导致对磁盘的实际物理写入,还是由SQL Server缓存TempDB的写入以像Windows文件系统缓存一样延迟写入? 在这种情况下,虚拟磁盘毫无意义吗? 我知道SQL Server 6.5支持对TempDB-In-Ram,但很久以前就停止了它!

2
SQL Server tempdb在RAM磁盘上?
我们的供应商应用程序数据库非常占用TempDB。 该服务器是具有40个内核和768GB RAM的虚拟服务器(VMWare),运行SQL 2012 Enterprise SP3。 包括TempDB在内的所有数据库都位于SAN的1层SSD上。我们有10个tempdb数据文件,每个文件已预先增长到1GB,并且它们从未自动增长。与70GB日志文件相同。跟踪标志1117和1118已设置。 sys.dm_io_virtual_file_stats显示过去一个月在tempdb数据和日志文件上读取/写入的数据超过50 TB,累积io_stall为250小时或10天。 在过去的两年中,我们已经调整了供应商的代码和SP。 现在,我们正在考虑将tempdb文件放置在RAM驱动器上,因为我们有大量的内存。由于tempdb在重新引导服务器时被破坏/重新创建,因此它是放置在易失性内存中的理想选择,该易失性内存在重新引导服务器时也会被清除。 我已经在较低的环境中对此进行了测试,它可以缩短查询时间,但可以增加CPU使用率,因为CPU可以做更多的工作,而不是等待慢的tempdb驱动器。 还有其他人将tempdb放在高oltp生产系统的RAM上吗?有什么主要的不利条件吗?是否有任何供应商专门选择或避免?

3
tempdb日志文件的最佳做法
我在这里和那里已经读过许多关于如何配置tempdb数据文件的博客,但是我没有找到有关tempdb日志文件的任何信息。 这是我目前在tempdb中使用的策略: 我已使用Paul Randal的建议来分割tempdb数据文件 我已将tempdb数据文件的大小设置为最大,并禁用了自动增长。例如,我有100gb的可用磁盘空间,并将8个tempdb数据文件的大小分别设置为10gb。如布伦特·奥扎尔(Brent Ozar)所建议,这可以防止磁盘碎片,而且我的日志文件还有20GB可用空间。 但是就像我说的,没有人在谈论tempdb日志文件。我该怎么办?在我的设置中,此文件与tempdb数据文件位于同一位置。我应该与tempdb日志文件一起使用的大小和自动增长值是多少?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.