oracle学习笔记 swap

oracle学习笔记

swap

这节课老师讲了很多,虽说看起来很多都没有用,但老师讲的仔细,我们应该认真了解一下。

这节课主要内容是硬盘的工作机制,工作原理,
以一些系统性能分析工具为线,并附带讲了系统中cpu、内存的工作机制。
对以后进行orace的优化,操作系统的学习非常有帮助。

此前讲过计算机的工作机制。
程序在硬盘上,执行时首先被调入内存成为进程,cpu按照时间片循环的轮回的执行各个进程。
表面上看各个进程都在运行,实际上很多进程都被时间片阻挡在cpu之外。
从宏观上看多个进程同时在执行,实际上一个时间点只有一个在执行。

目前对计算机来讲主要的瓶颈出现在数据从硬盘进入内存。一是通道慢,一是硬盘慢。

一)
top命令

[root@redhat4 ~]# top
top - 09:51:53 up 54 min,  2 users,  load average: 1.18, 1.14, 0.99
Tasks: 139 total,   3 running, 135 sleeping,   0 stopped,   1 zombie
Cpu(s): 35.2% us, 14.0% sy,  0.0% ni, 50.5% id,  0.3% wa,  0.0% hi,  0.0% si
Mem:   1034496k total,  1004556k used,    29940k free,    20160k buffers
Swap:  2104504k total,        0k used,  2104504k free,   631140k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
14005 root      25   0 23840 9496 8232 R 50.0  0.9  27:39.80 vmware-user-loa
14279 oracle    16   0  583m 109m  29m S  9.0 10.8   0:18.61 java
14493 root      25  10 31112  16m 9780 R  0.3  1.6   0:04.65 rhn-applet-gui
    1 root      16   0  1832  552  472 S  0.0  0.1   0:00.71 init
    2 root      RT   0     0    0    0 S  0.0  0.0   0:00.53 migration/0
    3 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    4 root      RT   0     0    0    0 S  0.0  0.0   0:00.50 migration/1
    5 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/1
    6 root       5 -10     0    0    0 S  0.0  0.0   0:00.01 events/0
    7 root       5 -10     0    0    0 S  0.0  0.0   0:00.00 events/1
    8 root       6 -10     0    0    0 S  0.0  0.0   0:00.01 khelper

这里只列出了此命令结果的最前面的一部分,后面还有很多进程信息,省略了

top命令显示的前五行是系统整体的统计信息:
第一行是任务队列信息,同uptime命令的执行结果。
有服务器运行了多长时间,有多少个用户登录,系统负载即任务队列的平均长度。
第二、三行为进程和CPU的信息。
第四、五行为内存信息。

统计信息区域的下方显示了当前系统运行进程的详细信息。

1)
Tasks:行说明
139 total 总共有139个进程。
3 running 有3个进程正在运行。
135 sleeping 135个进程正在睡眠。

一个进程若长时间不工作,操作系统会把它置成sleep状态。
这样cpu在轮询时,对sleep状态的进程不会去轮询,这样就减少了cpu的上下文切换时间。
如果执行sleep状态的进程,cpu把此进程调入cpu执行,但什么工作也不会去做,这样就白白浪费了一次上下文切换。
可以说即使处于sleep状态的进程获得cpu,也没有任何意义。

进程从cpu中切换出来,一是时间片到了,不管是什么状态,马上会被切换出来。
另外一种情况是sleep,一个进程获得cpu以后,工作到一半的时间片时,
此进程需要获取一个资源,才能接着进行,这时此进程可能进入sleep状态。
剩下的另一半时间片没有用完,此进程也会被置换出来。

这里一共139个进程,135个在睡眠,3个正在运行,cpu在调度进程时不是调度所有的进程,只有3个被调度。

另外135个因为是sleep状态,没有被调入cpu。


stopped  停止进程数 ,zombie  僵尸进程数

