`
OneEyeWolf
  • 浏览: 104445 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SQL优化是重点

    博客分类:
  • tech
阅读更多
信息系统访问量又不大,瓶颈一般不会出现在应用层,极有可能在数据库这一层,不用急着看程序。先找出逻辑读取次数最多的SQL,硬盘读取次数最多的SQL,找到SQL,对于SQL进行优化。看看有没有发生全表扫描的地方。
一般发生全表扫描,极有可能是没有建立合理的索引,或者索引由于左边引用函数或其它原因造成索引失效。
对于运行一年多的系统,最好要自己写一个自动重建索引的程序,定时重建索引。
或者使用TOAD工具帮你重建索引。

另外在看一下数据库的CPU占用率,如果占用率在经常在80%-100%,那一定要是SQL或存储过程及trigger中写的不好。

不需要从应用层找SQL,方向性错误,太累,也看不出效果。
而应当使用pl/SQL, toad等工具,分析出最bad的SQL语句,一看到这些语句后,再修改应用层的查询就是了。又快又方便。



-- 逻辑读多的SQL
select * from (select buffer_gets, sql_text
from v$sqlarea
where buffer_gets > 500000
order by buffer_gets desc) where rownum<=30;

-- 执行次数多的SQL   
  select sql_text,executions from
  (select sql_text,executions from v$sqlarea order by executions desc)
   where rownum<81;

-- 读硬盘多的SQL 
  select sql_text,disk_reads from
  (select sql_text,disk_reads from v$sqlarea order by disk_reads desc)
   where rownum<21;    

-- 排序多的SQL   
  select sql_text,sorts from
   (select sql_text,sorts from v$sqlarea order by sorts desc)
    where rownum<21;           
 
--分析的次数太多,执行的次数太少,要用绑变量的方法来写sql
set pagesize 600;
set linesize 120;
select substr(sql_text,1,80) "sql", count(*), sum(executions) "totexecs"
   from v$sqlarea
   where executions < 5
   group by substr(sql_text,1,80)
   having count(*) > 30
   order by 2;
分享到:
评论
18 楼 OneEyeWolf 2006-06-30  
同意楼上的,做事不能钻角尖,设计时当然不能教科书般的追求面对象的完美,面向关系的范式化,但这只是设计。但调优就是在运行期的调优,决不是设计期间,所能解决的。
    一味的强调设计,只是那此不懂设计的人,没有实际调优经验的人说的话。没有在实际中调优的人,相信也做不出性能良好的的架构。

   举一个例子,原来在实际项目中,数据库CPU居高不下,通过分析工具分析出来一个很BAD的SQL,先是在程序中找,没有发现。后来是在一个存储过程中的一段代码中发现的。这些Bad SQL并不是设计所能决定的了的。设计只能做到基础的未来能够面对高并发的可扩展的架构。
17 楼 zhoulf 2006-06-30  
santafeng 写道
zhoulf 写道
SQL绝对是重点!!

如果是ormapping那如何优化sql?
我感觉还是设计的时候应该考虑数据量和程序的压力,sql优化只能后期做。表和程序做不好或者用错了框架,sql怎么优化最后能提高的性能很有限。


ormapping 也是实体对数据库表的映射而已,最后反映到数据库中的还是Sql,SQL的结构和你的表结构设计有很大的关系。你难道说SQL不是重点?如果你只是简单的一两张表的数据查询,那么我相信70%的人写出来的SQL都是一样的。

一般来说,程序写的不好也绝对没有一个BAD SQL 来的厉害。至于框架,如果不用这样那样的框架呢?你能说它性能就不行了??
至于你说的“我感觉还是设计的时候应该考虑数据量和程序的压力”,那是前提。而且也不会没有事情就跑去SQL优化,一般都是很有针对行的!
16 楼 forfail 2006-06-18  
Oracle把个软件做的配置,优化那么复杂,真是扯淡

这种公司是最应该翘翘的,甭管微软怎样,人家用户体验是做的真不错。
15 楼 戏说乾隆 2006-06-16  
如果每个人都能这么把自己认为最好的心得写出来,中国的技术进步就快了,呵呵呵
14 楼 戏说乾隆 2006-06-16  
好文章,感谢 呵呵
13 楼 xiaoych 2006-06-16  
santafeng 写道
zhoulf 写道
SQL绝对是重点!!

如果是ormapping那如何优化sql?
我感觉还是设计的时候应该考虑数据量和程序的压力,sql优化只能后期做。表和程序做不好或者用错了框架,sql怎么优化最后能提高的性能很有限。


  有意思……如果我的系统没有用数据库呢?
12 楼 santafeng 2006-06-15  
zhoulf 写道
SQL绝对是重点!!

如果是ormapping那如何优化sql?
我感觉还是设计的时候应该考虑数据量和程序的压力,sql优化只能后期做。表和程序做不好或者用错了框架,sql怎么优化最后能提高的性能很有限。
11 楼 zhoulf 2006-06-13  
SQL绝对是重点!!
10 楼 ray_linn 2006-06-07  
xiaozhou 写道
一个系统出现性能瓶颈,往往是设计阶段的问题,sql调优不能根本解决问题。



这话说得太次了。。
9 楼 yyanghhong 2006-05-23  
另外可以用DBMS_SQLTUNE对SQL进行分析, 他会自动给出改进意见, 比如数据表需要用dbms_stats.gather_schema_stats来统计一下, 或需要加index,  很方便的
8 楼 yyanghhong 2006-05-23  
9i里的statspack和10 g里的AWR, 都可以给出一段时间里所有SQL的统计, 比如

SQL ordered by Elapsed Time
SQL ordered by CPU Time
SQL ordered by Gets
SQL ordered by Reads
SQL ordered by Executions
SQL ordered by Parse Calls
7 楼 赵小刀 2006-05-22  
Allen 写道
xiaozhou 写道
一个系统出现性能瓶颈,往往是设计阶段的问题,sql调优不能根本解决问题。

这话说得有些太过片面了啊……

80%的性能问题,是由20%的糟糕的sql所导致的。sql调优可以解决一大部分的性能问题。
6 楼 hgq0011 2006-05-17  
OneEyeWolf 写道
信息系统访问量又不大,瓶颈一般不会出现在应用层,极有可能在数据库这一层,不用急着看程序。先找出逻辑读取次数最多的SQL,硬盘读取次数最多的SQL,找到SQL,对于SQL进行优化。看看有没有发生全表扫描的地方。

谢谢
有对sql server,mysql,,,优化的SQL吗?
5 楼 Allen 2006-05-16  
xiaozhou 写道
一个系统出现性能瓶颈,往往是设计阶段的问题,sql调优不能根本解决问题。

这话说得有些太过片面了啊……
4 楼 xiaozhou 2006-05-16  
一个系统出现性能瓶颈,往往是设计阶段的问题,sql调优不能根本解决问题。
3 楼 ithero 2006-03-29  
长见识了,感谢楼主的贡献的SQL
2 楼 歆渊 2006-03-29  
呵呵, Oracle就是好啊, 有这么多方便的工具机制, 这是一个成熟软件的核心价值所在!
1 楼 huaronghu 2006-03-29  
OneEyeWolf 写道
信息系统访问量又不大,瓶颈一般不会出现在应用层,极有可能在数据库这一层,不用急着看程序。先找出逻辑读取次数最多的SQL,硬盘读取次数最多的SQL,找到SQL,对于SQL进行优化。看看有没有发生全表扫描的地方。


谢谢你贡献的SQL!

相关推荐

    收获不止SQL优化

    13.1 PL/SQL优化重点 353 13.1.1 定义类型的优化 353 13.1.2 PL/SQL的集合优化 355 13.1.3 PL/SQL的游标合并 361 13.1.4 动态SQL 364 13.1.5 使用10046 trace跟踪PL/SQL 368 13.2 PL/SQL优化其他相关扩展 369...

    Oracle 高性能SQL引擎剖析:SQL优化与调优机制详解 (黄玮) 高清PDF扫描版

    本书是作者十年磨一剑的成果之一,深入分析与解剖oracle sql优化与调优技术,主要内容包括: 第一篇“执行计划”详细介绍各种执行计划的含义与操作,为后面的深入分析打下基础。重点讲解执行计划在sql语句执行的...

    Oracle 高性能SQL引擎剖析:SQL优化与调优机制详解

    本书是作者十年磨一剑的成果之一,深入分析与解剖Oracle SQL优化与调优技术,主要内容包括: 第一篇“执行计划”详细介绍各种执行计划的含义与操作,为后面的深入分析打下基础。重点讲解执行计划在SQL语句执行的生命...

    收获,不止SQL优化--抓住SQL的本质

    13.1 PL/SQL优化重点 353 13.1.1 定义类型的优化 353 13.1.2 PL/SQL的集合优化 355 13.1.3 PL/SQL的游标合并 361 13.1.4 动态SQL 364 13.1.5 使用10046trace 跟踪PL/SQL 368 13.2 PL/SQL优化其他相关扩展 369...

    Effective MySQL之SQL语句最优化.pdf

    MySQL SQL优化的小册子。 对优化这块重点阐述了相关原理与技术手段。

    SQLServer2008查询性能优化 2/2

    书名: SQLServer2008查询性能优化 作者: 弗里奇(Grant Fritchey) 出版社: 人民邮电出版社 出版日期: 2010年8月1日 ISBN: 9787115230294 编辑推荐 《SQL Server 2008查询性能优化》为你提供了处理查询性能所...

    Microsoft SQL Server 2005 技术内幕:T-SQL程序设计(CHM格式)

    该书由Itzik Ben-Gan权威执笔,重点关注语言特性以及它们如何被SQL Server引擎解释和处理。 通过本书,你将深入了解T-SQL的高级用法,包括触发器、用户自定义函数、异常处理等。该书解释并比较了SQL Server 2000...

    Microsoft SQL Server2005技术内幕:T-SQL查询(中文PDF版)part4

    该书由itzik ben-gan权威执笔,重点关注语言特性以及它们如何被sql server引擎解释和处理。  通过本书,你将深入了解t-sql的高级用法,包括触发器、用户自定义函数、异常处理等。该书解释并比较了sql server 2000和...

    Oracle高性能SQL引擎剖析

    本书是作者十年磨一剑的成果之一,深入分析与解剖Oracle SQL优化与调优技术,主要内容包括:, 第一篇“执行计划”详细介绍各种执行计划的含义与操作,为后面的深入分析打下基础。重点讲解执行计划在SQL语句执行的...

    SQL优化讲座

    通过对oracle与SQL Server的相关知识介绍,重点讲解PL SQL与T SQL的优化

    SQLServer2008查询性能优化 1/2

    书名: SQLServer2008查询性能优化 作者: 弗里奇(Grant Fritchey) 出版社: 人民邮电出版社 出版日期: 2010年8月1日 ISBN: 9787115230294 编辑推荐 《SQL Server 2008查询性能优化》为你提供了处理查询性能所...

    SQL Server SQL性能优化之参数化

     数据库的参数化有两种方式,简单(simple)和强制(forced),默认的参数化默认是“简单”,简单模式下,如果每次发过来的SQL,除非完全一样,否则重编译它(特殊情况会自动参数化,正是本文想说的重点) ...

    Microsoft SQL Server 2005技术内幕: T-SQ程序设计.pdf

    从1999年开始,他一直是Microsoft SQL Server MVP(最有价值专家),并在全世界已经开展过无数次T-SQL查询、T-SQL优化和编程方面的培训。Itzik是Microsoft SQL Server方面几本著作的作者。他在SQL ServerMagazine和...

    基于索引的SQL语句优化之降龙十八掌

    对于满足以上条件的这些表,必须重点关注,因为在这些表上的索引,将对SQL语句的性能产生举足轻重的影响。不过下面还是总结了一下降龙十八掌内功的入门基础,建立索引常用的规则如下: 1、表的主键、外键必须有索引...

    sql中分组和求和重点介绍

    sql在日常使用中,会大量使用到分组求和等语句,这里关于这一块重点介绍一下,希望可以帮助到有需要的兄弟

    Spark SQL 在字节跳动的优化实践-郭俊.pdf

    Spark 在字节跳动内部扮演着重要角色。在数据仓库领域,Spark SQL 正在逐渐...本次分享将会基于基础架构团队过往的工作成果,介绍字节跳动在提升基于 Spark SQL 的 ETL 稳定性以及优化 ad-hoc 查询的性能方面的实践。

    MySQL数据库查询优化

    预计时间2小时,每小时一个课程段(子查询是SQL查询优化的重点内容,务必掌握好) 第5课 查询优化技术理论与MySQL实践(三)------视图重写与等价谓词重写 什么是视图重写?哪些类型的视图可以被优化?MySQL是怎么...

    Oracle Advanced PL/SQL Developer Professional Guide

    本书介绍了PL / SQL的高级功能,这些功能是设计和优化数据库应用程序中PL / SQL代码所必需的。集合,外部过程,服务器端结果缓存,使用VPD强制行级安全性,处理大型对象和SecureFiles等功能为PL / SQL专业人员构建了...

Global site tag (gtag.js) - Google Analytics