Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92334655
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-05-08 10:47:06

 

第五篇

Linux系统Oracle10g的需求规划



Oracle系统的需求规划为重要的规划工作之一,需求规划是一种可设定使用多少系统硬件资源的工作,另一个密切相关的项目为:容量规划。本章先介绍这一些项目并说明需求规划与容量规划的方式,其中包含几个不同的系统组件。

需求规划与容量规划是非常类似,但是两者的目的仍有显著差异。需求规划主要是估计工作量执行所需硬件与调整特定参数,这些参数又称为服务级别协定(Service-Level Agreement,SLA),服务级别协议是系统客户与管理系统单位之间的契约,通常内容为固定数量交易,其必须在设定的响应时间完成,本章稍后将更详细的描述服务级别协议。

容量规划与需求规划相异之处在于容量规划是一门艺术与科学,必须找出系统何时达到容量上限,以及需要增加何种硬件以避免系统达到容量限制,如此一来,可以应用在学校课本已学习的内容,这是本章与其它章节不同的地方。


4.1 需求规划的简介

无论是哪一种系统都有最基本的限制,随着系统使用率接近此限制,系统作业也开始产生变化。主要原因在于使用率已接近系统的基本限制,此时随即产生队列的问题,当系统已触及基本限制,队列也会立刻产生,只要一发生队列问题,响应时间就会增加,此部份将讨论容量与队列的服务等级协议及性能阵列。


4.1.1调整尖峰与定态使用率的大小

调整系统大小时,必须同时考虑尖峰使用率(Peak-Utilization)与定态使用率(Steady-State)。高峰使用率期间代表带给系统最大压力的期间,高峰使用率期间可能发生在一天中的某个时刻,或是周、月、季的某个时刻。此外,在许多财金系统中,高峰使用率期间通常发生于月、季、年终时,此时必须为系统调整高峰使用率,因为可能会产生响应时间的问题。

定态期间是指系统在一天中平稳执行的期间,依照定义,系统的定态期间流量低于尖峰期间的流量。


高峰使用率期间

高峰使用率期间是指一天当中系统经历最高流量的期间,通常一天之中会有一次或多次,系统使用率会超过一般使用率,其可能的成因,如下:

工作习惯 员工通常会在固定的时间抵达工作岗位、登录系统,並且开始工作,通常这发生在一天的特定时间点例如:早上与午餐后。


调度作业 可能包括批次更新、备份与日常报表。

非调度作业 用户常常会执行非预期的大量报表工作。

若打算调校定态期间的系统最佳化性能,也许会发现尖峰使用率期间的作业已超出可接受的回应时间。无论如何,这将是抵触服务级别协定中的特定条約。

定态使用率期间

定态使用率期间是指一天当中系统工作量几乎不变的期间,不一定代表期间的工作流量恆等,但通常是等量的。在定态期间,系统使用率低於高峰期间的使用率且应小於系统的负荷,若有针对高峰使用量调校系统,则定态期间的性能不应该会造成系统的问题。

网格运算(Grid Computing)其中一个目标,就是在需要达成不同工作时重新配置系统,网格运算为了处理此问题,便随著科技进步而提升其性能。


4.1.2 服务等级协定

服务等级协定(Service-Level Agreement,SLA)是一个由服务提供者(IT部门)与客戶(用户)共同制订的合約或协定。SLA通常定义系统的可接受性能服务,可以有多种不同的格式,但目的都是为了保证用户得到服务等级,此外,IT部门也有衡量尺度,並可以了解是否提供应有的服务。

虽然许多公司有使用服务级别协定,但仍有部分公司未使用,即使使用服务级别协定卻常末适当的监控,或未适当的分析监控结果来作为SLA是否恰当的验证。若未使用SLA或SLA未适当监控,则產生性能问题。


客戶对SLA的观点

双方应详细的沟通SLA,对於SLA客戶应该依照工作需求来定义SLA的上限,以及回应时间的标準,除了这些标準以外,SLA也应该包括服务的需求,此为用戶指定系统最低需求的机会。

客戶必须以用户的角度描述系统需求,因此,客戶的IT部门最好是公司內的另一个部门。


IT部门对SLA的观点

It部门应该以可行性与预算作为SLA沟通的前提,SLA应包括预期与非预期工作量的评估,以及高峰与非高峰回应时间的标準,並由IT部门定义升级与週期性维护的停机时间。


SLA范例

这是一个SLA的范例,包括固定交易量於90%至100%的时间內完成,其中包括工作期间的需求、调度的需求与特定作业的需求。在此列出SLA的几个项目。

回应时间的标準 SLA表格內可能包含下列:







这仅代表SLA其中可能包括的项目范例,请注意! 可能会同时列出不同的与交易类型。


调度通知 SLA可能也会包括调度的通知,如下:

◇◇
All planned downtime will be reported to the call Center 14 days in advance。
All emergency downtime will be reported to the call center 15 minutes before the system is shut down (if possible)。


对于IT部门,可能需要以下项目:

◇◇
The number of users added to the system will be provided to the IT department 30 days before those increases in userS begins。

这樣可以达到预先规划的目的。


工作时间的需求 SLA也可能包括工作时间的需求,如:

The system will be up except for 4 hours of planned downtime during which maintenance will be performed between l : 00 A.M.And 5 : 00 A.M on the first Sunday of the month。

NOTE

別忘了为停机维护预先规划,若适当的告知用户停机时间,将不会让用户带来太大的麻烦。

SLA的註解 无论对客戶或是服务提供者,服务级别协定是一个很实用的工具,透过预先制定需求服务的等级,可以更容易达成服务的等级,若沒有制订目标将无法达成目标。