2)
Cpu(s):行说明
50.5% id cpu有50.5%时间是空闲的。
35.2% us cpu用户进程使用的比例。
14.0% sy cpu系统进程使用的比例。
0.3%  wa cpu什么事没干,对外什么事都不能干,cpu在等待一种资源。

对linux操作系统本身占的cpu,一般划入sy中,
linux中装的软件,比如oracle,进程就被划入us中。

对cpu要掌握id、us、sy、wa四个数值:

idel高系统比较空闲,建议此时间大于25%,这样相对的工作负载没有到极致。

user和sys,希望user高一些,sys低一些。
因为对我们来讲更希望cpu为oracle服务,而不是为linux服务。
linux占的多oracle就占得少。我们不关心linux多快,而是关心oracle多快。

wait占的百分比,我们希望越低越好,它不属于idel,
cpu处于wait时cpu什么没干,对外cpu什么事都不能干,因为cpu在等待资源。
如wait时cpu正在等待io,等待io完成,表面上看起来很忙,但什么事没有做,
说明我们浪费了cpu的时间。

idel高不可怕,wait高大部分情况是io出问题了。
比如说io很慢,cpu等待io完成后才能处理数据。
对外cpu表现为很忙。实际是io出问题了。

3)
Mem:行是内存的使用
1034496k total 内存一共有一个G,
1004556k used  目前已使用
29940k   free  目前还空余
buffers  用作内核缓存的内存量

内存几乎被用光了,不见得不好,如果买了16G内存,而只使用2G,没什么意义。

我们希望被大量的使用,尽量少的free。

被大量的使用,什么情况才认为内存少了呢,要看swap

4)
Swap:行说明
2104504k total swap总共两个G
0k       used  已使用量
2104504k free  剩余的量
cached   缓冲的交换区总量

这里老师深入讲解了swap的工作机制:

我们要处理数据,硬盘的容量要远远大于内存,
而且是多进程结构,大量的数据会被调入内存。
有可能出现内存耗尽的情况。
内存耗尽了,系统就会停滞,很多进程执行不了了。
为了解决这个问题,
在硬盘上划出一块空间,叫swap空间。
linux叫swap,unix中叫page空间换页空间。
此空间和内存关联。

进程执行时,和进程相关的数据被调入内存,
有些进程的数据长时间不用,但在内存中占用空间,
这时还有新的程序大量的进程数据要进入内存,这时如果内存空间不够了,
操作系统会做一件事情,把内存中比较老的长时间不用的数据,把它置换到swap中去。
整个过程是linux操作系统自己做的,不需要我们参与。
置换出来后腾出了空间,就可以让其它进程使用了。

当操作系统再次用到这部分数据时,从硬盘的swap中再调入进来。

我们使用内存是因为内存速度快,硬盘速度慢,
但因为内存空间被耗尽了,发生了内存数据被置换到硬盘上,
再次需要时又被置换会内存,
若发生这种情况内存的速度就降下来了。

这里我们知道了:
1、为什么需要swap
有了swap空间,内存无形中变的大了,
有swap就防止了,因内存耗尽,操作系统挂起的情况。

2、有了swap,但我们尽量不要用swap,
我们通过优化设计,尽量不让操作系统用swap,用swap速度明显变慢。

3、使用了swap后,
有些数据需要空间时把它置换出去又马上再置换进来,
说明置换的数据,处在被相对频繁使用的情况。
出来叫out 进去叫in,in和out都很频繁,说明内存空间不够。
out大in少还可以接受,被out出来了,很少被in进去,
说明这块内存确实不怎么被用。
对我们系统的影响相对比较小。

简单的说:
1swap空间是有必要的
2尽量的让系统少用swap
3在使用时我们希望out多一些,in少一些。

5)
top主体是进程的信息:
PID   每个进程都有的id号
%CPU  进程使用cpu的百分比
%MEM  进程使用内存的百分比
TIME+ 进程执行时间的累积值

其它的细节就不再详细讲了。

二)
还有其他的一些命令

iostat 
是目前的硬盘的工作情况

