当前位置:文档之家› 优化数据库性能

优化数据库性能

查询速度慢如何解决------主要针对SQL 2005 为例引起查询或更新的执行时间超过预期时间的原因有多种。

查询运行慢,可能是由与运行 SQL Server 的网络或计算机相关的性能问题引起的,也可能是由物理数据库设计问题引起的。

查询和更新运行慢的最常见原因有:∙网络通讯速度慢。

∙服务器的内存不足,或者没有足够的内存供 SQL Server 使用。

∙索引列上缺少有用的统计信息。

∙索引列上的统计信息过期。

∙缺少有用的索引。

∙缺少有用的索引视图。

∙缺少有用的数据条带化。

∙缺少有用的分区。

1、用于对运行慢的查询进行故障排除的清单当查询或更新花费的时间比预期时间长时,请考虑以下问题,找到可解答前一节中列出的查询运行慢的原因:①. 是与组件而不是与查询相关的性能问题吗?例如,是网络性能低的问题吗?有其他可能引起或造成性能降低的组件吗?Windows 系统监视器可用于监视与 SQL Server 和非 SQL Server 相关的组件的性能。

有关详细信息,请参阅监视资源使用情况(系统监视器)。

②. 如果性能问题与查询相关,那么涉及到的是哪个或哪组查询?首先使用 SQL Server Profiler来帮助找出运行慢的查询。

有关详细信息,请参阅使用 SQL Server Profiler。

在找出运行慢的查询后,可以使用 SET 语句启用 SHOWPLAN、STATISTICS IO、STATISTICS TIME 和 STATISTICS PROFILE 选项,进一步分析查询的性能,相关描述如下:✓SET SHOWPLAN_XML ON 描述 SQL Server 查询优化器选择用来检索完善的 XML 文档数据的方法。

有关详细信息,请参阅 SET SHOWPLAN_XML (Transact-SQL)。

在 Microsoft SQL Server 2005 中,建议使用这种方法。

此 SET 选项生成的信息比SHOWPLAN_ALL 和 SHOWPLAN_TEXT SET 选项生成的信息详细。

✓SET SHOWPLAN_ALL ON 描述 SQL Server 查询优化器选择的数据检索方法。

有关详细信息,请参阅 SET SHOWPLAN_ALL (Transact-SQL)。

此 SET 选项生成的信息比 SHOWPLAN_TEXT SET 选项生成的信息详细。

✓SET SHOWPLAN_TEXT ON 返回每条 Transact-SQL 语句的执行信息,但不执行它们。

有关详细信息,请参阅SET SHOWPLAN_TEXT (Transact-SQL)。

✓SET STATISTICS XML ON 显示每个查询执行后的结果集,并以完善的 XML 文档的形式显示查询执行的概要信息。

有关详细信息,请参阅 SET STATISTICS XML (Transact-SQL)。

在 SQL Server 2005 中,建议使用这种方法。

此 SET 选项生成的信息比 STATISTICS PROFILER SET 选项生成的信息详细。

✓SET STATISTICS PROFILE ON 显示每个查询执行后的结果集,并显示查询执行的概要信息。

有关详细信息,请参阅 SET STATISTICS PROFILE (Transact-SQL)。

✓SET STATISTICS IO ON 报告与语句中引用的每个表的扫描数、逻辑读取数(在高速缓存中访问的页数)和物理读取数(访问磁盘的次数)的相关信息。

有关详细信息,请参阅 SET STATISTICS IO (Transact-SQL)。

✓SET STATISTICS TIME ON 显示分析、编译和执行查询所需的时间(毫秒)。

有关详细信息,请参阅 SET STATISTICS TIME (Transact-SQL)。

在 SQL Server Management Studio 中,还可以打开估计的或实际的图形执行计划选项,以查看 SQL Server 如何检索数据的图示。

估计的图形执行计划选项是基于 SHOWPLAN_XML SET 选项的,实际的图形执行计划选项则是基于 STATISTICS XML SET 选项的。

有关详细信息,请参阅显示图形执行计划 (SQL Server Management Studio)。

由这些工具收集的信息使您能够确定 SQL Server 查询优化器如何执行查询以及使用的是哪些索引。

利用这些信息,可以确定通过重写查询、更改表上的索引或修改数据库设计等方法能否提高性能。

有关详细信息,请参阅分析查询。

③. 是否已经用有用的统计信息优化查询?SQL Server 自动在索引列上创建对列内值的分布情况的统计信息。

也可以手动(使用 SQL Server Management Studio 或 CREATE STATISTICS 语句)或自动(如果将 AUTO_CREATE_STATISTICS 数据库选项设置为 TRUE)在非索引列上创建这些统计信息。

查询处理器可以利用这些统计信息来确定最佳的查询评估策略。

在联接操作所涉及的非索引列上维护附加的统计信息可以提高查询性能。

有关详细信息,请参阅索引统计信息。