4.2 系统资源、容量与队列

电脑系统就像是其它的系统一樣有基本的资源限制,资源如CPU时间,这是非常特定而无法超越的限制,当CPU使用率达100%之后,很显然的无法再使用任何其它的CPU时间,其它资源如I/O作业,虽然不像CPU有这麼严格的限制,但仍有限制,网络使用率也有限制,其限制类似於I/O作业。


当触及基本组件使用率上限时,即开始產生队列,一旦遇到资源的上限必然会產生队列的问题。

队列何以如此重要? 原因在於资源访问的回应时间等於资源的服务时间(处理的时间),外加资源服务所需的等待队列时间花费。以数学公式表示,如下列等式:

◇◇
Response Time = (Queue Length * Service Time) +
Service Time



因此回应时间等於工作服务的时间,再加上前面所有工作完成的时间。越接近实体资源限制,队列的机会即会增加,一旦触及实体资源限制,则立即產生队列的问题,故回应时间也随之增加。事实上,越接近实体资源限制,则对列的机率以指数等级增加,如图4-1。


可以发现随著使用率接近资源限制,队列的长度也会随之大幅增加。回应时间大幅增加的时间点称为「临界点」(Knee of The Curve),其最大值为80%,尽量避免让系统超过临界点,此外,可以透过增加更多的硬体设备而增加系统的最大容量。


4.2.1 CPU性能与队列

随著每一个CPU的循环可能会需要越来越多的等待时间,才能得到提供给特定执行绪的资源,当系统达到100%的使用率之后,一定会需要等待时间。如同之前說明的工作执行时间会随之增加,必须等待CPU执行完前面的工作之后,才可以开始执行。这一个队列以指数等级增加,如图4-1。

CPU使用率是一个很有趣的观察项目,原因如下:

■ CPU是有限的,一秒之中提供固定数量的CPU週期执行工作。

■ CPU完成的工作量依照时脈速度、汇流排速度与高速缓冲尺寸而定。

■ 许多系统允许使用两个以上的CPU,可以有弹性地为系统增加更多的资源。

因为CPU使用率的限制,且代表系统可处理的工作量,所以是一个重要的性能指标。可以多次比对同一个系统,但却很难与不同的系统做比较。







4.2.2 I/O性能与队列

这对实务工作的代表的意义为何? 以15K RPM SCSI磁盘数组为例,理论的最大随机访问性能約为165 IOPS(I/O Per Second),为了有良好的执行响应时间(<20ms),上限应小於75%的执行性能或約为125 IOPS。

如图4-2,随著接近磁盘数组的最大容量,I/O响应时间或延迟时间会随之增加,过度使用I/O子系统,则会发现非常严重的I/O延迟时间,笔者曾经看过超过500ms(1/2秒)的I/O延迟时间,这樣的响应时间可能会造成Oracle数据库的效能问题,如缓慢的响应时间、區块与系统资源(Latching)问题。

在普通等级(<75%使用率)执行时,可能会预期6ms至20ms的延迟时间,假设此案例为10ms,若磁盘数组已被过度使用且延迟时间約为100ms。则总队列时间可能会是下限的十倍。因此,一分钟的決策支持查询可能会因为I/O子系统过载,而需要耗费十分钟的才能夠完成,說明至此,希望读者可以了解调整大小的重要件。







4.2.3 网络性能

与I/O子系统不同,网络不会发生队列。传出网络压缩之后,若同时也传送另一个压缩,则两者皆被重新传送,这个现象称为碰撞,与I/O子系统相同的部份,当网络越接近实体限制则碰撞将增加,就像是I/O子系统的队列与其它计算机系统的组件一樣,若达到容量限制则响应时间将依照指数等级增加。



4.2.4 内存

内存与其它部分有些微的不同,因为沒有队列也不会有碰撞,但是若发生系统过载则实体内存会被用完。使用越多的内存子系统可使用的RAM将会越少,只要使用到实体RAM的上限,则部分内存分页将会被栘出至磁盘,这就是分页(Paging)。分页(Paging)与磁盘交换区(Swapping)类似,但两者不完全相同,在部分作业系统中,为了执行工作会将整个行程移入与移出记忆体,这就是磁盘交换区(Swapping)o Linux使用分页,4k的分页会被移出与移入内存,这个分页活动的本地称为swap磁区,虽然依照Linux与Unix的历史,此本地使用於分页的机率多於磁盘切換。

核心行程(Kernel Process),kswapd,是使用於移出及移入内存的守护程序(Daemon)。若执行ps或top即可看到kswapd行程,此行程被称为pageout守护程序,当对准系统与Oracle性能时,应该避免產生分页的花费。若系统正在处理分页则应该先解決分页问题,再处理其它的问题,在正常的系统执行过程中几乎看不到分页/磁盘切換的状況。

虽然技术上的分页移出/入行程被称为分页,依照惯例这一个行程也称为磁盘切換,为了维持Linux的惯用名词,笔者将使用磁盘切換的名称。

因为实体内存比磁盘I/O快上好几百倍,因此可以了解为什麼当系统產生磁盘切換时,系统性能会瞬间下滑。以性能的观点来說,设置系统内存以避免磁盘切換的问题将显得非常重要,这就是不推荐在Oracle数据库服务器系统,执行其它应用程序的原因之一。


4.3 衡量尺度

监控系统时,为了测量系统而加入衡量尺度是很重要的,衡量尺度为评估系统运作的可量测数值,它有许多不同的衡量尺度可供选择,必须依照注重的系统表现项目来选择适合的衡量尺度。以下列出几种不同类型的衡量尺度:







只有几种工具可以衡量系统的使用率,部份样例如图4-3与4-4。

