数据库引擎调整顾问

摘要:
SQL Server提供了一个名为数据库引擎优化顾问的工具。更改这些选项将扩大或缩小数据库引擎优化顾问用于提高性能的选项。

 SQL Server提供了一个被称为数据库引擎调整顾问的工具。这个工具帮助为一个给定的工作负载确认一组最优的索引,而不需要对数据库结构或SQL Server内部结构的深入了解。它还能为一小部分有问题的查询建议调整选项。除了好处该工具也有坏处。应该正确地使用。

一、数据库引擎调整顾问机制

  可以直接选择SQL Server 2008=》性能工具=》数据库引擎调整顾问来使用它。

  从Management Studio运行一个查询(选中所需查询,选择查询=》在数据库引擎调整顾问中分析查询),或者从Management Studio=》选择=》数据库引擎调整顾问中运行它。一旦该工具被打开并且连接到一个服务器,将看到如下所示窗口:

  数据库引擎调整顾问第1张

  数据引擎调整顾问已经连接到一个服务器。从这里,开始概述工作负载以及希望调整的对象。创建一个会话名称是有必要的,可以为会话添加一个用于归档的标注。然后,必须选择一个工作负载(一个文件或一个表),并浏览到合适的位置。工作负载根据启动数据库调整顾问的方式定义。如果从查询窗口启动,将看到一“查询”无线按钮,“文件”和“表”按钮将被禁用。还必须为“工作负载分析”设置定义数据库并最终选择一个需要调整的数据库。

  数据库引擎调整顾问第2张

  另外,通过“优化选项”选项卡,如下图所示:

  数据库引擎调整顾问第3张

  选择“限制优化时间”定义希望数据库引擎调整顾问运行的时间,然后定义调整停止的日期和时间。数据库引擎调整顾问运行的时间越长,就越能提供更好的建议。可以选择考虑由数据库引擎调整顾问创建的物理设计结构类型,还可以设置分区策略,这样,调整顾问可以知道是否应该考虑将表和索引分区作为分析的一部分。如果数据和结构不能保证,分区不一定是个理想的结果。最后,可以定义所希望在数据库中保持的物理设计结构。

  更改这些选项将使数据库引擎调整顾问用于改进性能的选择变宽或变窄。

  单击“高级选项”按钮还有更多选项。

  数据库引擎调整顾问第4张

  这个对话框中,可以限制建议的空间和包含在一个索引中的列数。最后可以确定,新的索引或索引中的改动是作为在线还是离线的索引操作完成。

  一旦适当地定义了所有这些设置,就可以单击“开始分析”按钮开启动数据库调整顾问。所创建的会话保存在所针对的所有服务器实例的msdb数据库中,它显示正在分析的内容和所取得进展的细节。

  数据库引擎调整顾问第5张

  数据库引擎调整顾问报告:

报告名称报告描述
Column Access(列访问)列出工作负载中引用的列和表
Database Access(数据库访问)列出工作负载中引用的每个数据库和每个数据库工作负载的百分比
Event Frequency(事件频率)按照发生频率列出工作负载中的所有事件
Index Detail(Current)索引细节(当前)定义索引及工作负载引用的属性
Index Detail(Recommended)索引细节(建议)和索引细节相同,但显示数据库引擎调整顾问所建议的索引的信息
Index Usage(Current)索引使用(当前)列出索引和工作负载引用的百分比
Index Usage(Recommended)索引使用(建议)和使用索引报告相同,但是出自于建议的索引
Statement Cost(语句开销)列出在建议实施的情况下每个语句的性能改进
Statement Cost Range(语句开销范围)将开销的改进分为百分比,以显示可以从给定的每组修改中得到多少益处
Statement Detail(语句细节)列出工作负载中的语句、开销以及如果建议实施时减少的开销
Statement-to-Index RelationShip(语句与索引的关系)列出单个语句引用的索引。有当前和建议的版本。
Table Access(表访问)列出工作负载引用的表
View-to-Table Relationship(视图与表的关系)列出实物化索引引用的表
Workload Analysis(工作负载分析)给出工作负载的细节,包括语句数量、开销降低的语句数量、开销保持不变的语句熟练
二、数据库引擎调整顾问实例

  1、调整一个查询

   选中一个查询语句,右键=》数据库引擎优化顾问中分析查询。

   数据库引擎调整顾问第6张

   设置基础如下:

  数据库引擎调整顾问第7张

   设置时间:

  数据库引擎调整顾问第8张

   虽然默认设置为1小时,但是本次建议1分钟就完成了。

   最终建议如下,单击最右侧的定义,SQL Server优化顾问建议的优化如下:

  数据库引擎调整顾问第9张

   SQL Server优化顾问建议我在Name列上建立一个非聚集索引。对于该查询来说,这是一个完全正确的建议。

  有时候,对于单个查询的优化,SQL Server会建议卸载一些用不到的索引。但是优化应该是针对整个数据库的优化。

  因此,在优化项目里,应该设置数据引擎调整顾问不能卸载任何已有的结构,这个优化选项里把“数据库中保持的物理设计结构”设置“从不保持任何现有的PDS”变为保持现有的PDS。这样就优化顾问就不会建议卸载现有的OBJECT了。

  数据库引擎调整顾问第10张

  另外,在得到建议之后,可以在操作上面直接操作,评估建议,保存建议,以及应用建议。

  数据库引擎调整顾问第11张

  单击应用建议:

  数据库引擎调整顾问第12张

  单击确定后:

  数据库引擎优化顾问将自动将建议执行到SQL Server:

  数据库引擎调整顾问第13张

   2、调整一个跟踪工作负载

  调整一个跟踪工作负载首先得有一个跟踪文件或跟踪表:

  数据库引擎调整顾问第14张

   很遗憾,生成的建议居然为空:

  数据库引擎调整顾问第15张

   这不意味着没有其他可能的改进,只是意味着调整顾问不总是能够发现所有可能的改进。

