篇一 :SQLServer查询执行计划分析

看懂执行计划

例子1

以AdventureWorks的DatabaseLog查询为例:

SELECT * FROM [AdventureWorks2008R2].[dbo].[DatabaseLog]

? Cached plan size – how much memory the plan generated by this query will take up in stored procedure cache. This is a useful number when investigating cache performance issues because you'll be able to see which plans are taking up more memory.

? Estimated Operator Cost – we've already seen this as the percentage cost in Figure 1.

? Estimated Subtree Cost – tells us the accumulated optimizer cost assigned to this step and all previous steps, but remember to read from right to left. This number is meaningless in the real world, but is a mathematical evaluation used by the query optimizer to determine the cost of the operator in question; it represents the amount of time that the optimizer thinks this operator will take.

…… …… 余下全文

篇二 :sql server 20xx数据库维护计划

SQL Server 2005数据库维护计划

计算机系统各种软、硬件 故障、用户误操作以及恶意破坏是不可避免的,这些影响到数据的正确性甚至造成数据损失、服务器崩溃等致命后果。数据库的备份对保证系统的可靠性具有重要的作用。

下面会根据执行强度对维护任务及其相应的程序进行分类描述,执行强度用不同的时间间隔定义,包括每天、每周、每月和每季度,能够建立起良好的维护实务,确保SQL Server数据库性能和安全。

一、每天的例行维护任务

需要数据库管理员密切关注的维护任务,最好每天都检查一下,这样可以确保系统的可靠性、可用性、运行性能和安全。每天的例行维护任务包括:1、检查是不是所有被请求的SQL Server服务都正常运行。2、检查日常备份日志中成功、警告或者失败记录。3、检查Windows事件日志有没有错误记录。4、检查SQL Server日志有没有安全警告记录,例如非法登录。5、执行完全备份或差异备份。6、在设置了完全恢复模型或大容量日恢复模型的数据库上执行事务日志备份任务。7、核实SQL Server作业没有失败。8、检查所有的数据库文件和事务日志具有合适的磁盘空间大小。9、至少要监控处理器、内存或者磁盘计数器没有出现瓶颈。

二、每周的例行维护任务

关注程度稍逊于每天的例行维护任务,最好每周进行一次例行检查。每周的例行维护任务包括:1、执行完全备份或差异备份。2、检查以前执行的维护计划报告。3、检查数据库完整性。4、如果需要,执行收缩数据库任务。5、通过重新组织索引任务压缩聚集和非聚集表和视图。6、通过重新生成索引任务在数据页和索引页重新组织数据。7、更新所有用户表和系统表的统计信息8、清除备份、还原、SQL Server代理作业和维护计划等操作的历史数据。9、如果需要,手动增长数据库或事务日志文件10、清除执行维护计划残留下来的文件。

三、每月或每季度的维护任务

…… …… 余下全文

篇三 :Oracle如何分析执行计划

执行计划:

首先在分析的用户下执行rdbms\admin\utlxplan.sql

用sys用户登录:sqlplus\admin\plustrace.sql

grant sqlplus to user_name;

1. 找出耗费资源比较多的语句

SELECT ADDRESS,

substr(SQL_TEXT,1,20) Text,

buffer_gets,

executions,

buffer_gets/executions AVG

FROM v$sqlarea

WHERE executions>0

AND buffer_gets > 100000

ORDER BY 5;

2. 如何分析执行计划:

SQL> SELECT * FROM LARGE_TABLE where USERNAME = ‘TEST’;

Query Plan

-----------------------------------------

SELECT STATEMENT Optimizer=CHOOSE (Cost=1234 Card=1 Bytes=14)

TABLE ACCESS FULL LARGE_TABLE [:Q65001] [ANALYZED]

TABLE ACCESS FULL large_table:在large_table上做全表扫描

[:Q65001] 表明该部分查询是以并行方式运行的。

[ANALYZED] 表明操作中引用的对象被分析过了,在数据字典中有该对象的统计信息可以供CBO使用。

3. 各个表之间是如何关联的

在执行计划中,需要知道哪个操作是先执行的,哪个操作是后执行的,这对于判断哪个表为驱动表有用处。判断之前,如果对表的访问是通过rowid,且该rowid的值是从索引扫描中得来得,则将该索引扫描先从执行计划中暂时去掉。然后在执行计划剩下的部分中,判断执行顺序的指导原则就是:最右、最上的操作先执行。

…… …… 余下全文

篇四 :Oracle查看执行计划

有三种方法:

1.Explain plan

explain plan for

select * from aa;

查看结果:

select * from table(dbms_xplan.display());

2.Autotrace

Set timing on --记录所用时间

