今天我使用 Cacti 在我们的 SQL 服务器上实现了一个监控解决方案,我注意到的第一件事是临时表的数量增加了,在我们的测试系统上仅仅 3 小时内,我们在临时数据库中增加了 300 多个临时表。我还注意到 SQL Server 在这 3 小时内的内存增长是巨大的 - 3 小时后使用了 15 GB。
当我运行 SP_WHO 时,只有 3-4 个用户在测试系统上进行测试,并且向应用程序打开了大约 5 个连接。
什么可能导致这种情况?我对临时数据库中的对象进行了查询,所有名称都与 #XXXXXXXXX 类似,我在某处读到这些来自表变量(声明 @myTable...)
有什么方法可以检查为什么我们的临时表数量会增加以及是什么原因造成的?在此阶段的任何帮助将不胜感激。
我明天将安装 2008 年的服务包,希望能解决问题。
如果我目前没有空间问题,我应该最初将我的 TempDB 大小设置为一个大空间而不是让它的空间被回收吗?
确定 TempDB 的最佳初始大小的最佳方法是什么?
我的 TempDB 目前为 12GB,并且设置为 10% 自动增长
何时使用透明数据加密对 tempdb 进行加密?什么配置等导致 tempdb 以这种方式加密?
注意到 SQL Server 2016 CTP2 的文档声明“默认情况下,安装程序添加与 CPU 数量或 8 一样多的 tempdb 文件,以较低者为准”。 https://msdn.microsoft.com/en-us/library/bb510411(v=sql.130).aspx
但我一直认为“正确”的比例应该是 CPU 核心数量的一半,对于 8 核心以下的机器来说。
这是否应该被视为微软的官方建议,甚至适用于2012/2014年?
我在两节点 Windows Server 故障转移群集上运行的 SQL Server 2014 上设置了一个可用性组。设置由两个独立实例 + 同步自动故障转移组成。
我读过的许多 Microsoft 文章都提倡为 TempDB 使用多个文件来提高性能。似乎他们建议使用 8 个文件。
在这种配置的情况下,我应该这样做吗?它会提高性能吗?
将数据库放在一个服务器实例上的一个常见问题是它们都共享相同的 tempdb。是否可以为单独的数据库分配 tempdb 文件/和文件组。资源调控器允许这样做吗?
数据库 1,只能访问 tempdb 中的一个文件/文件组 1。
数据库 2,只能访问 tempdb 中的一个文件/文件组 2。
我有一个将数据插入#temp 表的过程。对数据执行某些操作后,它将数据从#temp 表存储到其他表。
我无法同时运行此过程的多个实例。为什么?我们在多个选项卡中创建具有相同名称的 #temp 表。那么为什么我们不能对临时表的多个实例做同样的事情呢?
任何解决方案?
例子:
--exec dbo.testing_temp_table
CREATE PROCEDURE [dbo].[testing_temp_table]
AS
BEGIN
SET NOCOUNT ON;
-- Insert statements for procedure here
IF OBJECT_ID('tempdb..#temp_1') IS NOT NULL drop table #temp_1
select * into #temp_1 from dbo.Emp
END
Run Code Online (Sandbox Code Playgroud) 最近,我在为数据仓库准备数据的过程中添加了一些临时表的索引。在测试数据库上,这些过程的测试运行良好,但在客户端服务器上运行时,由于此错误而失败,需要重新启动服务器。这可能与添加索引有关还是完全不同?
客户端的服务器版本:
测试服务器版本:
我阅读了Brent Ozar 发表的一篇很棒的文章,并提出了一些与内存授予相关的问题。我无法在他文章的评论部分回答我的问题,所以我想从这里得到任何帮助。
他在文章中指出:
而且无论我更新统计信息多少次,我仍然会得到大约400MB 的磁盘溢出。
我在这里有点困惑(
查看估计的行数与实际的行数。它们是相同的。统计数据很好。
我也没有使用小型服务器:我的虚拟机有 32GB 的 RAM,我已将其中的 28GB 分配给 SQL Server。没有其他查询同时运行——这只是一个孤独的查询,溢出到磁盘......
我们目前在固态驱动器上有 tempdb(8 个文件)。
我们知道建议主 mdf 和事务日志 ndf 位于不同的驱动器上,以减少争用。tempdb 文件应该在不同的驱动器上以保持一致的原则,还是可以都在同一个驱动器上?
以下文章指出它们都在同一个驱动器上,但正在寻找背景技术解释。 对多个 tempdb 文件的建议
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev2', FILENAME = N'G:\tempdb2.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev3', FILENAME = N'G:\tempdb3.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
....
Run Code Online (Sandbox Code Playgroud) performance sql-server sql-server-2012 tempdb performance-tuning
tempdb ×10
sql-server ×7
performance ×2
disk-space ×1
encryption ×1
filegroups ×1
index ×1
memory ×1
memory-grant ×1
statistics ×1