通过找出适当的量测工具,並监控这些量测尺度,将可监控系统的运作,以及找出未来系统资源可能耗尽的时间,衡量尺度也可以为系统状态提供很实用的报表。










4.4 Oracoe的需求规划

包括设置Oracle的可调校参数,提供给不同功能作业的用户等级、行程与活动。Oracle执行项次有两种不同类型的参数,第一种参数类型设置不可以超过的絕对限制,並可決定执行项次如何使用系统资源:第二种类型的参数可決定Oracle性能,但不会设置不可超过的限制。


4.4.1 参数的限制

限制资源的参数通常可以很简单的调整系统所需的尺寸,因为可影响如协定的最大数量、行程的最大数量等。以下列出几种最常使用的参数。





这些参数设置不可超越硬性限制,但是卻沒有提供性能对准的方式。此外。可以设置限制使。Oracle不会使用超过可分配的资源。


4.4.2资源的参数

与设置用户增加的硬性限制不同,资源的参数为可调整的系统资源限制,可能会大幅的影响系统性能。这些参数包括:





这些参数会以特定工作量为基础,进而影响系统性能。例如:参数DB_CACHE_SIZE将协助部分应用程序性能提升,但是对其它应用程序卻沒有太大的帮助。本章对於性能调校沒有太多描述,主要讨论的是调整大小。

这些必须设置的参数会直接影响系统规模,当参数值增加会消耗更多的系统资源,因此必须对参数与系统设置适当的数值。若设置太高的参数值,将会比设置过低参数值更不恰当,尤其是牵涉到内存的相关问题,若Oracle尝试使用超过可分配的实体内存,将会產生磁盘切換的问题,因此影响系统性能。除此以外,若部分参数值设置过高可能会不能引导Oracle执行项次。


第2章已說明Oracle的结构。Oracle结构有两个主要的内存使用本地:

SGA与PGA 。SGA内存的分配会依照多个不同的Oracle初始化参数而定,如DB_CACHE_SIZE、SHARED_POOL_SIZE、LOG_BUFFER以及其它的参数。从Oracle 9i开始可以由DBA_CACHE_SIZE等参数定义SGA从引导后开始变大,若有设置的话,最大值为MAX_SGA_SIZE,这些数值非常的重要,它能夠使系统免於分页的问题。

除了SGA之外,每一个独立行程都有各自使用的内存,包括共享服务器行程与并行查询行程,视系统需求而決定使用多大的内存,这是可能会產生问题的部份,因为Oracle已改变PGA内存的分配方式。

以前可能会设置如SORT_AREA_SIZE与HASH_AREA_SIZE,定义每一个用户行程可使用的内存最大数量:依照每一个行程所需内存大小,以及系统所需执行的行程数量,其使用的内存可能会大不相同,有时可能会佔用很大量的内存。


Oracle9i介绍了一种新的参数,PGA_AGGREGATE_TARGET,它可以为所有用户设置最佳化的内存总量,当执行更多的行程时,每一个行程会分配较少的内存。如此一来,可以大量的降低Oracle内存的尺寸。

Oracle 10g可以简单的定义系统可使用的内存总量,並扣除SGA的尺寸,再分配剩下内存给PGA。此种管理方式比前一个版本简易。


4.5硬件的需求规划

包括为Oracle选择正确的硬件数量,需求规划不是一门絕对的科学卻是部分的科学,以及部份的艺术与部分的直觉。当调整系统尺寸时,必须先观察系统的使用与执行工作所需的资源,以及系统的持续运作,而且不需额外的增加硬件设备。硬件的需求规划必须达成多个不同的部份,包括CPU需求规划、内存需求规划及I/O子系统的需求规划。


4.5.1 CPU的需求规划

CPU的数量与速度将影响系统工作的执行速度,如果有足夠的一致性,那麼在系统中增加越多的CPU,将可以提升工作完成的性能。若系统只有一个执行绪只能在一个CPU执行,增加更多的CPU将不会影响工作完成的速度,只有在同时执行多个工作时才会有更快的完成速度。

本章已說明队列可能会產生於行程必须等待其它行程完成后,才可以使用CPU的状況,通过增加更多的CPU即可提供给行程更多的执行机会,若一个CPU提供给行程100%的CPU时间,然而一个有四个CPU的系统即拥有400%的CPU时间。

拥有多个处理器的系统,在同时处理多个行程时会有较好的性能。除此之外,多个处理器的系统,也可以在啟用Oracle并行查询选项时取得优势。

除了CPU数量之外,应该注意CPU快取的大小,在多处理器系统中,更多的快取内存可避免快取遗失、減低总线使用率,並且可提升性能。执行Oracle的系统,即使芯片速度变慢,最好能夠选择有更大高速缓存的CPU。


4.5.2 内存的需求规划

Oracle可使用的内存数量会決定用户行程,以及查询执行的数量与类型,需要使用的内存数量与内存使用率数量,可能会依照作业类型与数量而異,而且这是很难预测的。

为了不同类型应用程序该如何规划内存? 有多种方式可达成此目标,最简单的方式为系统尽可能的增加内存,並且分配给Oracle行程与SGA。就某方面来說,这算是一种作弊,因为实际上並未真正的规划内存子系统。但是,因为现在的内存价格已经便宜多了,所以也算是一个实际的作法。


请记得!可以将Oracle的内存想像为两个部份,SGA保留在共享内存,由Linux核心参数管理共享内存的尺寸限制,共享内存分配於特別记忆池之外,而且不能磁盘切換。Oracle行程内存卻能磁盘切換,当考量所需的SGA大小时,请记得Oracle行程需要极大量的内存空间,若执行越多的行程就会消耗越多的内存。

