用于将 tempdb 数据库的并发性增强功能

文章翻译 文章翻译
文章编号: 328551 - 查看本文应用于的产品
错误 #: 362099 (SHILOH_BUGS)
展开全部 | 关闭全部

本文内容

症状

当频繁使用 tempdb 数据库,时 SQL Server 时,可能会遇到争用它试图分配页。

sysprocesses 系统表的输出结果在 waitresource 可能显示为"2: 1: 1"(PFS 页) 或"2: 1: 3"(SGAM 页)。具体取决于争用程度这可能会也导致 SQL Server 短期出现没有响应。


这些操作频繁使用 tempdb
  • 重复创建和拖放的临时表 (本地或全局)。
  • 表用于存储目的使用 tempdb 的变量。
  • 工作表与 CURSORS 关联。
  • 与 ORDER BY 子句相关联的工作表。
  • 工作表相关联的 GROUP BY 子句。
  • 处理与哈希计划相关联的文件。
粗和重大的使用,这些活动可能导致争用问题。

原因

在对象创建过程中必须从混合扩展盘区分配和分配给新对象两 (2) 页。一个网页是为在索引分配映射表 (IAM) 和 $ 第二个是为该对象的第一页。SQL Server 跟踪混合扩展盘区通过使用该共享全局分配映射表 (SGAM) 页。每个 SGAM 页跟踪大约 4 gb 的数据。

作为从混合扩展盘区分配页的 SQL Server 必须扫描页可用空间 (PFS) 页,若要找出哪些混合的页分配可用。PFS 页跟踪的每个页上的可用空间和每个 PFS 页跟踪关于 8000 的页。适当的同步,可以更改 PFS 和 SGAM 页 ; 且短期的可以隔栏其他修饰符。

混合页分配 SQL Server 搜索时, 它始终在相同的文件和 SGAM 页上启动扫描。这将导致 SGAM 页上的高强度争用几个混合的页分配是正在进行,可能会导致本文"症状"一节中介绍的问题时。

注意取消分配活动还必须修改页有助于提高争用。

若要了解有关 SQL Server (SGAM、 GAM,PFS,IAM) 所使用的不同的分配机制的详细信息,请参阅本文"参考"一节。

解决方案

