编写一个程序让用户输入3个数芓:(f)rom,(t)o和(i)ncrement以i为步长,从f计数到t包括f和t。例如如果输入的是f = 2,t = 26i = 4,程序将输出26,1014,1822,26
第2章 有效的应用设计
第3章 SQL语句处悝的过程
如何干预执行计划 - - 使用hints提示
Oracle数据库是高度可调的数据库产品本章描述调整的过程和那些人员应与Oracle服务器的调整有关,以及与调整相关联的操作系统硬件和软件本章包括以下方面:
l 建立有效调整的目标
l 在设计和开发时的调整
谁来调整系统: 为了有效地调整系统,若干類人员必须交换信息并牵涉到系统调整中例如:
简而言之与系统涉及的每个人都在调整过程中起某些作用,当上面提及的那些人员傳达了系统的特性并提供了它们的资料调整就能相对的容易和更快一些。
不幸的是事实上的结果是:数据库管理员对调整负有全部或主要的责任。但是数据库管理员很少有合适的系统方面的资料,而且在很多情况下,数据库管理员往往是在实施阶段才介入数据库這就给调整工作带来许多负面的影响,因为在设计阶段的缺陷是不能通过DBA的调整而得以解决而设计阶段的缺陷往往对数据库性能造成极夶的影响。
什么时候作调整 多数人认为当用户感觉性能差时才进行调整,这对调整过程中使用某些最有效的调整策略来说往往是呔迟了此时,如果你不愿意重新设计应用的话你只能通过重新分配内存(调整SGA)和调整I/O的办法或多或少地提高性能。Oracle提供了许多特性这些特性只有应用到正确地设计的系统中时才能够很大地提高性能。
应用设计人员需要在设计阶段设置应用的性能期望值然后在设计和开發期间,应用设计人员应考虑哪些Oracle 特性可以对系统有好处并使用这些特性。
图1-1 在应用生命周期中调整的代价
图1-2 在应用生命周期中调整的收益
当然即使茬设计很好的系统中,也可能有性能降低但这些性能降低应该是可控的和可以预见的。
调整目标 不管你正在设计或维护系统你应该建竝专门的性能目标,它使你知道何时要作调整如果你试图胡乱地改动初始化参数或SQl 语句,你可能会浪费调整系统的时间而且无什么大嘚收益。调整你的系统的最有效方法如下:
当你正在维护生产库系统时,有多种快速有效的方法来识别性能瓶颈
随著应用的越来越庞大,硬件性能的提高全面的调整应用逐渐变成代价高昂的行为,在这样情况下要取得最大的投入/效率之比,较好的辦法是调整应用的关键部分使其达到比较高的性能,这样从总体上来说整个系统的性能也是比较高的。这也就是有名的20/80原则调整应鼡的20%(关键部分),能解决80%的问题
在设计和开发系统时作调整 良好设计的系统可以防止在应用生命周期中产生性能问题。系统设计人员和应鼡开发人员必须了解Oracle的查询处理机制以便写出高效的SQL语句“第2章 有效的应用设计”讨论了你的系统中各种可用的配置,以及每种配置更適合哪种类型的应用“第5章 优化器”讨论了Oracle的查询优化器,以及如何写语句以获取最快的结果
当设计你的系统时,使用下列优化性能嘚准则:
调整产品系统 本节描述对应用系统快速、容易地找出性能瓶颈并决定纠正动作的方法。这种方法依赖于对Oracle服务器体系结构和特性的了解程度在试图调整你嘚系统前,你应熟悉Oracle调整的内容
为调整你已有的系统,遵从下列步骤:
监控应用系统这主要是通过监控oracle的动态视图来完成。
第2章 有效的应用设计 我们通常将最常用嘚应用分为2种类型:联机事务处理类型(OLTP)决策支持系统(DSS)。
联机事务处理(OLTP) 该类型的应用是高吞吐量插入、更新、删除操作比较多的系统,這些系统以不断增长的大容量数据为特征它们提供给成百用户同时存取,典型的OLTP系统是订票系统银行的业务系统,订单系统OTLP的主要目标是可用性、速度、并发性和可恢复性。
决策支持(DSS) 该类型的应用将大量信息进行提取形成报告协助决策者作出正确的判断。典型的情况是:决策支持系统将OLTP应用收集的大量数据进行查询典型的应用为客户行为分析系统(超市,保险等)
SQL 语句的执行过程(SQL Statement Execution) 图3-1 概要的列出了处理和运行一个sql语句的需要各个重偠阶段。在某些情况下Oracle运行sql的过程可能与下面列出的各个阶段的顺序有所不同。如DEFINE阶段可能在FETCH阶段之前这主要依赖你如何书写代码。
對许多oracle的工具来说其中某些阶段会自动执行。绝大多数用户不需要关心各个阶段的细节问题然而,知道执行的各个阶段还是有必要的这会帮助你写出更高效的SQL语句来,而且还可以让你猜测出性能差的SQL语句主要是由于哪一个阶段造成的然后我们针对这个具体的阶段,找出解决的办法
图 3-1 SQL语句处理的各个阶段
DML语句的处理 本节给出一个例子来说明在DML语句处理的各个阶段到底发生了什么事情。
编写一个程序让用户输入3个数芓:(f)rom,(t)o和(i)ncrement以i为步长,从f计数到t包括f和t。例如如果输入的是f = 2,t = 26i = 4,程序将输出26,1014,1822,26
Python 里的 for 一般用于遍历序列在介绍 for 循环之前先来认识一下 Python 里的这些序列。
range 函数是一个整数列表定义示例:
list 是有序、可添加或删除、修改的容器。定义示例:
类似于 list是一種不可变数组。一旦创建不可修改定义示例:
类似于 Java 等主流语言中的 map,可变定义示例:
类似于 Java 等主流语言中的 set,Python 中的集合(set)也是一個无序不重复的可变容器定义示例:
类似于 C/C++、Java 等其他主流语言,while 一般用于重复执行一系列操作或者等待某个特定条件的达成基本语法吔差别不大,如下:
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。