命令格式:
iostat[参数][时间][次数]

[root@redhat4 ~]# iostat
Linux 2.6.9-78.ELsmp (redhat4)  2016年05月14日

avg-cpu:  %user   %nice    %sys %iowait   %idle
          28.92    0.21   12.96    1.98   55.92

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda              12.02       222.45       171.69    2789532    2153016
sda1             11.61       219.16       162.73    2748370    2040736
sda2              0.34         2.18         3.82      27358      47864
sda3              0.07         1.02         5.14      12820      64416

1)
avg-cpu: 部分是cpu使用情况
%user:CPU处在用户模式下的时间百分比。
%sys:CPU处在系统模式下的时间百分比。
%iowait:CPU等待输入输出完成时间的百分比。

%iowait io等待,越低越好。它有问题,就是io出问题了。

2)
Device: 部分为 磁盘活动统计情况

sda为系统中的一个硬盘
tps 每秒的传输次数。它的数值高,说明对硬盘的访问次数比较大。
Blk_read/s 每秒读的块数
Blk_wrtn/s 每秒写的块数
Blk_read   Blk_wrtn 总的读的块数 总的写的块数

老师演示时输入的命令为
iostat 1 20
每隔 1秒刷新显示,且显示20次

三)
free

free 命令显示系统使用和空闲的内存情况,
包括物理内存、交互区内存(swap)和内核缓冲区内存。

[root@redhat4 ~]# free
             total       used       free     shared    buffers     cached
Mem:       1034496     997956      36540          0      25900     604788
-/+ buffers/cache:     367268     667228
Swap:      2104504      29008    2075496


四)
硬盘的结构

系统运行时,硬盘数据通过通道到内存,然后cpu执行。

硬盘可以永久存放数据。

外部连接硬盘有供电接口,有数据接口。
硬盘通过数据接口接到主板上。
内存也插在主板上,通过主板芯片及主板内部线路由主板上的硬盘接口连接到硬盘上。

硬盘内部不拆开不可见,有盘片,磁臂驱动等
数据存在盘片上,
盘片圆形中间有轴,盘片上是撒上的磁粉,
围绕轴心,格式化出一圈圈的磁道,数据就存放在磁道上。
磁道使用磁性存放数据,
磁场的变化会产生电压,电压有高低之分,
有了高低就有了1和0,1、0就可以表示数据。

一圈圈磁道,使用从圆心出发的半径线再把磁道划成一个个扇形的扇区。
每个扇区存放512个字节的数据。
数据在盘片外圈存放的数据稀疏一些,里面存储的密一些,但都是512字节。

计算机中 扇区英文为:sector 磁道英文为:track

硬盘把数据读出需要磁头,
硬盘中有磁臂,磁臂上挂一个磁头。
磁头悬浮在磁道的上方。

磁头并没有直接接触磁道,
若不小心磁头接触到磁道,这时磁道就会发生物理损伤,
磁盘就会出现坏道,硬盘可能就坏了。

机器硬盘中,有马达驱动磁臂,磁臂带动磁头到达所需磁道的上方。
而盘片是飞速旋转的,磁头在旋转的磁道上,就能将数据读出。

从硬盘上取数据就是从磁道,从磁道的扇区上取数据。
然后通过硬盘内线路,再通过硬盘的外部接口,传到主板上再传到内存。
这是硬盘的大体工作机制。

从硬盘上取数据,有三块时间,
1寻道时间,磁臂驱动磁头,到达磁道上方,有可能偏了,需要调整,正指向磁道后为寻道时间。
2旋转时间,盘面旋转把数据读出。
3传输时间,数据通过通道通过接口传到内存。

这里面寻道时间占用时间最多。几乎占了这三块时间的绝大多数。
传输时间占了一毫秒的话,寻道就可能占了10毫秒。

我们用windows时,通常会做碎片整理。
就是把我们要集中访问的数据尽量的放到一起。
这样我们在取一块数据时可以最大限度的减少它的寻道时间。
这样可以大幅度减少我们从硬盘取数据所花费的时间。