请记得! 以32位位处理器为基础的系统,购买超过4GB的RAM通常不会有太好的性能,因为32位位处理器将使用所有的内存,而不会使用扩展内存,所以会產生严重的过载问题。若购买4GB至5GB的RAM,将因为超过4GB的记忆体空间:所以可能会更慢,但是若购买8GB的RAM将会比4G的RAM更快。

除此之外,使用PGA_AGGREGATE_TARGET参数,可以让所有的行程使用所有内存,因此可以使内存免除分页的风险。

若不是使用Oracle 9i或之后的版本,可以使用手动管理内存的方式,监控系统並视需求插入额外行程所需使用的内存。例如:对100位用户连接的记忆体进行快照,也对200位用户的内存进行快照,如此一来,即可评估每一位用户需要的内存数量,因为PGA总数与用户数量无关。


4.5.3 I/O子系统的需求规划

因为组件的结构特殊性,故I/O子系统具有特殊的需求规划特性,为什麼如此重要呢? 适当的设置I/O子系统可以使Oracle性能最佳化,不恰当的I/O子系统设置则容易產生性能瓶颈,而且严重的影响系统性能。首先讨论I/O子系统的基本组件一磁盘, 再讨论RAID控制器与RAID等级。

磁盘数组

I/O子系统的基本组件就是磁盘,也被称为硬盘(Hard Disk Drive或Hard Disk),每一个使用计算机的人都知道什麼是磁盘,在此将简短的介绍磁盘作业及其限制因素。

本章将說明磁盘如何创建RAID数组,以及磁盘性能限制与RAID控制器效能特性的相关性,了解这些限制之后,即可決定适当的规划与设置I/O子系统,以及解決可能遇到的问题。

磁盘是计算机系统的其中一个机械组件,机械组件可能带来好几种挑战。因为磁盘由多个马达与伺服磁轨组成,有些是以非常高的速度运转,可以在高溫下运作,除此之外,再加上摩擦力,磁盘将是系统中最容易发生问题的组件。事实上,每一个磁盘的规范书都会註明其平均失效时间(Mean Time Between Failures,MTBF)。

因为这是一个机械式组件,所以有些不能打破的实体原则,以及產生一些不能改变的性能限制,在了解这些限制之前,先讨论磁盘的运作方式。

磁盘(Disk Drive)由一个或多个磁盘片(Disk)组成,又称为磁盘(Platter)。磁盘是一个实际存放磁性数据的圆形碟片,其数据被写入磁盘的轨道,像是CD或LP(还有人记得什麼是黑胶唱盘吗?) 数据轨道有多个独立磁性记忆区组合而成,又称为扇区(Sector),典型的區块为512字节,磁盘如图4-5。

磁盘上的磁盘电枢(Armature)负责驱动,並且在端点有一个读写头(Head),读写头从扇区中读入数据,电枢只可以放射状的移动,其移动到要读入的磁盘位置。电枢与读写头移动的动作称为磁盘寻找,读写头在扇区间移动的动作称为旋转(Rotation)。







为了读入扇区的数据,电枢首先要寻找正确的磁轨,找到磁轨后,磁盘必须等待扇区旋转至读写头的位置,磁盘花费在寻找的时间称为寻找时间(Seek Time)。寻找时间与旋转的延迟时间如图4-6,稍后将详细的說明这些步骤。

主要由一个以上两面可使用磁盘组成典型的磁盘,这些磁盘一层层的疊起,单一电枢上连接多个读写头,因为所有的读写头一个个的疊起,所以可以更有效率的同步读或写。因此,磁盘可同时读/写多个扇区,请记得! 磁盘两面均可使用。

可存放数据的磁轨层层疊起称为柱面(Cylinder),每一次可使用所有读写头,所以磁盘可以比每次个別移动一个扇区更有效率的读写数据,柱面如图4-7。

为了解磁盘的性能,必须先知道寻找及旋转延迟时间的性能。

寻找时间(Seek Time) 寻找指磁盘电枢从一个磁轨移动到另一个磁轨的动作,寻找时间指电枢移动到另一个磁轨所花费的时间。寻找可分为三种类型:全磁盘寻找(Full Disk Seek);磁盘间寻找(Track-To-Track Seek);随机寻找(Random Seek),虽然其功能皆相同,因为性能特性的差異,所以分为不同的类型。









全磁盘寻找的发生,主要因为电枢必须从最外圈的磁轨移动到最內圈的磁轨(依此类推)。「磁盘间寻找」则是电枢从一个磁轨移动到邻近的另一个磁轨,所以得到这樣的名称。「随机寻找」则是介於前两者之间,此为最需要注意的类型,因为全磁盘寻找发生机率非常低。

高性能SCSI磁盘的全磁盘寻找时间約7.5ms,写入时间約8ms,虽然全磁盘寻找机率很低,卻可以提供最坏状況的评估。

高性能SCSI磁盘的随机寻找时间約3.9ms,写入时间約4.5ms,此类型的寻找最可能造成性能问题。

SCSI磁谍的磁谍间寻找时间約0.5ms,读/写时间約0.7ms,随机寻找时间略低於磁盘间寻找时间。

旋转延迟时间(Rotational Latency) 电枢完成工作后,必须等待磁盘旋转至存放数据的扇区位置,並等待数据移动到读写头下的时间,称为「旋转延迟时间」。所花费的延迟时间视磁盘转速而定,因此,一个15,000-RPM磁盘所花费的延迟时间比10,000-RPM磁盘少。

平均旋转延迟时间約为最大旋转延迟时间的一半,最大旋转时间由旋转速度而決定,以15,000-RPM磁盘为例,最大旋转延迟时间为:

