|
1:做过oracle DBA 的应该都查看过某个SQL 的执行计划,关于看SQL 的执行计划你都用过什么方式呢?
1)通过PL/SQL Dev工具
2)通过sqlplus
2.1set autotrace on
2.2用explain plan命令
2:你觉得哪种方式查看的计划最为准确?为什么?能否给出例子。
用explain plan命令比较准确。
(1) sqlplus > explain plan for select * from testdb.myuser(2) sqlplus > select * from table(dbms_xplan.display); 其实,在很多情况下,我们只会听一个客户抱怨说现在系统运行很慢,而我们不知道是哪个SQL引起的。此时有许多现成的语句可以找出耗费资源比较多的语句,如:SELECT ADDRESS, substr(SQL_TEXT,1,20) Text, buffer_gets, executions,buffer_gets/executions AVG FROM v$sqlareaWHERE executions>0 AND buffer_gets > 100000 ORDER BY 5;ADDRESS TEXT BUFFER_GETS EXECUTIONS AVG-------- ---------------------------------------- ----------- ---------- ------------------------------------------------------------66D83D64 select t.name, (sel 421531 60104 7.0133601766D9E8AC select t.schema, t.n 1141739 2732 417.91325066B82BCC select s.synonym_nam 441261 6 73543.5 从而对找出的语句进行进一步优化。当然我们还可以为一个正在运行的会话中运行的所有SQL语句生成执行计划,这需要对该会话进行跟踪,产生trace文件,然后对该文件用tkprof程序格式化一下,这种得到执行计划的方式很有用,因为它包含其它额外信息,如SQL语句执行的每个阶段(如Parse、Execute、Fetch)分别耗费的各个资源情况(如CPU、DISK、elapsed等)。
3:作为DBA 来说,很可能对业务不甚了解,再加上业务的繁杂可能导致要DBA 帮助优化的SQL 可能是上百行,有丰富经验的你来说,如何快速定位一个SQL 性能问题的关键部分?
例如:http://www.itpub.net/forum.php?m ... ra=pageD1%3D&page=1
这位楼主的SQL ,性能问题可能出在哪里?为什么?
|
|