这是硬盘的工作机制所应该注意的几个点。

五)
硬盘的几个参数

一个硬盘可以有多个盘片,轴的旋转带动盘片一起旋转。

1、盘片的旋转速度是硬盘的一个参数。
如:每分钟15000转、10000转、7200转、5400转、4500转。
现在服务器10000转以上的居多。
2、另一个参数硬盘的容量。
3、硬盘的接口
硬盘除了有寻道时间、旋转速度还有传输速度
传输速度主要指硬盘的接口。

1)硬盘还有柱面的概念
一个盘片上面下面都有磁道,相同半径的磁道有两个。
如果硬盘有两个盘片,具有相同半径的磁道,就会各有四个,
这四个磁道就组成一个柱面。
所有盘片的所有面,相同半径的磁道都组成一个柱面。
若每个盘面有100个磁道,那么整个硬盘就会有100个柱面,
若有4个盘面,总共会有400个磁道,而有100个柱面,每个柱面4个磁道。

柱面的意义:
一个硬盘两个盘片,四个盘面,磁臂上就要有四个磁头。
一次寻道时间,四个磁头同时对准同一个柱面的所有磁道。
若我们把要访问的数据放到最外面的柱面上,
然后取数据时,只有一次寻道就可以了。
一次寻道,四个磁头同时到达最外面的磁道。这样轴旋转时,可一次性将四个磁道的数据取出。

所以在linux磁盘分区时,都是以柱面为基本单位。
如把最外面两个柱面化为一个分区,将来在向分区放数据时,分布在两个柱面。
在存取数据,只需寻道两次就可以了。

2)盘片的转动
电脑加电,硬盘也随着加电,
系统启动以后,盘片一直在按照一个速度在运行。
只要硬盘在线,即使没有从硬盘上取数据,盘片也一直在旋转。
旋转是有寿命的。
但磁臂和磁头有可能会进入停泊区,
磁臂磁头不取数据时到达某个位置,叫停泊区。
进入停泊区就会远离盘片。

某些笔记本节能,在不读数据时,盘片以低速旋转,读数据时恢复到高速。
这样有部分节能功能。

我们不希望硬盘在运行过程中发生震动,
计算机震动磁臂也会发生震动,磁头有可能触到磁道上,
而盘片一直在旋转,就有可能把盘片刮坏。
我们希望硬盘保持一种稳定的工作状态。

硬盘实际是一个机械的装置,一分钟才转1万转,
而寻道是个机械工作,从硬盘上取数据主要的时间都消耗在寻道上。

从硬盘读数据消耗时间:最多寻道、其次转速、
第三个才是数据从硬盘上取出来,通过接口传到内存。

3)硬盘的接口
pc机上的接口:
IDE、SATA、STAT2、SATA3。
服务器上的接口:
SCSI、SAS、FC

IDE的英文全称为“Integrated Drive Electronics”,即“电子集成驱动器”
也称之为ATA接口,ATA的英文拼写为“Advanced Technology Attachment”
为区别SATA也叫做PATA,PATA全称是Parallel ATA,PATA硬盘叫做并行ATA硬盘

ATA接口从诞生至今,共推出了7个不同的版本,采用技术和传输速度各有不同。

SATA的全称是Serial Advanced Technology Attachment 既串行ATA
Serial ATA 1.0定义的数据传输率可达150MB/sec,
这比目前最快的并行ATA(即ATA/133)所能达到133MB/sec的最高数据传输率还高,
而Serial ATA 2.0的理论传输率是3.0Gbps实际达到300MB/sec,
最终Serial ATA 3.0理论值为6Gbps(750MB/s)实际为600MB/sec的最高数据传输率

目前SATA已经完全取代旧式PATA接口

SCSI全名Small Computer System Interface 即 小型计算机系统接口
SAS全名Serial Attached SCSI 即 序列式SCSI
FC全名Fibre Channel 即 光纤通道技术

