数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

SQL语句性能调整之性能调整综述


发布日期:2018年01月20日
 
SQL语句性能调整之性能调整综述

Oracle数据库是高度可调的数据库产品本章描述调整的过程和那些人员应与Oracle服务器的调整有关以及与调整相关联的操作系统硬件和软件本章包括以下方面:

谁来调整系统?

什么时候调整?

建立有效调整的目标

在设计和开发时的调整

调整产品系统

监控产品系统

谁来调整系统:

为了有效地调整系统若干类人员必须交换信息并牵涉到系统调整中例如:

应用设计人员必须传达应用系统的设计使得每个人都清楚应用中的数据流动

应用开发人员必须传达他们选择的实现策略使得语句调整的过程中能快速容易地识别有问题的应用模块和可疑的SQL语句

数据库管理人员必须仔细地监控系统活动并提供它们的资料使得异常的系统性能可被快速得识别和纠正

硬件/软件管理人员必须传达系统的硬件软件配置并提供它们的资料使得相关人员能有效地设计和管理系统

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

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

其实在真正成熟的开发环境下开发人员作为纯代码编写人员时对性能的影响最小此时大部分的工作应由应用设计人员完成而且数据库管理员往往在前期的需求管理阶段就介入为设计人员提供必要的技术支持

调整并不是数据库管理员的专利相反大部分应该是设计人员和开发人员的工作这就需要设计人员和开发人员具体必要的数据库知识这样才能组成一个高效的团队然而事实上往往并非如此

什么时候作调整?

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

应用设计人员需要在设计阶段设置应用的性能期望值然后在设计和开发期间应用设计人员应考虑哪些Oracle 特性可以对系统有好处并使用这些特性

通过良好的系统设计你就可以在应用的生命周期中消除性能调整的代价和挫折说明在应用的生命周期中调整的相对代价和收益正如你见到的最有效的调整时间是在设计阶段在设计期间的调整能以最低的代价给你最大的收益

在应用生命周期中调整的代价

在应用生命周期中调整的收益

当然即使在设计很好的系统中也可能有性能降低但这些性能降低应该是可控的和可以预见的

调整目标

不管你正在设计或维护系统你应该建立专门的性能目标它使你知道何时要作调整如果你试图胡乱地改动初始化参数或SQl 语句你可能会浪费调整系统的时间而且无什么大的收益调整你的系统的最有效方法如下

当设计系统时考虑性能

调整操作系统的硬件和软件

识别性能瓶颈

确定问题的原因

采取纠正的动作

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

当你正在维护生产库系统时有多种快速有效的方法来识别性能瓶颈

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

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

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

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

当设计你的系统时使用下列优化性能的准则

消除客户机/服务器应用中不必要的网络传输 使用存储过程

使用适合你系统的相应Oracle服务器选件(例如并行查询或分布式数据库)

除非你的应用有特殊的需要否则使用缺省的Oracle锁

利用数据库记住应用模块以便你能以每个模块为基础来追蹤性能

选择你的数据块的最佳大小 原则上来说大一些的性能较好

分布你的数据使得一个节点使用的数据本地存贮在该节点中

调整产品系统

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

为调整你已有的系统遵从下列步骤

调整操作系统的硬件和软件

通过查询V $SESSION_WAIT视图识别性能的瓶颈这个动态性能视图列出了造成会话(session)等待的事件

通过分析V $SESSION_WAIT中的数据决定瓶颈的原因

纠正存在的问题

监控应用系统

这主要是通过监控oracle的动态视图来完成

各种有用的动态视图如v$session_wait v$session_event等

上一篇:Oracle10gDataGuard中ORA-16026错误解决

下一篇:关于Oracle一些常用脚本的汇总(2)