`
OneEyeWolf
  • 浏览: 105353 次
  • 性别: 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...

    DB2之SQL优化浅析.pdf

    ### DB2之SQL优化浅析 #### 一、为什么要做SQL优化 在DB2数据库管理中,SQL优化是一项至关重要的工作。SQL语句是应用程序与数据库之间交互的主要方式,其性能直接影响到整体应用的响应速度及数据库服务器的负载。...

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

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

    Oracle SQL优化文档

    Oracle SQL优化文档提供了对Oracle数据库进行SQL语句优化的一系列方法和工具,旨在帮助数据库管理员和开发人员提高SQL查询性能和数据库效率。文档内容涵盖了从基本的SQL优化思路到具体的分析工具,详细介绍了如何...

    ORACLE_SQL性能优化(全).ppt

    SQL优化衡量指标** 性能通常通过响应时间和并发性来衡量。性能不佳可能是由于开发人员对SQL效率的忽视或对SQL执行原理的不了解。优化不仅限于SQL语法和内嵌函数的掌握,还需理解SQL解析和成本基优化器(CBO)的工作...

    SQL性能优化专题分享

    - 在分布式数据库环境中,数据的存储和查询跨越多个节点,优化的重点在于合理设计数据流以及选择合适的驱动节点。 10. Oracle的分区表 - 分区是数据库设计中的一种技术,允许将一个大型表分割为若干个小的、更...

    收获,不止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...

    informix数据库sql查询优化

    本文将围绕“informix数据库sql查询优化”这一主题展开讨论,重点介绍SQL单表查询优化的相关知识点。 #### SQL单表查询优化概述 单表查询是指仅涉及一个表的SQL查询语句。虽然这类查询通常比多表连接查询简单,但...

    sql优化 联表查询

    在SQL优化领域,联表查询(也称为JOIN查询)是数据操作的重要部分,尤其是在大型数据库系统中。当需要从多个表中提取相关数据时,联表查询就显得尤为重要。本篇将深入探讨“sql优化”与“左连接查询”的相关知识点,...

    系统性能优化的集中方法

    从应用程序角度,SQL优化是重点,遵循最佳实践来编写高效的SQL语句。程序设计上,应减少数据库访问,使用全局变量和静态变量,避免频繁创建新对象,注意内存管理和释放,减少I/O操作,适度利用多线程提高并发处理...

    oracle培训sql性能优化ppt

    本PPT深入探讨了Oracle SQL优化的各种方面,旨在帮助读者理解SQL执行过程,掌握优化技巧,提升系统性能。 **1. 优化基础知识** - **性能管理**:早期介入,设定明确目标,持续监控,团队协作,及时应对意外和变化,...

    sql2005性能sql 性能优化

    【SQL2005性能优化】SQL Server 2005是Microsoft推出的一款关系型数据库管理系统,具有强大的功能和良好的性能。然而,随着数据量的增长和业务需求的复杂化,性能问题常常成为关注的重点。本文将探讨如何针对SQL ...

    SQLServer数据库优化之50种方法

    在IT领域,特别是对于数据库管理与优化方面,SQL Server作为一款广泛使用的数据库管理系统,其性能优化一直是DBA(数据库管理员)和技术团队关注的重点。本文将根据给定的信息,详细阐述部分重要的SQL Server数据库...

    SQl优化,Oracle优化

    在IT领域,SQL优化与Oracle数据库的性能提升是专业DBA和开发人员关注的重点。本文将深入探讨SQL优化的关键概念,特别聚焦于Oracle环境下的优化策略。 ### SQL优化概述 SQL(Structured Query Language)作为数据库...

    很好的sql优化性能方法

    在SQL优化中,我们关注的重点是如何编写更高效、更精炼的SQL语句,以及如何调整数据库配置以达到最佳运行状态。下面我们将深入探讨一些核心的SQL优化策略。 1. **查询优化**: - **使用索引**:索引是数据库快速...

    SQL_Server_2008查询性能优化

    联接操作也是性能优化的重点。优化JOIN顺序,使用正确的JOIN类型(如INNER JOIN, LEFT JOIN)以及使用JOIN条件中的索引,都能显著提高查询效率。在大型数据集上,考虑使用子查询或临时表代替大范围的JOIN操作。 ...

    SQL优化大全(1).docx

    SQL优化是提升数据库性能的关键环节,它涉及到对SQL语句的改进、索引的合理使用以及数据库配置的调整等多个方面。下面将详细讲解SQL优化的一些关键步骤和策略。 首先,了解SQL执行频率和类型是优化的第一步。通过`...

    Oracle+SQL优化

    在IT领域,数据库管理和SQL优化是一项至关重要的技能,特别是在大型企业级应用中。"Oracle+SQL优化"这一主题深入探讨了如何通过优化SQL语句来提升数据库系统的性能,这对于DBA(数据库管理员)以及需要与数据库打...

Global site tag (gtag.js) - Google Analytics