使用 SQL Server Profiler 或 SQL Server Management Studio 内的图形执行计划来监视查询,以确定查询是否有足够的统计信息。

有关详细信息,请参阅Errors and Warnings 事件类别(数据库引擎)。

④. 查询统计是最新的吗?统计信息是自动更新的吗?SQL Server 自动在索引列上创建并更新查询统计信息(只要没有禁用对查询统计信息的自动更新)。

另外,也可以手动(使用 SQL Server Management Studio 或 UPDATE STATISTICS 语句)或自动(如果将 AUTO_UPDATE_STATISTICS 数据库选项设置为 TRUE)在非索引列上更新统计信息。

最新的统计信息不取决于日期或时间数据。

如果尚未执行 UPDATE 操作,则查询统计信息仍是最新的。

如果没有将统计信息设置为自动更新,请进行设置。

有关详细信息,请参阅索引统计信息。

⑤. 有合适的索引吗?添加一个或多个索引会不会提高查询性能?有关详细信息,请参阅常规索引设计指南和数据库引擎优化顾问参考。

数据库引擎优化顾问也可以建议创建必要的统计信息。

⑥. 有数据热点或索引热点吗?请考虑使用磁盘条带化。

使用 0 级 RAID(独立磁盘冗余阵列)可实现磁盘条带化,在这种 RAID 上,数据分布在多个磁盘驱动器上。

有关详细信息,请参阅使用文件和文件组和 RAID。

⑦. 是否为查询优化器提供了优化复杂查询的最有利条件?有关详细信息,请参阅查询优化建议。

⑧. 如果数据量很大,需要将其分区吗?便于数据管理是分区的主要优点,而如果将数据的表和索引进行相似的分区,则分区还可以提高查询性能。

有关详细信息,请参阅了解分区和优化物理数据库设计。

2、执行计划优化的举例说明2.1 执行计划的说明set statistics profile on (显示语句的配置文件信息。

)set statistics io on (显示关于Transact-SQL 语句生成的磁盘活动量的信息) set statistics time on (显示分析、编译和执行各语句所需的毫秒数) select * from cva_benstatus_oprset statistics time offset statistics io offset statistics profile off2.2执行计划分析:像Concatenation,Table Spool、Index Spool和Parallelism都是使查询速度加快的SQL 优化措施。

✓Table Spool和Index Spool操作,这个操作的是将输入的表或者索引直接放到缓存(通常是tempdb)中以减小对输入的重新扫描。

✓Parallelism是当执行并行执行计划时,系统所有空闲的CPU一起参与执行这个语句,从而获得更好的性能。

SP_Configure 中使用 cost threshold for parallelism 选项指定 Microsoft SQL Server 创建和运行并行查询计划的阈值。

仅当运行同一查询的串行计划的估计开销高于在 cost threshold for parallelism 中设置的值时,SQL Server 才创建和运行该查询的并行计划。

开销指的是在特定硬件配置中运行串行计划估计需要花费的时间(秒)。

只能在对称多处理器系统上设置 cost threshold for parallelism。

这个阙值一般是5秒,并行执行计划对一个具体的查询而言,性能肯定是提高的,但对于一个系统而言,过多的使用并行执行计划,会引起整体性能的下降,所以要掌握一个度。

也就是说阕值调为1秒了,但整体的查询性能可能小降了,所以这个值要根据硬件和实际使用情况进行相应的调整。

✓执行计划是系统自动优化的结果,为了提高某个查询的性能,也可以使用计划强制来指定查询计划。

(具体怎么做,需要查询SQL在线帮助)2.3查询语法方面的优化措施:✓Union All(SQL Server 将OR条件看成Union All)会使SQL Server生成的查询计划中偏好于Concatenation,Table Spool和Index Spool操作。

在查询中增加一个条件永远为假的OR子句,促使SQL选择Table Spool和Index Spoo l操作提高查询性能.3、统计信息和索引优化的举例说明3.1相关基础知识统计信息相关知识:SQL Server 2005允许创建有关列中值的分布情况的统计信息。

为了评估查询的开销来确定最佳的执行计划,查询优化器需要使用这些统计信息评估可用的索引。

您可以使用DBCC SHOW_STATISTICS 查看具体对象的统计信息。

随着时间的推移,统计信息可能会过时(Out of Date),也就是说它已经不能比较真实地反映数据的分布情况,这时当SQL Server优化一个查询的时候,查询优化器就会首先更新统计信息,带来额外的时间开销。

所以在不影响服务器负载的情况下,建议您开启数据库自动更新统计信息(Auto Update Statistics)的选项。

具体有关统计信息(statistics)的相关内容请参考如下的文档:/en-us/library/ms190397.aspxStatistics Used by the Query Optimizer in Microsoft SQL Server 2005/technet/prodtechnol/sql/2005/qrystats.mspx索引碎片相关知识:索引建立时,索引页(Index Page)的存储在逻辑上都是连续的。

相关主题