若要减少 tempdb 遇到使用率很高,分配资源争用,请按照所有这些步骤操作:
  1. 对于运行 SQL Server 2000 Service Pack 3 (SP3) 的服务器,应用修补程序 8.00.0765 或 $ 最新的安全修复 8.00.0818。对于运行 SQL Server SP2 的服务器,应用修补程序 8.00.0702。

    从以下位置提供了这些修补程序:

    8.00.0765
    814916合并代理程序 (对于已筛选发布可能失败 FIX:
    8.00.0818
    http://www.microsoft.com/technet/security/bulletin/MS03-031.mspx
    8.00.0702
    328551用于将 tempdb 数据库的 FIX: 并发增强功能
  2. 实现跟踪标志 -T1118

    注意跟踪标记 -T1118 也是可用和 Microsoft SQL Server 2005 和 SQL Server 2008 中受支持。但是,如果您正在运行 SQL Server 2005 或 SQL Server 2008,您不必应用任何修补程序。
  3. 增加 tempdb 至少要等于处理器数的数据文件的数量。此外,创建具有相等的大小调整的文件。有关更多的信息,请参阅"更多信息"部分。
注意这些步骤还适用于 Microsoft SQL Server 7.0 中。唯一的例外是没有 SQL Server 7.0 无修补程序 ; 因此,第 1 步不应用。

第 2 步中,与相关的跟踪标志-T1118 为 Microsoft SQL Server 7.0,使用您使用跟踪标记之前请参阅下面 Microsoft 知识库中相应的文章:
813492FIX: 创建索引失败 SQL Server 7.0 上启用了跟踪标志 1118年时

服务包信息

若要解决此问题,获得最新的 service pack,对于 Microsoft SQL Server 2000。有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
290211如何获取最新的 SQL Server 2000 服务包

修补程序信息

修补程序 8.00.0702

此修补程序的英文版具有的文件属性 (或更新的文件属性) 在下表中列出。日期和时间对这些文件列出在协调世界时 (UTC)。当您查看文件信息时,将转换为本地时间。若要 UTC 与本地时间之间的时差使用控制面板中的 日期和时间 项中的 时区 选项卡。
   Date         Time   Version         Size       File name
   ----------------------------------------------------------------
   30-Aug-2002  21:08                    786,432  Distmdl.ldf
   30-Aug-2002  21:08                  2,359,296  Distmdl.mdf
   09-Oct-2002  00:54                        544  Drop_repl_hotfix.sql
   02-Jul-2002  15:35  2000.80.650.0     107,088  Impprov.dll      
   19-Jul-2002  16:56                    774,516  Instdist.sql
   08-Oct-2002  23:56                     12,615  Inst_repl_hotfix.sql
   20-Aug-2002  16:24  2000.80.679.0     111,172  Logread.exe      
   07-Apr-2002  02:08  2000.80.606.0      62,024  Odsole70.dll     
   03-Jan-2002  01:59                     18,185  Qfe356326.sql
   20-Aug-2002  16:47  2000.80.679.0     135,748  Qrdrsvc.exe      
   26-Aug-2002  22:49  2000.80.679.0     406,088  Rdistcom.dll     
   04-Oct-2001  01:36                    437,302  Replcom.sql
   20-Aug-2002  16:33  2000.80.679.0     152,136  Replmerg.exe     
   19-Nov-2001  20:36                    993,945  Replmerg.sql
   05-Nov-2002  23:48  2000.80.700.0     221,768  Replprov.dll     
   04-Oct-2001  01:36                    986,906  Replsys.sql
   04-Oct-2001  01:36                    881,228  Repltran.sql
   26-Aug-2002  22:49  2000.80.679.0     283,208  Rinitcom.dll     
   16-Sep-2002  22:31                    390,045  Securityhotfix.sql
   26-Aug-2002  22:49  2000.80.679.0      28,672  Sqlagent.dll     
   26-Aug-2002  18:39  2000.80.679.0     311,872  Sqlagent.exe     
   28-Aug-2002  16:32  2000.80.679.0      49,152  Sqlagent.rll
   26-Aug-2002  22:49  2000.80.679.0      53,824  Sqlcmdss.dll     
   28-Aug-2002  16:40  2000.80.679.0      12,288  Sqlcmdss.rll
   24-Oct-2002  17:37  2000.80.695.0     176,696  Sqlmap70.dll     
   11-Nov-2002  09:52  2000.80.702.0   7,471,185  Sqlservr.exe     
   11-Nov-2002  09:51                 12,633,088  Sqlservr.pdb
   01-Nov-2002  18:56  2000.80.698.0      45,644  Sqlvdi.dll       
   01-Nov-2002  18:00  2000.80.697.0      82,492  Ssnetlib.dll     
   07-Apr-2002  02:08  2000.80.606.0      70,208  Xplog70.dll      
   07-Apr-2002  02:08  2000.80.606.0      53,828  Xpqueue.dll      
   07-Apr-2002  02:08  2000.80.606.0     156,228  Xprepl.dll       
   12-Jul-2002  01:00  2000.80.658.0     279,104  Xpstar.dll       
   16-Sep-2002  23:12  2000.80.686.0      98,872  Xpweb70.dll   
				
备注
  • 由于存在文件依赖性最新的修补程序或功能,它包含该文件可能还包含其他文件。
  • 此修补程序 8.00.0702 是为应用了 SQL Server 2000 SP2 的计算机。如果您在安装 SQL Server 2000 SP3 安装 SQL Server 2000 SP3 汇总版本 8.00.0765。

状态

Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的问题。 Microsoft SQL Server 2000 Service Pack 4 中,第一次已得到纠正此问题。

更多信息

如何修复程序 8.00.0702 减少了争用

修补程序 8.00.0702 引入混合的页分配的一种循环的算法。在的修补程序的起始文件现在将不同的每个连续的混合的页分配 (如果存在多个文件)。这样就避免了由分解的出现顺序相同 SGAMs 通过每次使用相同的起点火车的争用问题。新的分配算法,为 SGAM 纯循环,不会不遵守成比例的填充,以维护速度。Microsoft 建议您创建 tempdb 数据文件具有相同的大小。

如何实现跟踪标记-T1118 减少争用

这是如何的列表使用的 -T1118 减少争用:
  • -T1118 是服务器范围设置。
  • 包括在 -T1118 SQL Server 为跟踪在 $ 启动参数中的标记,以便跟踪标记保持有效即使 SQL Server 被回收。
  • -T1118 删除服务器上的几乎所有单页分配。
  • 通过禁用大部分单页分配,可以减少在 SGAM 页争用。
  • -T1118 打开 ON,从一个 GAM 执行几乎所有新的分配页 (例如 2: 1: 2) 的八 (8) 页 (1 扩展盘区) 一次以一个到对象而不是在一页从分配的第一次八 (8) 页面没有跟踪标记的一个对象的扩展盘区。
  • IAM 页仍使用单页分配,从 SGAM 页甚至,-T1118 打开 ON。但是,组合在一起的修补程序 8.00.0702 和提高的 tempdb 数据文件,实际效果就是减少了争夺 SGAM 页上。空间问题请参阅本文的"缺点"部分。
注意当您 SQL Server 2000 的实例打开跟踪标志 1118年时, 您可能无法成功还原 SQL Server 7.0 数据库。有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
837938当您尝试还原 SQL Server 2000 实例的上一个 SQL Server 7.0 数据库备份时,您可能会收到一条错误消息

增加的 tempdb 数据文件具有相同的大小调整的数量

如果 tempdb 的数据文件大小为 5 的 GB,并且日志文件大小为 5 GB 建议增加到 10 (每个要保持相等的大小调整的 500 MB),单个数据文件并将保留原样日志文件。具有不同的磁盘上不同的数据文件是很好。但是,这不是必需的它们可以在同一磁盘上共存。

最佳的 tempdb 数据文件数取决于在 tempdb 中看到的争用程度。作为一个起点,您可以配置至少要等于 SQL Server 为分配的处理器数的 tempdb。对于更高的最终系统 (例如对于 16 或 32 个进程),起始编号可以是 10。如果不缩小将争用,了您可能不得不增加更多的数据文件的数量。

注意一个双核处理器被认为是两个处理器。

等于数据文件的大小很重要,因为按比例填充算法根据文件的大小。如果使用不等的大小创建数据文件,按比例填充算法将尝试使用多个 GAM 分配的最大的文件,而不是分配之间的所有文件,从而攻破创建多个数据文件的目的分配。

按比例填充算法也会影响 tempdb 的数据文件 auto-grow。因此,可能关闭 auto-grow 功能对 tempdb 数据文件是个好主意。如果关闭 auto-grow 选项必须确保创建数据文件,以便它们是足够大,以防止服务器遇到的与 tempdb 的磁盘空间不足。

如何增加 tempdb 数据数量文件具有相同的大小调整可以减少争用

下面是如何增加 tempdb 数据文件具有相同的大小调整的数量减少了争用的列表:
  • 与对 tempdb 的一个数据文件,您只有一个 GAM 页和一个 SGAM 页的每个有 4 GB 的空间。
  • 有效地增加的数据文件具有相同大小的 tempdb 数创建为每个数据文件的一个或多个 GAM 和 SGAM 页。
  • GAM 分配算法提供出一个扩展盘区在 (8 个连续页) 的时间从循环方式中的文件数时采用按比例填充。因此,如果 10 个同等大小的文件在第一个分配是从 File1,File2,从第二个从 File3,依此类推,第三个。
  • 因为 8 个页面都标记为完全一次,因为 GAM 分配页,会减少资源争用,PFS 页。

缺点

如前面提到的那样,建议只不利方面是您可能会看到该数据库的大小增加时满足下列条件,则:
  • 在用户数据库中创建新对象。
  • 每个新对象占用小于 64 KB 的存储。
满足这些条件时您可能会分配 64 KB (8 页 * 8 KB = 64 KB) 使对象只需要 8 KB 的空间,因此浪费 56 KB 的存储。但是,如果新建对象使用超过 64 KB (8 页) 在它的生存期中,请使用跟踪标记没有负面影响。因此,在最坏的情况下 SQL Server 可能最终仅对新的对象永远不会超出一 (1) 页的第一个分配的过程中分配七 (7) 的其他页。

参考

GAM、 SGAM、 PFS 和 IAM 有关的详细信息请参阅以下 SQL Server 2000 丛书联机主题:
  • "管理使用对象的空间"
  • 管理扩展盘区分配和可用空间
  • 表和索引构架
  • "堆结构"

属性

文章编号: 328551 - 最后修改: 2009年3月13日 - 修订: 12.0
这篇文章中的信息适用于:
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 标准版
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Workgroup Edition
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
  • Microsoft SQL Server 2000 Enterprise Edition 64-bit
关键字:?
kbmt kbhotfixserver kbqfe kbsqlserv2000presp4fix kbfix kbbug KB328551 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 328551
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com