Max Rotational Latency=(1/15,000-rpm)x(1 min/60 sec)
= 1.11µ(usec)

如上,即使最大旋转延迟时间小於随机或磁盘间寻找时间,事实上,整个I/O子系统都与随机旋转延迟时间相距甚大,若估计平均旋转延迟时间为最大旋转延迟时间的一半,则得到約0.55µ。

磁盘性能

从磁盘读入数据的时间是由多个不同因素形成,这些因素包括

■ 寻找时间

■ 旋转延迟时间

■ 传送时间

除了磁盘延迟时间以外,数据必须经过I/O总线传送到控制器(Controller),所以必须再加上控制器的延迟时间,本章讨论RAID控制器的部份将涵盖磁盘外部延迟时间的說明。

为了更精确的估计磁盘的性能,现在来做一些数学运算,知道磁盘的规范以及I/O的工作之后,即可更了解磁盘的性能。


閱读磁盘规范书

为了要了解特定磁盘的性能表现,首先要閱读磁盘的规范书,规范书将提供如何计算磁盘最大及最佳性能的信息,特定的性能必须视I/O类型来決定。

典型的磁盘规范书一定会包含如表4-1的信息及內容。

除此之外,也会包含作业状況的信息,如最低及最高溫度、溼度及电力需求,以下並非磁盘规范书的完整版本,仅为样例提供参考。

在磁盘得到的信息可以作一些数学运算,将可求得I/O率以及最大与最佳效能,可以得知磁盘的随机与序列I/O速率性能。





序列I/O性能
序列存取数据时,随机的存取数据不会对寻找时间造成太大的影响。以下公式可以算出序列I/O的时间:

每秒I/O=(磁轨间寻找时间)+(平均旋转延迟时间)+(传送时间)
=(0.6 msec)+(0.5*msec)+(apx0.010 µsec)
= 1.1 msec(apx.)


*旋转延迟时间花费0.5 msec,而不是规格书列出的2msec,主要因为邻近区块序列I/O的读取与旋转延迟时间影响率很低。


假设每一个I/O都有磁盘间的寻找,因为规范书列出平均每一个磁轨有345磁区,但是与实际的序列I/O不一樣,但应用於Oracle區块大小与多區块I/O时,实际影响卻是未知的。

假设计算正确,一个序列I/O約2.6 msec,磁盘的最大序列I/O数量可以下列公式计算:


每秒I/Os或IOPS=1/ (每秒I/O)
=1/ (2.6 msec/1000 msec每秒)
=384 1OPS

此为近似值,因为不知道真正的磁盘间寻找需要多少I/O。因此假设至少需要序列的307IOPS。

磁盘I/O功能
当数据库负责提供查询功能的时候,会发现有许多的效能问题,最常见的问题就是没有效率的I/O表现,依照所需磁盘空间选择磁盘数量几大小最常发生的问题。

我们在这里介绍的内容中,在I/O过载几延迟时间增加之前,实体磁盘只能提供部分I/O,延迟时间的增加是形成资源竞争几回应时间变慢的主因。

在大多数的情况下,4GB磁盘比1GB磁盘可以提供更好的整体效能,之所以强调在大多数情况下,主要是因为在次情况下,无论磁盘数量,I/O子系统的效能不会造成太大的影响。通过调整系统的效能与空间,即可达到效能最佳化。


随机I/O性能

因为Oracle系统的最常见性能问题为随机I/O性能,所以随机I/O的计算更为重要,随机I/O作业时,将会执行随机寻找,而且Oracle常执行I/O作业。随机I/O的计算公式与序列I/O相同:

每秒I/O= (随机寻找) + (平均旋转延迟时间) + (传送时间)
=(4.3 msec) + (2.0 msec) + (apx0.010 usec)
=6.3 msec (apx.)

假设每一个I/O均执行随机寻找,除了假设读写混合作业約4.3msec, 而不是读入3.9msec与写入4.5 msec。

假设计算正确,执行一个随机I/O需要6.3 msec,可以使用以下公式,计算磁碟随机I/O的最大值。

每秒I/Os (1OPS) =1/ (每秒I/O)
=1/ (6.3 msec/1000 msec每秒)
=158 lOPS

但这樣的描述仍不夠完整,若曾学习过「队列」应该会记得,只要越接近设备的带宽限制则队列的机率将会越高。因此,这代表什麼意思呢?愈接近每秒158 IOPS的限制,即使磁盘在最高速率仍不会產生队列问题,不过仍然有很高的机率產生队列,所以I/O需耗费越来越长的时间。

图4-8描绘出队列的状況

可以发现随著越接近最大的性能理论表现值,磁盘延迟时间将会越大。因为Oracle性能很容易受到I/O延迟时间的影响,所以避免I/O过载是非常重要的。


◆提示:

磁盘一次只可以控制一个I/O,若磁盘忙於管理I/O,此时若有另一个I/O需求传送至控制器,那麼这一个I/O需求将会被队列,直到前一个I/O工作完成为止。

因此,队列发生机率大於低I/O率。







为了达成这个目标最好能夠让磁盘依照表中的临界点运作,这一个点大約在80%的位置,然后队列长度就会开始有很大的斜率,因此在这个样例中应该最佳化随机I/O,避免超过126 IOPS 。

额外的考量 在前两个部份可以发现磁盘访问率的理论值:

■ 序列I/Os : 384 IOPS

■ 随机I/Os : 158 IOPS

