17

我计划在一台新机器上全新安装SQL Server 2005,我必须订购。我知道tempdb 调优对 SQL Server 实例的整体性能非常重要。

我读过最好的做法是创建与 CPU(或内核?)一样多的 tempdb 文件。那是对的吗?是否有任何其他建议,例如我应该注意的硬盘/RAID 设置配置?

谢谢!

4

4 回答 4

32

这是我从各种来源进行的研究。

为了优化 tempdb 性能,请注意物理磁盘配置、文件配置以及数据库内部的一些设置。

物理磁盘配置

tempdb 应该驻留在它自己的专用物理磁盘上。这允许它从 SQL Server 上的其余卷中拆分 I/O 事务。

要将 tempdb 移动到新磁盘驱动器,请使用ALTER DATABASE. 它是执行此操作的关键 T-SQL 命令。Microsoft 在 SQL Server 2005 联机丛书中提供了一个很好的示例。文章名称是 ALTER DATABASE (Transact-SQL),具体部分是'G. 将 tempdb 移动到新位置。

tempdb 是一个非常高写入的数据库。因此,RAID 5 阵列不适合它。您应该将 tempdb放在 RAID 0 或 RAID 10 阵列上,因为它们已针对高写入应用程序进行了优化。如果您可以为 tempdb 的每个物理数据库文件提供额外的 RAID 0 或 RAID 10 阵列,您将获得更高的性能。

数据库文件

服务器中的每个 CPU 核心应该有一个物理文件。所以,如果你有一个双芯片、双核服务器,你应该有四个用于 tempdb 数据库的物理数据库文件。添加更多数据库文件时,将文件配置为相同的初始大小和相同的增长设置非常重要。这样,SQL Server 将尽可能均匀地跨文件写入数据。

数据库文件大小

tempdb 数据库的大小会影响系统的性能。例如,如果为 tempdb 定义的大小太小,则系统处理负载的一部分可能会被自动增长的 tempdb 占用到每次重新启动 SQL Server 实例时支持工作负载所需的大小。您可以通过增加 tempdb 数据和日志文件的大小来避免这种开销。

在生产环境中确定适当的 tempdb 大小取决于许多因素,包括现有工作负载和使用的 SQL Server 功能。Microsoft 建议您通过在 SQL Server测试环境中执行以下任务来分析现有工作负载:

  1. 为 tempdb 设置自动增长(在测试环境中!)
  2. 执行单个查询或工作负载跟踪文件并监控 tempdb 空间使用情况。
  3. 执行索引维护操作,例如重建索引和监控 tempdb 空间。
  4. 使用前面步骤中的空间使用值来预测您的总工作负载使用情况;为预计的并发活动调整此值,然后相应地设置 tempdb 的大小。

tempdb 的最小大小建议如下:

   Envir. Size  DB Size (MB)  Log Size (MB)
   -----------  ------------  -------------
   Small                1024            256
   Medium               5120           1024
   Large               10024           2048

数据库设置

您可以通过禁用自动更新统计信息来进一步提高 tempdb 性能,这将为您的 tempdb 节省一些工作。您还可以将自动创建统计信息选项设置为 false

免责声明:应谨慎更改设置。根据您对 tempdb 施加的负载类型,更改设置可能会对系统性能产生不利影响。

要获得最佳 tempdb 性能,请遵循优化 tempdb 性能中提供的指南和建议。

如何监控 tempdb 的使用情况?

tempdb 中的磁盘空间不足导致 SQL Server 生产环境严重中断,并可能阻止正在运行的应用程序完成操作。

您可以使用sys.dm_db_file_space_usage动态管理视图来监控这些功能在 tempdb 文件中使用的磁盘空间。此外,要在会话或任务级别监视 tempdb 中的页面分配或解除分配活动,您可以使用sys.dm_db_session_space_usage动态sys.dm_db_task_space_usage管理视图。

这些视图可用于识别使用大量 tempdb 磁盘空间的大型查询、临时表或表变量。还有几个计数器可用于监视 tempdb 中的可用空间以及正在使用 tempdb 的资源。

链接:

于 2008-12-12T12:41:34.023 回答
2

另请参阅此发布的SQL Server 事务日志 RAID,其中包含有关服务器布局的讨论,涉及有关 tempdb 的一些问题。

于 2008-12-11T17:22:57.727 回答
2

根据我的阅读,最好将 tempDB 放在它自己的物理磁盘(或阵列)上。为了获得最大速度,您可以放入 raid 0 阵列。但是,如果其中一个磁盘发生故障,数据库服务器将无法运行。如果您想要更多冗余,请将其放在 raid 10 阵列上。真正的关键似乎是将它与其他数据库分开,因为 TempDB 中可能有如此多的活动。

你能走多远真的取决于服务器上的其他数据库以及它们是否对临时表等进行了大量工作。

我还没有听说过关于基于 CPU 或内核数量的多个文件的任何信息。

于 2008-12-11T17:14:13.330 回答
0

我建议在 1/2 和 1/4 * 核心数之间创建数据文件。您应该将这些文件放在您拥有的最快的磁盘上

有关详细信息,您可以查看此处: SQL Server tempdb 配置

于 2013-03-06T00:31:23.423 回答