Set autot trace --自动记录执行计划

3.SQL_TRACE

ORACLE SQL_TRACE

“SQL TRACE”是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具。在日常的数据库问题诊断和解决中,“SQL TRACE”是非常常用的方法。

一般,一次跟踪可以分为以下几步:

1、界定需要跟踪的目标范围,并使用适当的命令启用所需跟踪。

2、经过一段时间后,停止跟踪。此时应该产生了一个跟踪结果文件。

3、找到跟踪文件,并对其进行格式化,然后阅读或分析。

本文就“SQL TRACE”的这些使用作简单探讨,并通过具体案例对SQL_TRACE的使用进行说明。

一、“SQL TRACE”的启用。

(A)SQL_TRACE说明

SQL_TRACE可以作为初始化参数在全局启用,也可以通过命令行方式在具体session启用。

1. 在全局启用

在参数文件(pfile/spfile)中指定: SQL_TRACE = true

在全局启用SQL_TRACE会导致所有进程的活动被跟踪,包括后台进程及所有用户进程,这通常会导致比较严重的性能问题,所以在生产环境中要谨慎使用。

提示: 通过在全局启用SQL_TRACE,我们可以跟踪到所有后台进程的活动,很多在文档中的抽象说明,通过跟踪文件的实时变化,我们可以清晰的看到各个进程之间的紧密协调。

2. 在当前session级设置

大多数时候我们使用SQL_TRACE跟踪当前会话的进程。通过跟踪当前进程可以发现当前操作的后台数据库递归活动(这在研究数据库新特性时尤其有效),研究SQL执行,发现后台错误等。

…… …… 余下全文

篇五 :sqlserver备份计划

sqlserver备份计划

SQL SERVER 2005如何建立自动备份的维护计划

SQL Server 2005中可以使用维护计划来为数据库自动备份,减少数据库管理员的工作负担。其使用方法如下:

(1)启动【sql server Management Studio】,在【对象资源管理器】窗口里选择【管理】——【维护计划】选项。

2)右击【维护计划】,在弹出的快捷菜单里选择【维护计划向导】选项

sqlserver备份计划

,弹出如图所示的【维护计划向导】对话框,单击【下一步】按钮

sqlserver备份计划

3)弹出如图所示【选择目标服务器】对话框,在【名称】文本框里可以输入维护计划的名称;在【说明】文本框里可以输入维护计划的说明文字;【在服务器】文本框里可以输入要使用的服务器名;最后选择正确的身份证信息,单击【下一步】按钮。

sqlserver备份计划

(4)弹出如图所示【选择维护任务】对话框,在该对话框

里可以选择多种维护任务:检查数据库完整性、收缩数据库、重新生成或组织索引、更新统计信息、清除历史记录、执行sql

Server代理作业、备份数据库等。在本例中选择【备份数据库(完整)】复选框,其他维护任务的设置都大同小异。

sqlserver备份计划

(5)单击【下一步】按钮,弹出如图所示【选择维护任务顺序】对话框,如果有多个维护任务,在此可以通过【上移】和【下移】两个按钮来设置维护任务的顺序,设置完毕后单击【下一步】按钮。

sqlserver备份计划

(6)弹出如图所示【定义任务】对话框,在【数据库】下

拉列表框里可以选择要备份的数据库名;在【备份组件】区域里可以选择备份数据库还是备份数据库文件;在【目标】区域可以添加备份文件和备份设备、设置是否将备份数据追加到备份文件里等。设置完毕后单击【下一步】按钮。

sqlserver备份计划

(7)弹出如图所示【选择计划属性】对话框,单击【更改】按钮。

sqlserver备份计划

8)弹出如图所示【新建作业计划】对话框,在该对话框里可以设置备份数据库的时间及频率,设置完毕后单击【确定】按钮回到如下所示对话框,再单击【下一步】按钮。

…… …… 余下全文

篇六 :sqlserver数据库优化方法

查询速度慢的原因很多,常见如下几种:

1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)

2、I/O吞吐量小,形成了瓶颈效应。

3、没有创建计算列导致查询不优化。

4、内存不足

5、网络速度慢

6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)

7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)

8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。

9、返回了不必要的行和列

10、查询语句不好,没有优化

可以通过如下方法来优化查询 :

1、把数据、日志、索引放到不同的I/O设备上,增加读取速度,以前可以将Tempdb应放在RAID0上,SQL2000不在支持。数据量(尺寸)越大,提高I/O越重要.

2、纵向、横向分割表,减少表的尺寸(sp_spaceuse)

3、升级硬件

4、根据查询条件,建立索引、优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一索引如性别字段

5、提高网速;

