对于SqlServer的优化来说,可能优化查询是很常见的事情。关于数据库的优化,本身也是一个涉及面比较的广的话题, 首先,打开【SQL Server Management Studio】,输入一个查询语句看看SqlServer是如何显示查询计划的吧。 select v.OrderID, v.CustomerID, v.CustomerName, v.OrderDate, v.SumMoney, v.Finished
from 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
…… …… 余下全文
二、通过sqlplus
1.最简单的办法
Sql> set autotrace on
Sql> select * from dual;
执行完语句后,会显示explain plan 与 统计信息。
这个语句的优点就是它的缺点,这样在用该方法查看执行时间较长的sql语句时,需要等待该语句执行成功后,才返回执行计划,使优化的周期大大增长。如果不想执行语句而只是想得到执行计划可以采用:
Sql> set autotrace traceonly
这样,就只会列出执行计划,而不会真正的执行语句,大大减少了优化时间。虽然也列出了统计信息,但是因为没有执行语句,所以该统计信息没有用处,如果执行该语句时遇到错误,解决方法为:
(1)在要分析的用户下:
Sqlplus > @ ?
dbmsadminutlxplan.sql
(2) 用sys用户登陆
Sqlplus > @ ?sqlplusadminplustrce.sql
Sqlplus > grant plustrace to user_name;
- - user_name是上面所说的分析用户
…… …… 余下全文
Oracle中查看已执行sql的执行计划
上一篇 / 下一篇 2008-09-12 10:54:07 / 个人分类:原创笔记
查看( 771 ) / 评论( 8 ) / 评分( 15 / 0 )
有时候我们可能会希望查看一条已经执行过的sql的执行计划,常用的方式有两种:a,set autotrace后再重新执行一遍,不过重新执行可能会浪费时间,而且有些语句也不允许(例如修改操作的语句),或者查询v$sql_plan视图,但v$视图的可读性又不是那么好,这里提供一个新方式,通过dbms_xplan.display_cursor来获取执行过的sql的执行计划。
首先看看该函数的语法:
DBMS_XPLAN.DISPLAY_CURSOR(
sql_id IN VARCHAR2 DEFAULT NULL,
child_number IN NUMBER DEFAULT NULL,
format IN VARCHAR2 DEFAULT 'TYPICAL');
由上可知,我们至少需要找到执行过sql的sql_id,该参数可以从v$sql视图中找到。
…… …… 余下全文
我们对 SQL 语句进行调优时,非常重要的一个方法就是分析 SQL 的执行计划。查看 Oracle 中 SQL 语句的执行计划有很多方法,例如通过 PL/SQL Developer 、 EM 或者 SQLPLUS 工具等。这里以 SQLPLUS 为例。
在 SQLPLUS 使用命令 SET AUTOTRACE ON 后,可以在查询结果后看到该语句的执行计划。也可以使用 SET AUTOTRACE TRACEONLY 命令,只返回执行计划而不返回查询结果。例如执行一个简单的全表扫描语句,返回执行计划如下:
从上述执行计划可以看到,对表的访问为全表扫描( TABLE ACCESS FULL )。这种情况一般是没有索引或者索引不可用。我们执行的 SQL 语句是 select * from hr.employees ,该语句没有指定搜索条件,所以也只能是全表扫描。
接下来我们还可以看到一些关于执行计划的统计信息。对于这些信息的分析非常重要。通过查询 Oracle 的文档,可以看到具体解释如下:
Recursive Calls:Number of recursive calls generated at both the user and system level.
…… …… 余下全文
使用plsql执行计划进行sql调优(转载) 一段SQL代码写好以后,可以通过查看SQL的执行计划,初步预测该SQL在运行时的性能好坏,尤其是在发现某个SQL语句的效率较差时,我们可以通过查看执行计划,分析出该SQL代码的问题所在。
那么,作为开发人员,怎么样比较简单的利用执行计划评估SQL语句的性能呢?总结如下步骤供大家参考:
1、 打开熟悉的查看工具:PL/SQL Developer。
在PL/SQL Developer中写好一段SQL代码后,按F5,PL/SQL Developer会自动打开执行计划窗口,显示该SQL的执行计划。
2、 查看总COST,获得资源耗费的总体印象
一般而言,执行计划第一行所对应的COST(即成本耗费)值,反应了运行这段SQL的总体估计成本,单看这个总成本没有实际意义,但可以拿它与相同逻辑不同执行计划的SQL的总体COST进行比较,通常COST低的执行计划要好一些。
3、 按照从左至右,从上至下的方法,了解执行计划的执行步骤
执行计划按照层次逐步缩进,从左至右看,缩进最多的那一步,最先执行,如果缩进量相同,则按照从上而下的方法判断执行顺序,可粗略认为上面的步骤优先执行。每一个执行步骤都有对应的COST,可从单步COST的高低,以及单步的估计结果集(对应ROWS/基数),来分析表的访问方式,连接顺序以及连接方式是否合理。
…… …… 余下全文
Oracle的SQL语句执行效率问题查找与解决方法
一、识别占用资源较多的语句的方法(4种方法)
1. 测试组和最终用户反馈的与反应缓慢有关的问题。
2. 利用V_$SQLAREA视图提供了执行的细节。(执行、读取磁盘和读取缓冲区的次数)
? 数据列
EXECUTIONS:执行次数
DISK_READS:读盘次数
COMMAND_TYPE:命令类型(3:select,2:insert;6:update;7delete;47:pl/sql程序单元)
OPTIMIZER_MODE:优化方式
SQL_TEXT:Sql语句
SHARABLE_MEM:占用shared pool的内存多少
BUFFER_GETS:读取缓冲区的次数
? 用途
1、帮忙找出性能较差的SQL语句
2、帮忙找出最高频率的SQL
3、帮忙分析是否需要索引或改善联接
3. 监控当前Oracle的session,如出现时钟的标志,表示此进程中的sql运行时间较长。
4. Trace工具:
a) 查看数据库服务的初始参数:timed_statistics、user_dump_dest和
max_dump_file_size
…… …… 余下全文
普通用户scott开启追踪日志时,报错 SCOTT@ sun>set autotrace traceonly SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report
分析:这是由于scott用户没有plustrace角色导致此问题的产生
1)查看$ORACLE_HOME/sqlplus/admin下的plustrce.sql发现如下内容:
[oracle@:/u01/app/oracle/product/11.2.0/dbhome_1/sqlplus/admin]$ cat plustrce.sql --
-- Copyright (c) Oracle Corporation 1995, 2002. All Rights Reserved.
--
-- NAME
-- plustrce.sql
--
-- DESCRIPTION
-- Creates a role with access to Dynamic Performance Tables
…… …… 余下全文
通过分析SQL语句的执行计划优化SQL(总结)
第一章、第2章 并不是很重要,是自己的一些想法,关于如何做一个稳定、高效的应用系统的一些想法。
第三章以后都是比较重要的。
附录的内容也是比较重要的。我常用该部分的内容。
前言
本文档主要介绍与SQL调整有关的内容,内容涉及多个方面:SQL语句执行的过程、ORACLE优化器,表之间的关联,如何得到SQL执行计划,如何分析执行计划等内容,从而由浅到深的方式了解SQL优化的过程,使大家逐步步入SQL调整之门,然后你将发现……。
…… …… 余下全文