除了磁盘本身的延迟时间以外,还有其它的I/O控制器与作业系统设备驱动程序的延迟时间。这些额外的延迟时间会受到磁盘忙碌程度的影响,因为这些额外延迟时间受到特定I/O子系统的影响,所以不包含在此部分的說明之內;但仍需要注意。


4.6 RAID磁盘子系统

计算机系统有多个不同类型的I/O子系统,数据库服务器最常使用RAID系统,将於此部分說明RAID系统的类型及设置方式。

RAID是Redundant Array of Inexpensive Disks的缩写,RAID I/O子系统主要提供两个目的:第一个是提供I/O子系统的容错功能,在系统发生意外时,I/O子系统容错可保护组件以避免数据的损失,並可以设置成为一个大型的虛拟磁盘,其功能为简单的管理与性能表现。

通过磁盘条状分布,RAID子系统可以合併两个或多个磁盘,並成为一个大型逻辑磁盘,磁盘条状分布能夠以逻辑磁盘输出,並且使用不同的语法於两个或多个磁盘存放数据。磁盘条状分布不能表现磁盘容错功能,但是能将I/O分布至多个磁盘,进而提升磁盘访问时间。除此以外,磁盘条状分布可以通过控制器达成容错功能。


大多数的RIAD控制器提供多种不同的逻辑扇区设置选项、条状分布选项及容错RAID类型。不同的RAID设置被称为RAID等级,定义数据如何在I/O子系统中存放於不同的磁盘,这些不同的RAID等级提供不同的容错功能、性能特性以及成本,部分RAID等级牵涉磁盘条状分布,而部份RAID等级则否。


4.6.1硬件与软件RAID的比较

RAID I/O子系统可以通过购买硬件RAID子系统,或是使用软件RAID而达成,两者各有优缺点。

因为不会受到其它执行在系统CPU行程的影响,所以硬件RAID子系统效能较好。除此之外,硬件RAID子系统支持度比软件RAID更好,如热抽換磁盘与異常状态的警告,然而,硬件RAID子系统只能夠设置与控制器的磁盘条状分布,所以逻辑扇区的磁盘数量受到控制器的限制。此外,硬件RAID子系统具有备援电力高速缓冲,这些都是软件RAID系统沒有的功能。

因为不需额外购买硬件,所以软件RAID子系统有成本优势。此外,软件RAID子系统可以设置系统所有磁盘的条状分布,而且不受控制器的限制,因此可以创建连接许多个I/O控制器的RAID扇区。


也可以使用软件磁盘条状分布来管理硬件RAID控制器的逻辑扇区。因此,可以结合两者创建大量的逻辑磁盘,但是因为软件的过载问题,所以不推荐这种作法。

因为本书主要說明性能与稳定性,将在此介绍硬件RAID设备。


4.6.2 条状分布

条状分布(Striping)将数据分布存放於多个磁盘,所以可在系统上创建大型的逻辑扇区。磁盘条状分布将逻辑扇区划分为多个条状或區块状的部份,通常这些条状以循环(Round-Robin)的方式分布於磁盘,如图4-9 。


如前所述,对系统及用户来說,逻辑RAID扇区被视同为大型磁盘设备,若使用硬件RAID控制器,OS将不能分辨其異同。条状分布有多种不同的RAID子系统,可以支持各种RAID等级,在此部份,将說明各种不同的RAID等级及其运作方式。


RAID0

RAID0沒有容错的磁盘条状分布,因此RAID0沒有冗余性。设置RAID0可以在多个磁盘创建的逻辑扇区条状的分布数据,但是任何一个扇区的损坏,都将造成全部逻辑扇区的数据破坏。

RAID0只有条状分布,通常使用循环方式存放数据,RAID0是最经济的RAID等级,其提供最高的性能。此外,有许多条件是互相消长的,例如:

RAID0提供最好的性能与成本,但交換条件卻是沒有容错能力。







RAIDl

RAIDl也被称为磁盘镜射(Disk Mirroring),在RAIDl中,所有存放在磁盘的数据都将被复制至数组中的另一个磁盘,如图4-10。逻辑扇区的每一次写入作业,会先把数据写入实体扇区之后才完成逻辑扇区的写入工作,对於磁碟镜射,每一个磁盘会映射至另一个磁盘;这些磁盘同时也在逻辑扇区中使用条状分佈,合併磁盘条状分佈与镜射也被称为RAIDl0、RAIDl+0、RAID0+1或RAIDI/0 (视厂商而定)。

因为镜射以一对一为基础,即使损坏系统中一半的磁盘,此系统仍可以作业,大多数的磁盘数组控制器可以支持SCSI总线的镜射分佈,此分佈即使损坏一个SCSI总线(如一个机柜)作业仍不会受到影响。

在磁盘镜射的系统中,只可以使用其中半数的磁盘(另一半的磁盘必须作为镜射)。換句话說,若两个18G的磁盘使用磁盘镜射,则实际使用的只有18GB的空间。写入数据时,将可以得到性能的优势,因为逻辑写入可使用两个实体写入通道。

在镜射磁盘上读入数据也可以取得优势,部份磁盘数组控制器支持分布寻找,所以可以同时在不同的镜射磁盘找寻不同的数据,此外,最接近数据的读写头负责访问数据,並依照数据访问的方式,此功能也可能不会提供任何的优点。

假设可以负担磁盘数组的成本,RAID是容错功能的最好选择,磁盘镜射的容错扇区可以提供最好的保护,以及最快的磁盘寻找速度。

RAIDl0
RAID10是RAID0与RAIDl的组合。在RAIDl0扇区中,每一个扇区可以镜射磁盘至另一个磁盘,而镜射的扇区也使用条状分布存放数据,如图4-11。