普通电脑原来是IDE硬盘,服务器原来是SCSI。

现在服务器上SAS和FC较多,电脑上sata2,sata3用的较多。

FC光纤盘,
接口实际上走的是电,只不过协议是光纤协议,实际还是个电口。
速度有2G 4G 8G 16G 都是小b。
2Gb 为250MB 一般讲这个硬盘时都是小b。

接口速度再快,盘片速度慢,没有什么意义。

IDE接口较宽,是并口,速度较慢。
SATA为串口,实际上是IDE盘并口串行化以后叫SATA盘,这两个口都是ATA口。
SCSI是并口,
SAS为串口,SCSI串口化后形成了SAS。

现在串口使用较多。

因为并口占空间,IDE接口较宽,占主板空间大。
换成SATA口,口较窄,可放较多。
用串口主板进行线路布局时主板空间布局上会好很多。

并口很大的一个坏处是里面的线很多,串口线少。
线多容易产生干扰,我们希望信号会强,避免干扰,就要线短,
IDE SCSI线比较短,因为干扰强。
串口化后,干扰弱了,传输距离就会长一些。

所以,串口两大好处 占空间少,干扰小。

而串口的SATA、SAS、FC中FC的传输距离最长因为光是没有干扰的。

老师说这节课理论性的东西较多,
我们只需要记住:

硬盘里面有盘片,有磁臂,有磁头,还有接口。
硬盘的参数回顾一下有:
寻道时间及平均寻道时间,
硬盘容量,
接口的传输速度。

六)
电脑硬盘和服务器硬盘的区别
1)
如果是IDE,或者SATA,
这种硬盘,从硬盘取数据到内存时会占用cpu时间,因为这种硬盘上没有中央cpu芯片。

如果是SCSI或者SAS或是FC,
因为硬盘中有一个cpu芯片,我们从硬盘上取数据时,
主机主板上的主cpu占的时间非常少,可以减少cpu时间。

这就是为什么服务器要用SCSI的原因,而电脑要用IDE、SATA。

IDE、SATA和SCSI比起来接口速度并不是太弱,
SATA2 300MB 它是大B 理论速度是3Gb
FC也就是2Gb,4Gb,8Gb
SATA3 600MB换算为小b,是6Gb也不比FC盘慢。

为什么我们喜欢用FC、SAS和SCSI就是因为服务器的硬盘传输数据时不占用主cpu的时间。
这时它们本质不同的一个地方。

所以选服务器时千万不要选SATA硬盘,要选SCSI。

2)
还有一个很奇怪的地方,关于容量。

SATA盘容量已到了T级,有一个T,两个T,
老师讲课时间是2012年,现在是2016年,2T盘已很普遍,3T盘在普及
在售盘最大已到6T,并且媒体上也有了8T盘制成的宣传。

而FC硬盘空间还比较小,最老73G、146G再到200G、300G

很奇怪FC硬盘第一非常贵,第二空间还小,
但服务器上还在用这种盘,原因就是在传输数据时不占用cpu时间。
cpu资源是计算机的核心资源,非常宝贵。

我说一下我的感觉,就别用FC盘了,用SATA盘也可以啊。
实际也只有一个区别FC硬盘间对拷数据时不用使用中央cpu,其它几乎没有区别,
并且ATA硬盘还有DMA(Direct Memory Access)技术,DMA模式系统资源占用也少。
但老师有说如果用SATA盘会发现IO wait会很高。
最终我还是觉得就这一个指标高一些,应该无所谓。

现在回忆一下iostat命令,
我们知道为什么关注每秒传输次数了,
传输次数多,意味着寻道的次数就多。就意味着磁盘比较繁忙。

硬盘的工作原理先讲这么多。后面还会陆陆续续补充一些硬盘的工作原理。




2016年5月17日       韵筝

你可能感兴趣的:(oracle,数据库,oracle学习,red,甲骨文,hat)