三、数据库引擎调整顾问的局限性

  数据库引擎调整顾问建议基于输入工作负载。如果输入的工作负载不是实际工作负载的真实表现,那么建议的索引有时候可能对一些在这个工作负载中丢失的查询有负面的影响。

  对于一个生产服务器,应该确保SQL跟踪包含数据库工作负载的一个完整表现。对于大部分数据库应用程序,捕捉完整的一天的跟踪通常包含大部分数据库上执行的查询。其他一些数据库引擎调整顾问所需要考虑的事项/局限性如下:

  • 使用SQL:BatchCompleted事件跟踪输入:输入到数据库引擎调整顾问的SQL跟踪必须包含SQL:BatchCompleted事件;否则,该向导不能确定工作负载中的查询;
  • 工作负载中的查询分布:在一个工作负载中,查询可能以相同的参数值执行多次。以对只执行一次的查询做出较大改进相比,对最常用的查询,即使很小的性能改进都对整个工作负载的性能做出更大的贡献;
  • 索引提示:SQL查询中的索引提示可能阻止数据库引擎调整顾问选择更好的执行计划。该向导将所有SQL查询中使用的索引提示作为建议的一部分。因为这些索引对该表来说可能不是最佳的,所以把工作负载提交到该向导之前删除所有查询中的索引提示;

免责声明:文章转载自《数据库引擎调整顾问》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇可控硅工作原理及参数详解H.264有四种画质级别下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Undo表空间数据文件损坏

   UNDO表空间数据文件和system表空间数据文件都是数据库的关键数据文件,如果损坏会导致sql执行失败,用户无法登录,甚至实例崩溃等。同样恢复UNDO表空间数据文件也必须在数据库mount状态下进行。    数据库在运行过程中发现UNDO表空间数据文件损坏,此时是无法正常关闭数据库的: SQL> shutdown immediate; ORA...

python测试开发django(8)--django连接mysql

前言 Django对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。本篇以mysql为例简单介绍django连接mysql进行数据操作 Django连mysql需要安装驱动mysqlclient mysqlclient安装 先要安装数据库驱动mysqlclient,使用pip安装就行 pip install...

在CentOS 7上安装&配置PostgreSQL 12

一、前言 1、本文主要内容 PostgreSQL 12 安装(yum) PostgreSQL 12 基础配置 PostgreSQL 12 远程访问配置 PostgreSQL 基础管理 2、本文环境信息与适用范围 环境信息 软件 版本 CentOS 7.6 Release PostgreSQL 12.x 适用范围 软件 版本...

Sql Server 收缩日志文件原理及always on 下的实践

一、准备知识   1、LSN   LSN用来标识特定日志在日志文件中位置(详情请见什么是LSN:日志序列号),它由两部分组成:一部分用来标识VLF(虚拟日志文件)的序列号,剩下的用来标识该日志在VLF中的具体的位置。   根据LSN不同,日志一般分为两类:首日志(最新的活动日志序号)和尾日志(保留时间最长的活动日志序号)。随着数据库的操作不断增加(如数据库...

MySQL、MongoDB、Redis 数据库之间的区别

NoSQL 的全称是 Not Only SQL,也可以理解非关系型的数据库,是一种新型的革命式的数据库设计方式,不过它不是为了取代传统的关系型数据库而被设计的,它们分别代表了不同的数据库设计思路。 MongoDB:它是一个内存数据库,数据都是放在内存里面的。对数据的操作大部分都在内存中,但MongoDB并不是单纯的内存数据库。MongoDB 是由 C++...

jdk1.8.0_40 +maven+tomcat7.0+mysql8.0详细安装教程

(一)jdk的安装 1.下载jdk推荐下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.配置JAVA_HOME, PATH找到:右键此电脑>属性>高级系统设置>高级>环境变量>系统变量> J...