﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-坚持学习，每天进步一些-文章分类-DB</title><link>http://www.blogjava.net/leitianguang/category/12775.html</link><description>第一天</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 18:05:00 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 18:05:00 GMT</pubDate><ttl>60</ttl><item><title>SQL优化是重点</title><link>http://www.blogjava.net/leitianguang/articles/56695.html</link><dc:creator>坚持学习，每天进步一些</dc:creator><author>坚持学习，每天进步一些</author><pubDate>Wed, 05 Jul 2006 05:07:00 GMT</pubDate><guid>http://www.blogjava.net/leitianguang/articles/56695.html</guid><wfw:comment>http://www.blogjava.net/leitianguang/comments/56695.html</wfw:comment><comments>http://www.blogjava.net/leitianguang/articles/56695.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leitianguang/comments/commentRss/56695.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leitianguang/services/trackbacks/56695.html</trackback:ping><description><![CDATA[
		<span class="postbody">信息系统访问量又不大，瓶颈一般不会出现在应用层，极有可能在数据库这一层，不用急着看程序。先找出逻辑读取次数最多的SQL，硬盘读取次数最多的SQL，找到SQL，对于SQL进行优化。看看有没有发生全表扫描的地方。 <br />一般发生全表扫描，极有可能是没有建立合理的索引，或者索引由于左边引用函数或其它原因造成索引失效。 <br />对于运行一年多的系统，最好要自己写一个自动重建索引的程序，定时重建索引。 <br />或者使用TOAD工具帮你重建索引。 <br /><br />另外在看一下数据库的CPU占用率，如果占用率在经常在80%－100%，那一定要是SQL或存储过程及trigger中写的不好。 <br /><br />不需要从应用层找SQL，方向性错误，太累，也看不出效果。 <br />而应当使用pl/SQL, toad等工具，分析出最bad的SQL语句，一看到这些语句后，再修改应用层的查询就是了。又快又方便。 <br /><br /><br /><br />-- 逻辑读多的SQL <br />select * from (select buffer_gets, sql_text <br />from v$sqlarea <br />where buffer_gets &gt; 500000 <br />order by buffer_gets desc) where rownum&lt;=30; <br /><br />-- 执行次数多的SQL <br />select sql_text,executions from <br />(select sql_text,executions from v$sqlarea order by executions desc) <br />where rownum&lt;81; <br /><br />-- 读硬盘多的SQL <br />select sql_text,disk_reads from <br />(select sql_text,disk_reads from v$sqlarea order by disk_reads desc) <br />where rownum&lt;21; <br /><br />-- 排序多的SQL <br />select sql_text,sorts from <br />(select sql_text,sorts from v$sqlarea order by sorts desc) <br />where rownum&lt;21; <br /><br />--分析的次数太多，执行的次数太少，要用绑变量的方法来写sql <br />set pagesize 600; <br />set linesize 120; <br />select substr(sql_text,1,80) "sql", count(*), sum(executions) "totexecs" <br />from v$sqlarea <br />where executions &lt; 5 <br />group by substr(sql_text,1,80) <br />having count(*) &gt; 30 <br />order by 2;<br /><br /><span class="postbody">9i里的statspack和10 g里的AWR, 都可以给出一段时间里所有SQL的统计， 比如 <br /><br />SQL ordered by Elapsed Time <br />SQL ordered by CPU Time <br />SQL ordered by Gets <br />SQL ordered by Reads <br />SQL ordered by Executions <br />SQL ordered by Parse Calls</span><span class="postbody"></span><span class="gensmall"></span></span>
<img src ="http://www.blogjava.net/leitianguang/aggbug/56695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leitianguang/" target="_blank">坚持学习，每天进步一些</a> 2006-07-05 13:07 <a href="http://www.blogjava.net/leitianguang/articles/56695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>