你目前正处于脱机状态,正在等待 Internet 重新连接

如何生成所需的数据库元数据在 SQL Server 中创建仅用于统计信息的数据库的脚本

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 914288
简介
Microsoft SQL Server 查询优化器使用以下类型的信息来确定最佳查询计划:
  • 数据库元数据
  • 硬件环境
  • 数据库会话状态
通常情况下,您必须模拟所有这些相同类型的信息,如果您要复制的查询优化器在测试系统上的行为。

Microsoft 客户支持服务可能会要求您生成脚本的数据库元数据。Microsoft 客户支持服务使用此脚本的数据库元数据研究的优化问题。这篇文章描述了统计信息脚本生成的步骤。本文还介绍了如何查询优化器将使用的信息。
更多信息
如果您使用 SQL Server 2005 中,执行生成脚本的步骤之前,请确保 SQL Server 管理 Studio 是 SQL 服务器 2005 Service Pack 2 版或更高版本。如果您使用早期版本的 SQL Server 管理 Studio 在 SQL Server 2005 时,[脚本] 向导不包含所有必需选项为此文章中的步骤才能正常工作。

整个数据库脚本

仅统计信息的克隆数据库生成时,它可能更容易且更可靠地在整个数据库 (而不是单个对象的脚本的脚本。当您为整个数据库编写脚本时,您将得到以下好处:
  • 可以避免缺重现该问题所需的依存对象的问题。
  • 您需要选择必需的对象的步骤明显较少。
注意:如果数据库的元数据包含上千个对象生成的数据库中的脚本,脚本进程占用了大量的 CPU 资源。我们建议您在非高峰时间生成脚本。或者,您可以使用第二个选项生成单个对象的脚本。

若要编写脚本的查询所引用的每个数据库,请执行以下步骤:
  1. 打开 SQL Server 管理 Studio。
  2. 对象资源管理器中展开数据库,然后找到要编写脚本的数据库。
  3. 用鼠标右键单击数据库,指向任务,然后单击生成脚本
  4. 在脚本向导中,请验证选择了正确的数据库。单击以选中在所选数据库对象的所有脚本复选框,然后单击下一步
  5. 选择脚本选项对话框中,更改以下设置的默认值为在下表中列出的值。
    脚本选项要选择值
    Ansi 填充
    继续编写脚本错误
    生成依赖对象的脚本
    包括系统约束名
    编写排序规则脚本
    创建数据库的脚本
    登录脚本
    脚本对象级权限
    编写统计信息脚本编写统计信息脚本和柱状图
    索引脚本
    触发器脚本
    注意:登录脚本脚本对象级别的权限选项可能不需要除非架构包含按登录名排列dbo之外所拥有的对象。
  6. 单击下一步
  7. 单击脚本保存到文件选项,然后输入文件的名称。
  8. 单击完成

各个对象的脚本

您可以仅脚本各个对象所引用的特定的查询,而不是脚本编写完整的数据库。但是,除非使用具有架构绑定子句创建的所有数据库对象, sys.depends系统表中的相关性信息可能始终不准确。此错误可能会导致以下问题之一:
  • 脚本编写过程编写相关对象没有脚本。
  • 脚本编写过程可能脚本中的正确顺序的对象。若要成功运行此脚本,您必须手动编辑生成的脚本。
因此,我们不建议您编写的脚本是单个对象,除非该数据库有大量对象和脚本将否则花很长时间。如果您必须使用单个脚本的对象,请执行以下步骤:
  1. 在 SQL Server 管理 Studio 中,展开数据库,然后找到要编写脚本的数据库。
  2. 用鼠标右键单击数据库,指向脚本的数据库为、 指向创建,,然后单击文件
  3. 输入文件的名称,然后单击保存

    核心数据库容器将为其编写脚本。此容器包括文件、 文件组、 数据库和属性。
  4. 用鼠标右键单击数据库,指向任务,然后单击生成脚本
  5. 请确保选择了正确的数据库,然后单击下一步
  6. 选择脚本选项对话框中,更改以下设置的默认值为在下表中列出的值。
    脚本选项要选择值
    Ansi 填充
    继续编写脚本错误
    包括系统约束名
    生成依赖对象的脚本
    编写排序规则脚本
    登录脚本
    脚本对象级权限
    编写统计信息脚本编写统计信息脚本和柱状图
    使用数据库脚本
    索引脚本
    触发器脚本
    注意:登录脚本脚本对象级别的权限选项可能不需要除非架构包含按登录名排列dbo之外所拥有的对象。
  7. 选择对象类型对话框中,选择有问题的查询所引用的所有数据库对象类型。

    例如,如果查询只引用表,选择。如果查询引用视图,请选择视图和表。如果有问题的查询使用一个用户定义的函数,选择函数
  8. 当您选择查询所引用的对象类型时,单击下一步
  9. 将出现一个对话框,为您在步骤 7 中选择每个数据库对象类型。在每个对话框中,选择特定的表、 视图、 函数或其他数据库对象,然后单击下一步
  10. 单击脚本保存到文件选项,然后指定您在步骤 3 中输入的相同文件名。
  11. 单击完成以启动该脚本。
当该脚本已完成,将脚本文件发送给 Microsoft 技术支持工程师。Microsoft 技术支持工程师还可能要求下列信息:
  • 硬件配置,包括处理器和存在多少物理内存的数量
  • 当您运行查询时处于活动状态的设置选项
注意:您可能已经提供此信息通过发送一个 SQLDiag 报告或 SQL 事件探查器跟踪。您可能还使用另一种方法来提供此信息。

信息的使用方式

下表可帮助介绍了查询优化程序如何使用此信息来选择一个查询计划。

元数据

约束查询优化器通常使用约束来检测查询和基础架构之间的矛盾。例如,如果查询中有"位置栏 = 5" 条款和"检查 (col< 5)"="" check="" constraint="" exists,="" the="" query="" optimizer="" knows="" that="" no="" rows="" will="">

查询优化器作出相似类型的可空性有关的扣除额。例如,已知"所在列的 NULL"子句为 true 或 false,具体取决于列的为空性和列是否来自外部表的外部联接。外键约束的存在将有助于确定基数和相应的联接顺序。查询优化器可以使用约束信息来消除联接或简化谓词。这些更改可能删除访问基表的要求。
统计信息统计信息包含密度和显示的前导键的列的索引和统计分布的直方图。根据谓词的性质,查询优化器可能使用密度和 / 或直方图,可以估计谓词的基数。最新的统计数据都需要精确的基数估计值。基数估计值被用作运算符的成本估算中的输入。因此,您必须具有良好的基数的估计,以获得最佳查询计划。
表的大小 (行数和页)查询优化器使用直方图和密度来计算给定的谓词为真或假的可能性。最终的基数估计值的计算方法由子运算符返回的行数和概率相乘。表或索引中的页的数量是估算的 IO 开销中的因素。表的大小用来计算成本的扫描,并评估将在索引查找过程中访问的页数时很有用。
数据库选项几个数据库选项可能会影响优化。AUTO_CREATE_STATISTICSAUTO_UPDATE_STATISTICS选项会影响查询优化器将创建新的统计信息或已过期的更新统计信息。参数化级别会影响如何输入的查询进行参数化之前输入的查询传递到查询优化器。参数化可影响基数估计,还可以防止针对索引的视图和其他类型的优化匹配。DATE_CORRELATION_OPTIMIZATION设置会导致优化程序要搜索的列之间的关联。此设置会影响基数和成本的估计。

环境

会话设置选项ANSI_NULLS是否设置会影响"NULL = NULL"表达式的计算结果为 true。这取决于当前的设置,对外部联接的基数估计可能会更改。此外,还可以更改不明确的表达式。例如,"列 = NULL"表达式的计算结果以不同的方式取决于设置。但是,"col IS NULL"始终表达式的计算结果相同的方式。
硬件资源排序和哈希运算符的成本取决于相对的 SQL Server 使用的内存量。例如,如果数据的大小大于高速缓存,查询优化器将知道必须始终进行后台数据到磁盘。但是,如果缓存比小得多的数据的大小,才有可能在内存中完成操作。如果服务器有多个处理器,并且不使用"MAXDOP"提示或最大并行度配置选项已禁用并行,SQL Server 还将考虑不同的优化。
克隆数据库

警告:本文已自动翻译

属性

文章 ID:914288 - 上次审阅时间:01/27/2015 21:08:00 - 修订版本: 1.0

Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2014 Web, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Web, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2008 R2 Web, Microsoft SQL Server 2008 R2 Workgroup, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Web, Microsoft SQL Server 2008 Workgroup, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL 2005 Server Enterprise, Microsoft SQL Server 2005 Enterprise X64 Edition, Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Standard X64 Edition, Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems

  • kbexpertiseinter kbexpertiseadvanced kbsql2005engine kbhowto kbinfo kbmt KB914288 KbMtzh
反馈
="text/javascript" src="https://c.microsoft.com/ms.js"> ePV = 1; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write("