最近,我意识到临时存储过程,并为我在职业生涯中从未见过它们使用过而感到震惊。当我记得这CREATE PROCEDURE必须是其批次的第一个语句时,我感到非常失望,这肯定限制了它们的使用。当我看到他们在这个网站上很少被提及时,我支持了这个想法。他们甚至没有标签!
临时存储过程的惯用用例是什么?他们如何避免因需要成为批次中的第一个语句而造成的限制?
我有一个 50GB 的 SQL 2008 数据库(其中只有 36 个是数据)和一个每晚重建的 24GB 分析服务器多维数据集。
多维数据集重建每晚都在使用 SQL 服务器上越来越多的 TempDB。昨晚 TempDB 数据文件在用完 TempDB 驱动器上的所有空间之前增长到大约 100GB。
我可以添加更多空间,但如果我更了解这里发生的事情,我会感觉更好:
编辑:我能想到的这个特定数据库的唯一显着区别是他们为他们的最终数据集使用了一些非常大、非常复杂的嵌套视图。如果这些复杂的视图是用于构建多维数据集的视图,这能解释 tempDB 的高使用吗?
如果固态驱动器在两台机器上都是本地驱动器,它们是否可以用于 SQL Server 故障转移群集上的 TempDB?它在 2012 年受支持,但我们的集群是 SQL 2005。它运行的应用程序不能升级到 2012。
如果 SSD 驱动器在两台服务器上位于相同的本地路径上,它不会在故障转移时重建 TempDB 吗?集群不会识别操作系统识别的任何驱动器吗?或者还有其他需要考虑的问题。
我意识到微软不会支持它,但性能提升会很棒。我们在该集群上的 TempDB 是使用最多的数据库,我们无法更改它运行的应用程序中的任何代码。
我观察到生产环境中的 tempdb 在初始化后已经增长到 100 GB。
我知道由于服务器负载和一些昂贵的查询导致 tempdb 在短短两天内增长。我已经观察了一个多星期,发现这个尺寸没有进一步增长并且保持不变。
我在具有 8 个逻辑核心的服务器上为 tempdb 配置了一个 mdf 文件。虽然我可以根据逻辑核心添加多个 mdf 文件。
我观察到空闲页面大小和临时数据库数据文件的物理大小在我的情况下是相同的
SELECT SUM(unallocated_extent_page_count) AS [free pages],
(SUM(unallocated_extent_page_count)*1.0/128) AS [free space in MB]
FROM sys.dm_db_file_space_usage;
Run Code Online (Sandbox Code Playgroud)
帮助我了解是否会在不显式执行脚本以缩小空间或通过重新启动服务器以重置临时数据库分配的情况下自动回收此物理空间?
我目前处于一种“偶然的 dba”角色。我试图监视和改进数据库。我一直在使用 Udemy 课程中的脚本(我可以发布,但可能有点长)。我每小时运行它 5 分钟来捕获磁盘延迟样本,我不确定这是否是一个好方法。但是我注意到 tempdb 中有很多巨大的峰值,例如 300+ 毫秒,但通常会低一点。
tempdb 与数据文件位于同一磁盘上。我将建议使用单独的驱动器,理想情况下是 SSD,但目前我已将 tempdb 数据文件拆分为 4 个文件并使它们相当大,因此它们不需要经常自动增长。这种变化是否会造成峰值,不幸的是没有基线,因为所做的更改是为了改善某些问题。或者 tempdb 问题仅仅是性能不佳的第 3 方应用程序。任何建议将不胜感激!
这是 sp_blitz 降价
我已经隐藏了引用特定公司的任何数据库名称。
优先级 1:备份:
备份到数据库所在的同一驱动器 - 过去两周在驱动器 D:\ 上完成了 85 次备份,数据库文件也存在于此。如果该阵列出现故障,这表示严重的风险。
无日志备份的完全恢复模式
COMPCRM - 上周未备份 500.00MB 的日志文件。
ClientManager - 上周没有备份 2.25MB 的日志文件。
CRMSelfService - 上周未备份 2.31MB 的日志文件。
VOIP.SDC - 上周没有备份 2362.81MB 的日志文件。
Elmah - 上周没有备份 20.94MB 的日志文件。
hMailServer - 上周没有备份 2.06MB 的日志文件。
NLog - 上周未备份 117.63MB 的日志文件。
ReportServer - 上周未备份 6.25MB 日志文件。
ACC_COMP_SYS_Be - 上周未备份 2599.13MB …
正如标题所暗示的,我将清除 SQL Server 中临时数据库的内容。SolarWinds 正在生成严重警报,我想清除 tempdb 工作文件和工作表。
我怎样才能做到这一点?我可以重新启动 MSSQLSERVER 服务以清除内容吗?
我想像这样改变 tempdb(我正在增加大小)
USE [master]
GO
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'temp2', SIZE = 10240KB )
GO
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'temp3', SIZE = 10240KB )
GO
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'temp4', SIZE = 10240KB )
GO
ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'tempdev', SIZE = 10240KB )
GO
Run Code Online (Sandbox Code Playgroud)
这是否需要我重新启动 SQL 服务器?
在这里处于相当不利的位置。今天下午在我的 tempDB 上,我运行了以下查询:
sp_helpfile找到我的 MDF 和 LOG 文件所在的位置。我的 MDF 在我的 C: 驱动器上,而我的 LOG 文件在 D: 驱动器上,所以我运行了以下查询以将此日志文件从 D: 驱动器移回 C: 驱动器。(这可能不是我运行的确切查询,因为我不记得它到底是什么!)
use master
go
Alter database tempdb modify file (name = templog, filename = 'C:[drivelocation]\tempdb.ldf')
go
Run Code Online (Sandbox Code Playgroud)
运行后,我关闭了 SQL Server MS 2012 并重新打开以连接回我机器上的 SQL Server。尝试登录时,SQL MS 返回以下错误:
Run Code Online (Sandbox Code Playgroud)=================================== Cannot connect to machineName\SQL2012. =================================== A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is …
我在数据库中有一个使用临时文件的例程。但数据库的排序规则与临时数据库的排序规则不匹配。我无法更改数据库的排序规则,它是客户端数据库。我试过这个:
BEGIN
DECLARE @Collation sysname;
SELECT @Collation=collation_name FROM sys.databases WHERE name = DB_NAME();
CREATE TABLE #Resultaten
(Supplier smallint,
Productcode varchar(20) COLLATE @Collation;,...)
...
Run Code Online (Sandbox Code Playgroud)
但这行不通。
有没有办法将临时文件列的排序规则与当前数据库的排序规则相匹配?
我在我的 SQL Server 的 tempdb 之一上有一个奇怪的行为。
它有六个 tempdb 文件,根据 SSMS 和查询,都指向 S 目录。他们每个人都有 ~5gb 的初始大小。
奇怪的是 S 是法定人数,实际上只有 2GB 的可用空间。Tempdb 文件根本不存在于 S 及其子目录中。
问题是 tempdb 文件在哪里?:) 我怎样才能看到它们?
谢谢你。
sql-server-2008 sql-server sql-server-2008-r2 sql-server-2012 tempdb
tempdb ×10
sql-server ×9
clustering ×1
collation ×1
disk-space ×1
hardware ×1
ssas ×1
t-sql ×1