RAID10扇区的优点具有RAID0的管理及性能优点,並有RAIDl的容错能力,因为一半的磁盘空间作为镜射而不能使用,所以RAIDl0的成本最高。

对於数据库作业,本章将說明RAIDl0是最好的选择。


RAID2

RAID2为并行访问的RAID等级,其使用汉明码(Hamming Code)提供错误更正的机制,在RAID2中,因为所有磁盘可以使用全部的I/O作业,所以每一个磁盘都可以提供快速的大输出量。

因为RAID2可以提供大量的输出量,所以需要三个磁盘以提供容错能力。


RAID3

RAID3为并行访问的容错方式,类似於RAID2。相异点在於RAID3只需要一个磁盘便可以提供容错功能,主要因为RAID3使用位位奇偶性而不是採用错误更正码。RAID3如图4-13 。








RAID3可达成高速传输率,但RAID2一次只能夠使用一个I/O,对於小的随机I/O需求即可自由选择,RAID2与RAID3均提供大量的序列传输,例如:视频串流传送。


RAID4

RAID4又被称为磁盘奇偶校验(Drive Parity)或数据防护(Data Guarding) (別与Oracle Data Guard混淆)。在RAID4中,使用其中一个磁盘作为数据奇偶校验,如图4-14,若任何一个磁盘损坏,其它的磁盘可以使用同位检查磁盘来重建遗失的数据,並继续运作,扣除一个磁盘后,即为RAID4可使用的扇区。

与RAID2及RAID3不同,RAID4使用独立的访问技术,其可以同步访问多个磁盘,因为可以并行的访问,所以随机I/O性能良好,因此每一秒的I/O数量几乎等於独立磁盘驱动设备的限制。






写入RAID4扇区时,会需要额外的I/O以维持奇偶校验的更新。事实上,因为每一次的新增数据都必须执行奇偶校验,以下为步骤:

⒈ 旧数据与旧奇偶校验条状数据都会被读入。

⒉ 对旧的数据及奇偶校验执行XOR。

⒊ 以新的数据取代数值与XOR以取得新的奇偶校验。

⒋ 写出新的数据与新的奇偶校验。

因此,对单一RAID写入工作会使用四个实体的I/O但是对於单一的RAID读入工作,将沒有额外的I/O负荷。

RAID4最大的优点为专用的磁盘奇偶校验,因为每一次写入作业都会执行磁盘奇偶校验,一次只能夠执行一个扇区写入作业,其它写入作业必须在队列等待,若写入活动很频繁,读入作业也会受到影响而开始形成队列,每一个逻辑写入都必须加入额外的实体作业成本,很快的就会產生严重的性能瓶颈。


RAID5

RAID5也被称为「分布式数据保护」RIAD5类似於RAID4,除了每一个磁盘上沒有个別的奇偶校验以外,而奇偶校验散佈於系统的每一个磁盘,如图4-15。

与RAID4一樣,RAID5的写入作业也有额外的负荷,每一次磁盘写入作业会有两个读入工作,一个为同位计算工作,再两次的写入作业。虽然读入处理只需要一个I/O,但是读入作业需要四个I/O,这些都是为了维护奇偶校验。






RAID5写入单一磁盘时,也遇到与RAID4一樣的问题,因为奇偶校验分布於逻辑磁盘內的所有磁盘中,同时可能有一个以上的写入作业,磁盘內的扇区也可能有一半负责写入作业。

为了提供容错功能,因此只会损失一颗硬盘的空间,所以RAID4与RAID5都很经济:但是卻在性能方面付出了代价。


4.6.3 奇偶校验的概述

RAID3、RAID4与RAID5为了提供容错力,都具有奇偶校验的功能,同位检查是一种二位位方式,独立单位加上单数或偶数的总和,位位通过二位位演算法加上0或1即可加总为同位位位,同位位位的数值则视维护的适当位总和而定。

奇偶校验样例
以下为三个不同位位及同位位位的样例,此例选择偶数奇偶校验,因此所有位位的总和必须为偶数。以下为样例:

A=l
B=0
C=1

数值累加为2,假设同位位位数值为0,因此A+B+C+同位数值将等於偶数(2) 。

另一个样例使用以下数值:

A=0
B=l
C=l

为了使A+B+C+同位数值等於偶数(2),同位位数必须为工,所以RAID控制器的每一个磁盘都有创建各自的同位位位、字节对字节、位元对位元。

创建奇偶校验

为了创建RAID3、RAID4~RAID5扇区,每一个数据条状分布必须读入各自的磁盘,並且各自计算奇偶校验,又称为Data Scrubbing.若已创建其中一种RAID磁盘,一定会注意到花费不少的时间才创建完成。因此,必须读入每一个磁盘创建奇偶校验,並且写出奇偶校验,这些作业很耗费时间,依据数组中的磁碟大小及磁盘数量,而时间花费不一。

奇偶校验的维护

创建扇区后,每一次都必须重新计算奇偶校验,因为已计算过奇偶校验,可能依照数据插入或编辑的情況来重新编辑奇偶校验,若数据位改变则同位检查位位也必须改变,可以使用XOR演算法同时对数据及同位位位作计算。

因此,编辑同位数据必须执行以下步骤:

⒈ 读入数据与同位条状分布数据。

⒉ 使用XOR计算旧数据与同位位位。

⒊ 使用XOR计算新的奇偶校验及新的数据。

⒋ 写出新的数据及奇偶校验。

因此,奇偶校验的写入必须使用四个实体I/O及两个XOR运算,因为磁盘限制不只对额外I/O非常重要,其顺序也很重要。因为有两个I/O、两个计算及两个额外I/O,若延迟时间以秒为单位是沒有奇偶校验I/O的两倍(假设无限的I/O延迟时间计算),所以必须将Oracle受到I/O延迟时间的影响也一并行入考量。


