`
newleague
  • 浏览: 1505459 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

分析SQL语句的执行计划优化SQL(一)

阅读更多

第1章 性能调整综述

  Oracle数据库是高度可调的数据库产品。本章描述调整的过程和那些人员应与Oracle服务器的调整有关,以及与调整相关联的操作系统硬件和软件。本章包括以下方面:
  *谁来调整系统?
  *什么时候调整?
  *建立有效调整的目标
  *在设计和开发时的调整
  *调整产品系统
  *监控产品系统

  谁来调整系统:

  为了有效地调整系统,若干类人员必须交换信息并牵涉到系统调整中,例如:
  * 应用设计人员必须传达应用系统的设计,使得每个人都清楚应用中的数据流动.
  * 应用开发人员必须传达他们选择的实现策略,使得语句调整的过程中能快速、容易地识别有问题的应用模块和可疑的SQl语句.
  * 数据库管理人员必须仔细地监控系统活动并提供它们的资料,使得异常的系统性能可被快速得识别和纠正.
  * 硬件/软件管理人员必须传达系统的硬件、软件配置并提供它们的资料,使得相关人员能有效地设计和管理系统。

  简而言之,与系统涉及的每个人都在调整过程中起某些作用,当上面提及的那些人员传达了系统的特性并提供了它们的资料,调整就能相对的容易和更快一些。

  不幸的是,事实上的结果是:数据库管理员对调整负有全部或主要的责任。但是,数据库管理员很少有合适的系统方面的资料,而且,在很多情况下,数据库管理员往往是在实施阶段才介入数据库,这就给调整工作带来许多负面的影响,因为在设计阶段的缺陷是不能通过DBA的调整而得以解决,而设计阶段的缺陷往往对数据库性能造成极大的影响。

  其实,在真正成熟的开发环境下,开发人员作为纯代码编写人员时,对性能的影响最小,此时大部分的工作应由应用设计人员完成,而且数据库管理员往往在前期的需求管理阶段就介入,为设计人员提供必要的技术支持。调整并不是数据库管理员的专利,相反大部分应该是设计人员和开发人员的工作,这就需要设计人员和开发人员具体必要的数据库知识,这样才能组成一个高效的团队,然而事实上往往并非如此。

  什么时候作调整?

  多数人认为当用户感觉性能差时才进行调整,这对调整过程中使用某些最有效的调整策略来说往往是太迟了。此时,如果你不愿意重新设计应用的话,你只能通过重新分配内存(调整SGA)和调整I/O的办法或多或少地提高性能。Oracle提供了许多特性,这些特性只有应用到正确地设计的系统中时才能够很大地提高性能。

  应用设计人员需要在设计阶段设置应用的性能期望值。然后在设计和开发期间,应用设计人员应考虑哪些Oracle 特性可以对系统有好处,并使用这些特性。通过良好的系统设计,你就可以在应用的生命周期中消除性能调整的代价和挫折。当然,即使在设计很好的系统中,也可能有性能降低。但这些性能降低应该是可控的和可以预见的。

  调整目标

  不管你正在设计或维护系统,你应该建立专门的性能目标,它使你知道何时要作调整。如果你试图胡乱地改动初始化参数或SQl语句,你可能会浪费调整系统的时间,而且无什么大的收益。调整你的系统的最有效方法如下:
  * 当设计系统时考虑性能
  * 调整操作系统的硬件和软件
  * 识别性能瓶颈
  * 确定问题的原因
  * 采取纠正的动作

  当你设计系统时,制定专门的目标;例如,响应时间小于3秒。当应用不能满足此目标时,识别造成变慢的瓶颈(例如,I/O竞争),确定原因,采取纠正动作。在开发期间,你应测试应用研究,确定在采取应用之前是否满足设计的性能目标。

  当你正在维护生产库系统时,有多种快速有效的方法来识别性能瓶颈。不管怎样,调整通常是一系列开销。一旦你已确定了瓶颈,你可能要牺牲一些其它方面的指标来达到所要的结果。例如,如果I/O有问题,你可能需要更多内存或磁盘。如果不可能买,你可能要限制系统的并发性,来获取所需的性能。然而,如果你已经明确地定义了性能的目标,那用什么来交换高性能的决策就变的很容易的,因为你已经确定了哪些方面是最重要的,如过我的目标为高性能,可能牺牲一些空间资源。

  随着应用的越来越庞大,硬件性能的提高,全面的调整应用逐渐变成代价高昂的行为,在这样情况下,要取得最大的投入/效率之比,较好的办法是调整应用的关键部分,使其达到比较高的性能,这样从总体上来说,整个系统的性能也是比较高的。这也就是有名的20/80原则,调整应用的20%(关键部分),能解决80%的问题。

  在设计和开发系统时作调整

  良好设计的系统可以防止在应用生命周期中产生性能问题。系统设计人员和应用开发人员必须了解Oracle的查询处理机制以便写出高效的SQl语句。“第2章 有效的应用设计”讨论了你的系统中各种可用的配置,以及每种配置更适合哪种类型的应用。“第4章 优化器”讨论了Oracle的查询优化器,以及如何写语句以获取最快的结果。

  当设计你的系统时,使用下列优化性能的准则:
  * 消除客户机/服务器应用中不必要的网络传输。-- 使用存储过程。
  * 使用适合你系统的相应Oracle服务器选件(例如,并行查询或分布式数据库)。
  * 除非你的应用有特殊的需要,否则使用缺省的Oracle锁。
  * 利用数据库记住应用模块,以便你能以每个模块为基础来追踪性能。
  * 选择你的数据块的最佳大小。 -- 原则上来说大一些的性能较好。
  * 分布你的数据,使得一个节点使用的数据本地存贮在该节点中。

  调整产品系统

  本节描述对应用系统快速、容易地找出性能瓶颈,并决定纠正动作的方法。这种方法依赖于对Oracle服务器体系结构和特性的了解程度。在试图调整你的系统前,你应熟悉Oracle调整的内容。

  为调整你已有的系统,遵从下列步骤:
  * 调整操作系统的硬件和软件
  * 通过查询V $SESSION_WAIT视图,识别性能的瓶颈,这个动态性能视图列出了造成会话(session)等待的事件。
  * 通过分析V $SESSION_WAIT中的数据,决定瓶颈的原因。
  * 纠正存在的问题。

  监控应用系统

  这主要是通过监控oracle的动态视图来完成。各种有用的动态视图:如v$session_wait, v$session_event等。


  第2章 有效的应用设计

  我们通常将最常用的应用分为2种类型:联机事务处理类型(OLTP),决策支持系统(DSS)。

  联机事务处理(OLTP)

  该类型的应用是高吞吐量,插入、更新、删除操作比较多的系统,这些系统以不断增长的大容量数据为特征,它们提供给成百用户同时存取,典型的OLTP系统是订票系统,银行的业务系统,订单系统。OTLP的主要目标是可用性、速度、并发性和可恢复性。当设计这类系统时,必须确保大量的并发用户不能干扰系统的性能。还需要避免使用过量的索引与cluster 表,因为这些结构会使插入和更新操作变慢。

  决策支持(DSS)

  该类型的应用将大量信息进行提取形成报告,协助决策者作出正确的判断。典型的情况是:决策支持系统将OLTP应用收集的大量数据进行查询。典型的应用为客户行为分析系统(超市,保险等)。决策支持的关键目标是速度、精确性和可用性。该种类型的设计往往与OLTP设计的理念背道而驰,一般建议使用数据冗余、大量索引、cluster table、并行查询等。近年来,该类型的应用逐渐与OLAP、数据仓库紧密的联系在一起,形成的一个新的应用方向。

分享到:
评论

相关推荐

    通过分析SQL语句的执行计划优化SQL

    本文档主要介绍了与SQL调整有关的内容,涉及多个方面:SQL语句执行的过程、ORACLE优化器、表之间的关联、如何得到SQL执行计划、如何分析执行计划等内容。通过从浅入深的方式了解SQL优化的过程,使大家逐步步入SQL...

    通过分析SQL语句的执行计划优化SQL(总结)

    这篇博客"通过分析SQL语句的执行计划优化SQL(总结)"深入探讨了这一主题,下面将对其中的主要知识点进行详细阐述。 1. **执行计划的理解**: 执行计划是数据库管理系统在执行SQL语句之前预先生成的一种详细步骤,它...

    通过分析SQL语句的执行计划优化SQL.doc

    《通过分析SQL语句的执行计划优化SQL》 在数据库管理中,SQL语句的优化是提升系统性能的关键环节。本文主要探讨了如何通过分析SQL语句的执行计划来优化查询性能,涉及到共享SQL语句、ROWID、Recursive SQL、Row ...

    通过分析sql语句的执行计划优化sql

    本文档主要介绍与SQL调整有关的内容,内容涉及多个方面:SQL语句执行的过程、ORACLE优化器,表之间的关联,如何得到SQL执行计划,如何分析执行计划等内容,从而由浅到深的方式了解SQL优化的过程,使大家逐步步入SQL...

    通过分析SQL语句的执行计划优化SQL语句

    本文将深入探讨如何通过分析SQL语句的执行计划来实现这一目标。执行计划是数据库管理系统(DBMS)执行SQL语句的详细步骤,它揭示了数据的检索路径、使用的索引、排序和连接操作等信息。了解这些信息可以帮助我们找出...

    通过分析SQL语句的执行计划优化SQL总结)

    在分析执行计划时,应关注以下几点: 1. **扫描与索引**:如果执行计划显示全表扫描(Full Table Scan,FTS),而应使用索引时,可能存在性能问题。创建合适的索引可以显著减少数据检索时间。但也要注意,过多或不...

    通过分析SQL语句的执行计划优化SQL总结.doc

    第五章“ORACLE的执行计划”是文档的核心部分,它详细讨论了如何分析执行计划,包括访问路径的选择、表之间的连接方式,以及如何使用hints来干预执行计划。通过对具体案例的分析,读者可以更直观地理解如何优化SQL...

    通过分析SQL语句的执行计划优化SQL(五)

    在SQL优化过程中,理解执行计划至关重要,因为它揭示了Oracle数据库如何执行SQL语句。...DBA可以通过分析执行计划,识别性能瓶颈,并采取相应措施,如调整索引、优化查询结构或改变连接顺序,以提升系统的整体效率。

    通过分析SQL语句的执行计划优化SQL(一)

    本文将探讨这两种应用类型的特性以及SQL语句处理的过程,以帮助理解如何通过分析执行计划来优化SQL。 OLTP系统主要用于处理大量频繁的事务,如银行交易、订单处理等,其特点是高并发读写操作,强调快速响应时间和...

    通过分析SQL语句的执行计划优化SQL(六)

    在SQL优化过程中,分析SQL语句的执行计划是至关重要的,因为执行计划揭示了数据库引擎如何执行查询,以及数据检索的顺序和方式。本篇主要关注通过执行计划优化SQL,特别是针对Oracle数据库。 首先,执行计划由一...

    [精华] 通过分析SQL语句的执行计划优化SQL(总结)7年DBA工作经验.docx

    在Oracle数据库中,优化SQL语句是DBA(数据库管理员)的一项核心任务,尤其是在面对性能问题时。本文档通过作者7年的DBA工作经验,详细阐述了如何分析和优化SQL语句。 1. **SQL语句执行过程** SQL语句在Oracle中...

    Oracle中SQL语句执行效率的查找与解决

    - **EXPLAIN PLAN使用**:EXPLAIN PLAN是一个强大且常用的工具,用于展示SQL语句的执行计划。通过设置STATEMENT_ID,可以为SQL语句标识唯一的执行计划,便于后续比较和分析。在执行计划中,OPERATION字段描述了具体...

    SQL语句执行过程详解

    优化器确定最佳执行计划后,会将SQL语句及执行计划存储在数据高速缓存中,以便下次执行相同查询时,可以直接使用缓存的执行计划,提高处理效率。 最后是语句的执行阶段。在完成语句解析后,数据库服务器进程会真正...

Global site tag (gtag.js) - Google Analytics