oracle學習筆記 swap

來源:互聯網
上載者:User

標籤:

oracle學習筆記

swap

這節課老師講了很多,雖說看起來很多都沒有用,但老師講的仔細,我們應該認真瞭解一下。

這節課主要內容是硬碟的工作機制,工作原理,
以一些系統效能分析工具為線,並附帶講了系統中cpu、記憶體的工作機制。
對以後進行orace的最佳化,作業系統的學習非常有協助。

此前講過電腦的工作機制。
程式在硬碟上,執行時首先被調入記憶體成為進程,cpu按照時間片迴圈的輪迴的執行各個進程。
表面上看各個進程都在運行,實際上很多進程都被時間片阻擋在cpu之外。
從宏觀上看多個進程同時在執行,實際上一個時間點只有一個在執行。

目前對電腦來講主要的瓶頸出現在資料從硬碟進入記憶體。一是通道慢,一是硬碟慢。

一)
top命令

[[email protected] ~]# 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[參數][時間][次數]

[[email protected] ~]# 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)和核心緩衝區記憶體。

[[email protected] ~]# 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學習筆記 swap

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.