6、扩大服务器的内存,Windows 2000和SQL server 2000能支持4-8G的内存。配置虚拟内存:虚拟内存大小应基于计算机上并发运行的服务进行配置。运行 Microsoft SQL Server 2000 时,可考虑将虚拟内存大小设置为计算机中安装的物理内存的 1.5 倍。如果另外安装了全文检索功能, 并打算运行 Microsoft 搜索服务以便执行全文索引和查询,可考虑:将虚拟内存大小配置为至少是计算机中安装的物理内存的 3 倍。将 SQL Server max server memory 服务器配置选项配置为物理内存的 1.5 倍(虚拟内存大小设置的一半)。

7、增加服务器CPU个数;但是必须明白并行处理比串行处理更需要资源例如内存。使用并行还是串行程是MsSQL自动评估选择的。单个任务分解成多个任务,就可以在处理器上运行。例如耽搁查询的排序、连接、扫描和GROUP BY字句同时执行,SQL SERVER根据系统的负载情况决定最优的并行等级,复杂的需要消耗大量的CPU的查询最适合并行处理。但是更新操作UPDATE,INSERT,DELETE还不能并行处理。

…… …… 余下全文

篇七 :SQL语句执行计划分析

? Table Scan(表扫描):如果看到这个信息,就说明数据表上没有聚集索引,或者查询优化器

没有使用索引来查找。意即资料表的每一行都被检查到。如果资料表相对较小的话,表扫描可以非常快速,有时甚至快过使用索引。

因此,当看到有执行表扫描时,第一件要做的事就是看看数据表有多少数据行。如果不是太多的话,那么表扫描可能提供了最好的总体效能。但如果数据表大的话,表扫描就极可能需要长时间来完成,查询效能就大受影响。在这种情况下,就需要仔细研究,为数据表增加一个适当的索引用于这个查询。

假设你发现某查询使用了表扫描,有一个合适的非聚集索引,但它没有用到。这意味着什么呢?为什么这个索引没有用到呢?如果需要获得的数据量相对数据表大小来说非常大,或者数据选择性不高(意味着同一个字段中重复的值很多),表扫描经常会比索引扫描快。例如,如果一个数据表有10000个数据行,查询返回1000行,如果这个表没有聚集索引的话,那么表扫描将比使用一个非聚集索引更快。或者如果数据表有10000个数据行,且同一个字段(WHERE条件句有用到这个字段)上有1000笔重复的数据,表扫描也会比使用非聚集索引更快。

查看图形执行计划上的数据表上的弹出式窗口时,请注意”预估的资料行数(Estimated Row Count)”。这个数字是查询优化器作出的多少个数据行会被返回的最佳推测。如果执行了表扫描且”预估的数据行数”数值很高的话,就意味着返回的记录数很多,查询优化器认为执行表扫描比使用可用的非聚集索引更快。

? Index Seek(索引查找):索引查找意味着查询优化器使用了数据表上的非聚集索引来查找数

据。性能通常会很快,尤其是当只有少数的数据行被返回时。

? Clustered Index Seek(聚集索引查找):这指查询优化器使用了数据表上的聚集索引来查

找数据,性能很快。实际上,这是SQL Server能做的最快的索引查找类型。

…… …… 余下全文

篇八 :看懂sql执行计划

对于SqlServer的优化来说,可能优化查询是很常见的事情。关于数据库的优化,本身也是一个涉及面比较的广的话题, 首先,打开【SQL Server Management Studio】,输入一个查询语句看看SqlServer是如何显示查询计划的吧。 select v.OrderID, v.CustomerID, v.CustomerName, v.OrderDate, v.SumMoney, v.Finished from

看懂sql执行计划

OrdersView as v

where v.OrderDate >= '2010-12-1' and v.OrderDate < '2011-12-1'; 其中,OrdersView是一个视图,其定义如下:

SELECT dbo.Orders.OrderID, dbo.Orders.CustomerID,

dbo.Orders.OrderDate,

dbo.Orders.SumMoney, dbo.Orders.Finished,

ISNULL(dbo.Customers.CustomerName, N'') AS CustomerName FROM dbo.Orders LEFT OUTER JOIN

dbo.Customers ON dbo.Orders.CustomerID =

dbo.Customers.CustomerID

对于前一句查询,SqlServer给出的查询计划如下(点击工具栏上的【显示估计的执行计划】按钮):

从这个图,我们至少可以得到3个有用的信息:

1. 哪些执行步骤花费的成本比较高。显然,最右边的二个步骤的成本是比较高的。

2. 哪些执行步骤产生的数据量比较多。对于每个步骤所产生的数据量, SqlServer的执行计划是用【线条粗细】来表示的,因此也很容易地从分辨出来。

…… …… 余下全文