RAID性能的概述

前面已說明不同的RAID等级,现在开始介绍其性能,从这个部份开始将介绍最常见的几种RAID等级:RAID0、RAIDl、RAIDl0与RAID5,虽然可能会遇到其它类型的RAID等级,但是机率不高。

首先复习几个规则。

磁盘產生独立I/O作业 无论RAID数组中有多少个磁盘,其中一个会执行I/O作业,因此不能超越此速度限制,多个I/O作业可以同时在多个不同扇区上进行,所以RAID数组可带来更好的性能。

若超越磁盘的实体性能限制,将开始產生队列及延迟时间增加的问题


随机I/O的最佳化性能比率为128 IOPS(在此例中) 超越此速率可能会造成延迟时间增加,额外的磁盘可以允许更多的同步工作及性能。

几乎所有I/O作业都是随机的 即使执行序列表格扫描,若其它人访问同依个磁盘仍会变成随机的I/O。

接下来讨论部份常见RAID等级的性能。

RAID0 为最简单明了的RAID等级性能计算,假设随机的访问RAID阵列,每一个磁盘使用175IOPS,最佳化IOPS可用以下公式计算:

◆ (# of reads) + (# of writes) = (175 * n)

n代表磁盘数组中磁盘数量,因此,10个磁盘的数组,每一秒可处理1750读写作业。

RAIDl与RAID10 RAIDl与RAIDl0扇区的逻辑扇区,每一次的写入作业使用两个实体读写I/O,因为所有磁盘上的数据都必须被镜射至另一个磁盘,因此,可使用以下公式计算RAID0与RAIDl0的最佳化的读写数据:

◆ (# of reads) + (# of writes * 2) = (175 * n)

n代表数组中的磁盘数量,在RAIDl数组样例中,n=2 。

RAID5 RAID5数组在每一次逻辑写入均需要使用四个实体I/O,必须读入旧的数据与奇偶校验並执行两次XOR作业,而且写出新的数据与奇偶校验。可以使用以下公式来计算最佳化读写数据:

◆ (# of reads) + (# of writes * 4) = (175 * n)

n代表磁盘数组的磁盘数量.

RAID等级的性能比较

现在开始比较不同的RAID等级。

■ RAID0是性能最好的RAID等级,因为沒有容错的负荷,但卻因为沒有容错能力,所以数据库作业不会採用这种RAID等级。

■ RAID1与RAIDl0使用2x的写入作业,具有最好的容错能力,但是也是成本最高的一种。

■ RAID5的写入性能最差,因为每一次写入作业必须执行四个实体I/O,RAID5提供容错能力,但只允许损坏一个磁盘,此为最经济的一种RAID等级。

以上說明的RAID等级,在执行读入作业时都沒有额外的性能成本。

在选择RAID等级时,必须考量的因素很多,下一篇文章将說明同时必须把Oracle的I/O列入评估项目之中。

无论硬件厂商如何吹捧,I/O尺寸都是非常重要的问题,虽然最先进的I/O子系统有许多的功能,例如:大量高速缓冲及路复用总线,卻都不能改变磁盘空间不足的问题,最终还是会影响性能。

其中一个最常见的性能问题,就是I/O不足,随著磁盘变大、价格降低,所以有換购加大磁盘的趋势,如果做了适当的选择,则性能会明显受影响。请务必在购买I/O子系统之前,先确认有足夠的I/O大小。

RAID性能

这一个部份說明了不同类型的RAID等级以及其特性,RAID5最受欢迎,因为最经济且允许损坏一个磁盘,当然也具有容错能力。但是在最坏的情況下,RAID5也不适合执行Oracle。

除非读/写率低於90/10,否则不推荐使用RAID5,換句话說,低於90%的I/O读入作业,就不适合使用RAID5,如果I/O率夠低则不用担心这些问题。

使用公式计算出每一个实体磁盘的IOPS之后,请记得实体的RAID5必须写入四次,这可能严重影响数据的查询,为了同时有容错及性能表现,在此我们推荐使用RAIDl0 。


4.7 容量规划

容量规划(Capacity Planning)为了系统工作量的成长,而不断进行的复杂工作,其牵涉到硬件与软件在现有系统的资源消耗,这些研究主要为了随著系统资源使用率的增加而做準备,其中也包括服务等级协议(SLA),換句话說,容量规划是一种藝术,对於现有系统找出可能耗尽的资源。

为了规划资源使用率,容量规划提供工作量的假设场景,在典型的容量规划中,数据库将存放技术人员的工作历史纪錄,而且可以评估以下几个方面:

■ CPU使用率的普通成长。

■ 磁盘使用率。

■ 内存使用率。

技术人员也可以预估系统新加入用户所造成的CPU、磁盘,以及内存使用率突然上升。

这些研究可以非常的详细,也可以将特定用户的活动做成文件。如此一来,不只可以为了规划的用途加入假设性的用户,还可以加入特定的用户,如General Ledger、Accounts Payable等,所以这是很有价值的信息。

通过容量规划的功能,IT部门将可以有足夠的时间,为了维护服务等级协议而加入适当的新硬件。在某些情況下,有些对准的动作会超出容量规划的研究。


总结
本章說明基本的需求及容量规划,此外,需求与容量规划是不一樣的科学,如本章所提出的多项讨论。

需求规划非常的重要,因为不适当的规划可能导致系统不良的设置,最后使系统性能一路下滑。最好能夠以符合经济效益的方式调整系统,而不是勉強使用现有不符合效益的系统。

出处:南方Linux
阅读(606) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~