一、简介
Microsoft SQL Server 2005 使其查询执行计划(又称作 Showplan)可以采用 XML 格式。而且可以使用任何一种 XML 技术(例如 XPath、XQuery 或 XSLT)来处理 XML Showplan。本文描述从其 XML Showplan 中提取查询的估计执行成本的应用程序。Transact-SQL 所提取的成本可用于 Transact-SQL 窗口。使用该技术,用户只能将那些成本低于预定阈值的查询提交到运行 SQL Server 的服务器。这确保该服务器不会由于成本高、长时间运行的查询而超载。
二、目标和受众
本文的目标是 SQL Server 开发人员和数据库管理员 (DBA)。它向数据库管理员简要介绍了 SQLCLR(公共语言运行库)。用于提取 Showplan 的应用程序使用两个 Microsoft Visual C# .NET 小程序,本文还详细阐述 SQL Server 如何调用通过编译这些程序生成的 DLL。该应用程序还使用了可用于查询和提取 XML 数据中信息的 XPath 和 XQuery 技术。SQL Server 2005 为这两种查询语言提供内置支持。本文演示这两种语言如何与 Transact-SQL 进行无缝地交互操作。
三、问题声明SQL Server DBA 有时会遇到这种情况,即用户在工作高峰期向服务器提交长时间运行的查询,因而降低了服务器的响应速度。有两种方法可以防止这一情况的发生:
1.
DBA 可使用 sp_configure 将 query governor cost limit 选项设置为特定阈值。(这是一个高级选项。)该阈值在整个服务器内是有效的。
2.
要影响连接的阈值,DBA 可以使用 SET QUERY_GOVERNOR_COST_LIMIT 语句。
可以想像一下需要更细粒度控制的情况。例如,用户可能有三个等效但语法结构不同的查询,并希望以执行速度尽可能最快的形式自动提交该查询。此外,用户还可能希望不执行任何估计执行成本超过特定阈值的查询。以编程方式访问查询成本,将允许用户通过控制基于估计执行成本的查询提交过程来构建服务器友好的应用程序。
本文中描述的技术允许使用 SQLCLR 用户定义的过程、XPath、XQuery 以及 Visual C# 技术,以编程方式访问查询的估计执行成本。如本文所述,通过用户定义的过程使用 SQLCLR 来访问 SQL Server 2005 的基本技术也可用于其他应用程序。
在 SQL Server 2005 中,可以使用 .NET Framework 中可用的任何编程语言(例如 Microsoft Visual Basic .NET 或 Visual C#)来定义用户定义的类型、函数、过程以及聚合。从概念上讲,在定义了用户定义的实体后,就可以在 SQL Server 中使用该实体,就像是由 SQL Server 本身提供的实体一样。例如,定义用户定义的 T 类型之后,还可以定义带有一列 T 类型的关系型表。定义了用户定义的 P 过程后,就可以使用 EXEC P 调用该过程,就像 Transact-SQL 过程一样。
四、解决方案 1:使用 CLR 存储过程和进程内数据访问提取查询成本实现该解决方案
1.
使用 .NET Framework 语言(本文中使用 Visual C#)定义存储过程,该过程将从给定查询的 XML Showplan 中获得查询成本。
2.
使用正在运行 SQL Server 的服务器注册此过程。此操作需要两个子步骤:
1.
在 SQL Server 中注册该程序集。
2.
创建一个引用外部 CLR 方法的存储过程。
图 1. 在SQLCLR中实现和注册用户定义的存储过程的步骤
一、简介
Microsoft SQL Server 2005 使其查询执行计划(又称作 Showplan)可以采用 XML 格式。而且可以使用任何一种 XML 技术(例如 XPath、XQuery 或 XSLT)来处理 XML Showplan。本文描述从其 XML Showplan 中提取查询的估计执行成本的应用程序。Transact-SQL 所提取的成本可用于 Transact-SQL 窗口。使用该技术,用户只能将那些成本低于预定阈值的查询提交到运行 SQL Server 的服务器。这确保该服务器不会由于成本高、长时间运行的查询而超载。
二、目标和受众
本文的目标是 SQL Server 开发人员和数据库管理员 (DBA)。它向数据库管理员简要介绍了 SQLCLR(公共语言运行库)。用于提取 Showplan 的应用程序使用两个 Microsoft Visual C# .NET 小程序,本文还详细阐述 SQL Server 如何调用通过编译这些程序生成的 DLL。该应用程序还使用了可用于查询和提取 XML 数据中信息的 XPath 和 XQuery 技术。SQL Server 2005 为这两种查询语言提供内置支持。本文演示这两种语言如何与 Transact-SQL 进行无缝地交互操作。
三、问题声明SQL Server DBA 有时会遇到这种情况,即用户在工作高峰期向服务器提交长时间运行的查询,因而降低了服务器的响应速度。有两种方法可以防止这一情况的发生:
1.
DBA 可使用 sp_configure 将 query governor cost limit 选项设置为特定阈值。(这是一个高级选项。)该阈值在整个服务器内是有效的。
2.
要影响连接的阈值,DBA 可以使用 SET QUERY_GOVERNOR_COST_LIMIT 语句。
可以想像一下需要更细粒度控制的情况。例如,用户可能有三个等效但语法结构不同的查询,并希望以执行速度尽可能最快的形式自动提交该查询。此外,用户还可能希望不执行任何估计执行成本超过特定阈值的查询。以编程方式访问查询成本,将允许用户通过控制基于估计执行成本的查询提交过程来构建服务器友好的应用程序。
本文中描述的技术允许使用 SQLCLR 用户定义的过程、XPath、XQuery 以及 Visual C# 技术,以编程方式访问查询的估计执行成本。如本文所述,通过用户定义的过程使用 SQLCLR 来访问 SQL Server 2005 的基本技术也可用于其他应用程序。
在 SQL Server 2005 中,可以使用 .NET Framework 中可用的任何编程语言(例如 Microsoft Visual Basic .NET 或 Visual C#)来定义用户定义的类型、函数、过程以及聚合。从概念上讲,在定义了用户定义的实体后,就可以在 SQL Server 中使用该实体,就像是由 SQL Server 本身提供的实体一样。例如,定义用户定义的 T 类型之后,还可以定义带有一列 T 类型的关系型表。定义了用户定义的 P 过程后,就可以使用 EXEC P 调用该过程,就像 Transact-SQL 过程一样。
四、解决方案 1:使用 CLR 存储过程和进程内数据访问提取查询成本实现该解决方案
1.
使用 .NET Framework 语言(本文中使用 Visual C#)定义存储过程,该过程将从给定查询的 XML Showplan 中获得查询成本。
2.
使用正在运行 SQL Server 的服务器注册此过程。此操作需要两个子步骤:
1.
在 SQL Server 中注册该程序集。
2.
创建一个引用外部 CLR 方法的存储过程。
图 1. 在SQLCLR中实现和注册用户定义的存储过程的步骤
一、简介
Microsoft SQL Server 2005 使其查询执行计划(又称作 Showplan)可以采用 XML 格式。而且可以使用任何一种 XML 技术(例如 XPath、XQuery 或 XSLT)来处理 XML Showplan。本文描述从其 XML Showplan 中提取查询的估计执行成本的应用程序。Transact-SQL 所提取的成本可用于 Transact-SQL 窗口。使用该技术,用户只能将那些成本低于预定阈值的查询提交到运行 SQL Server 的服务器。这确保该服务器不会由于成本高、长时间运行的查询而超载。
二、目标和受众
本文的目标是 SQL Server 开发人员和数据库管理员 (DBA)。它向数据库管理员简要介绍了 SQLCLR(公共语言运行库)。用于提取 Showplan 的应用程序使用两个 Microsoft Visual C# .NET 小程序,本文还详细阐述 SQL Server 如何调用通过编译这些程序生成的 DLL。该应用程序还使用了可用于查询和提取 XML 数据中信息的 XPath 和 XQuery 技术。SQL Server 2005 为这两种查询语言提供内置支持。本文演示这两种语言如何与 Transact-SQL 进行无缝地交互操作。
三、问题声明SQL Server DBA 有时会遇到这种情况,即用户在工作高峰期向服务器提交长时间运行的查询,因而降低了服务器的响应速度。有两种方法可以防止这一情况的发生:
1.
DBA 可使用 sp_configure 将 query governor cost limit 选项设置为特定阈值。(这是一个高级选项。)该阈值在整个服务器内是有效的。
2.
要影响连接的阈值,DBA 可以使用 SET QUERY_GOVERNOR_COST_LIMIT 语句。
可以想像一下需要更细粒度控制的情况。例如,用户可能有三个等效但语法结构不同的查询,并希望以执行速度尽可能最快的形式自动提交该查询。此外,用户还可能希望不执行任何估计执行成本超过特定阈值的查询。以编程方式访问查询成本,将允许用户通过控制基于估计执行成本的查询提交过程来构建服务器友好的应用程序。
本文中描述的技术允许使用 SQLCLR 用户定义的过程、XPath、XQuery 以及 Visual C# 技术,以编程方式访问查询的估计执行成本。如本文所述,通过用户定义的过程使用 SQLCLR 来访问 SQL Server 2005 的基本技术也可用于其他应用程序。
在 SQL Server 2005 中,可以使用 .NET Framework 中可用的任何编程语言(例如 Microsoft Visual Basic .NET 或 Visual C#)来定义用户定义的类型、函数、过程以及聚合。从概念上讲,在定义了用户定义的实体后,就可以在 SQL Server 中使用该实体,就像是由 SQL Server 本身提供的实体一样。例如,定义用户定义的 T 类型之后,还可以定义带有一列 T 类型的关系型表。定义了用户定义的 P 过程后,就可以使用 EXEC P 调用该过程,就像 Transact-SQL 过程一样。
四、解决方案 1:使用 CLR 存储过程和进程内数据访问提取查询成本实现该解决方案
1.
使用 .NET Framework 语言(本文中使用 Visual C#)定义存储过程,该过程将从给定查询的 XML Showplan 中获得查询成本。
2.
使用正在运行 SQL Server 的服务器注册此过程。此操作需要两个子步骤:
1.
在 SQL Server 中注册该程序集。
2.
创建一个引用外部 CLR 方法的存储过程。
图 1. 在SQLCLR中实现和注册用户定义的存储过程的步骤
一、简介
Microsoft SQL Server 2005 使其查询执行计划(又称作 Showplan)可以采用 XML 格式。而且可以使用任何一种 XML 技术(例如 XPath、XQuery 或 XSLT)来处理 XML Showplan。本文描述从其 XML Showplan 中提取查询的估计执行成本的应用程序。Transact-SQL 所提取的成本可用于 Transact-SQL 窗口。使用该技术,用户只能将那些成本低于预定阈值的查询提交到运行 SQL Server 的服务器。这确保该服务器不会由于成本高、长时间运行的查询而超载。
二、目标和受众
本文的目标是 SQL Server 开发人员和数据库管理员 (DBA)。它向数据库管理员简要介绍了 SQLCLR(公共语言运行库)。用于提取 Showplan 的应用程序使用两个 Microsoft Visual C# .NET 小程序,本文还详细阐述 SQL Server 如何调用通过编译这些程序生成的 DLL。该应用程序还使用了可用于查询和提取 XML 数据中信息的 XPath 和 XQuery 技术。SQL Server 2005 为这两种查询语言提供内置支持。本文演示这两种语言如何与 Transact-SQL 进行无缝地交互操作。
三、问题声明SQL Server DBA 有时会遇到这种情况,即用户在工作高峰期向服务器提交长时间运行的查询,因而降低了服务器的响应速度。有两种方法可以防止这一情况的发生:
1.
DBA 可使用 sp_configure 将 query governor cost limit 选项设置为特定阈值。(这是一个高级选项。)该阈值在整个服务器内是有效的。
2.
要影响连接的阈值,DBA 可以使用 SET QUERY_GOVERNOR_COST_LIMIT 语句。
可以想像一下需要更细粒度控制的情况。例如,用户可能有三个等效但语法结构不同的查询,并希望以执行速度尽可能最快的形式自动提交该查询。此外,用户还可能希望不执行任何估计执行成本超过特定阈值的查询。以编程方式访问查询成本,将允许用户通过控制基于估计执行成本的查询提交过程来构建服务器友好的应用程序。
本文中描述的技术允许使用 SQLCLR 用户定义的过程、XPath、XQuery 以及 Visual C# 技术,以编程方式访问查询的估计执行成本。如本文所述,通过用户定义的过程使用 SQLCLR 来访问 SQL Server 2005 的基本技术也可用于其他应用程序。
在 SQL Server 2005 中,可以使用 .NET Framework 中可用的任何编程语言(例如 Microsoft Visual Basic .NET 或 Visual C#)来定义用户定义的类型、函数、过程以及聚合。从概念上讲,在定义了用户定义的实体后,就可以在 SQL Server 中使用该实体,就像是由 SQL Server 本身提供的实体一样。例如,定义用户定义的 T 类型之后,还可以定义带有一列 T 类型的关系型表。定义了用户定义的 P 过程后,就可以使用 EXEC P 调用该过程,就像 Transact-SQL 过程一样。
四、解决方案 1:使用 CLR 存储过程和进程内数据访问提取查询成本实现该解决方案
1.
使用 .NET Framework 语言(本文中使用 Visual C#)定义存储过程,该过程将从给定查询的 XML Showplan 中获得查询成本。
2.
使用正在运行 SQL Server 的服务器注册此过程。此操作需要两个子步骤:
1.
在 SQL Server 中注册该程序集。
2.
创建一个引用外部 CLR 方法的存储过程。
图 1. 在SQLCLR中实现和注册用户定义的存储过程的步骤