先說一下數(shù)據(jù)庫的兩個基本概念:
創(chuàng)新互聯(lián)是一家專業(yè)提供郫都企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、網(wǎng)站制作、H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為郫都眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。數(shù)據(jù)庫和實例關(guān)系:一個實例只能裝載一個數(shù)據(jù)庫,而在非集群的情況下,一個數(shù)據(jù)庫也是被一個實例裝載(mount);集群環(huán)境下則可以由多個實例裝載一個數(shù)據(jù)庫
下面說一下SGA:
共享池(shared pool):我們數(shù)據(jù)字典高速緩存和庫高速緩存。知道,SQL、PL/SQL在執(zhí)行的時候,都會進(jìn)行語法校驗與語法分析、編譯,尤其是SQL語句還有優(yōu)化器進(jìn)行優(yōu)化,這些都需要耗費時間來處理,所以為了提高性能,ORACLE會把編譯完成的SQL語句緩存起來,下次再執(zhí)行相同的SQL時,就不用再執(zhí)行這些流程。這些編譯好的SQL、PL/SQL放在哪呢?就放在共享池里,更具體來說是放在共享池里的庫高速緩存里面,這是一個隊列,最近使用的SQL放在隊首,長時間沒有使用的SQL放在隊尾,當(dāng)緩存達(dá)到大值時,隊尾的SQL會被清除掉以存放最新的SQL。數(shù)據(jù)字典高速緩存,里面存放的是SQL語句執(zhí)行時的相關(guān)數(shù)據(jù)文件、表、索引、列、用戶、其他的數(shù)據(jù)對象的定義和權(quán)限信息。
注:共享池的大小嚴(yán)重影響性能,太大或太小都會造成嚴(yán)重的性能問題。如果SQL里不使用綁定變量,那么SQL不會被重用,切記切記。
數(shù)據(jù)緩沖區(qū)(block buffer cache):或者叫塊緩沖區(qū),現(xiàn)在計算機(jī)的性能瓶頸其實一直卡在IO上面,磁盤IO速度永遠(yuǎn)跟不上CPU的計算速度。由于磁盤IO是計算機(jī)最慢的部分,所以為了提高性能,就必須減少IO操作。數(shù)據(jù)緩沖區(qū)就是起這樣的作用,它將最近從數(shù)據(jù)文件(data file)里讀取的數(shù)據(jù)放入到數(shù)據(jù)緩沖區(qū)里面,這樣當(dāng)用戶查詢數(shù)據(jù)的時候,oracle會先從緩沖區(qū)里面查找,如果有該請求所需要的數(shù)據(jù),就直接從緩沖區(qū)里返回給用戶(要知道內(nèi)存的速度比磁盤可快好幾個數(shù)量級的),這就叫做緩存命中(Cache Hit),這樣就減少了IO次數(shù);如果沒有該請求所需要的數(shù)據(jù),則稱之謂緩存未命中(Cache Miss),然后就從數(shù)據(jù)文件中讀取數(shù)據(jù),先放入數(shù)據(jù)庫緩沖區(qū)中,再傳送給用戶。
日志緩沖區(qū)(也就是重做日志緩沖區(qū)):重作日志記錄了數(shù)據(jù)庫對數(shù)據(jù)庫每個數(shù)據(jù)塊的更改,包括對數(shù)據(jù)的修改和對數(shù)據(jù)庫結(jié)構(gòu)的修改。當(dāng)我們對數(shù)據(jù)進(jìn)行修改時,相關(guān)數(shù)據(jù)并不會馬上寫入到數(shù)據(jù)文件中,而是首先生成重做信息,并寫入日志緩沖區(qū)中,當(dāng)有以下條件時,LGWR會把這個緩沖區(qū)的日志寫入到重作日志中去:
重作日志寫滿了之后,會進(jìn)行歸檔,生成歸檔日志,有了歸檔日志和重作日志,即使用數(shù)據(jù)文件丟失也可以恢復(fù)。
Large池:為了進(jìn)行大的后臺進(jìn)程操作而分配的內(nèi)存空間,主要指備份恢復(fù)、大型IO操作、并行查詢等。
數(shù)據(jù)庫的邏輯結(jié)構(gòu):表空間-->段-->區(qū)-->數(shù)據(jù)塊
表空間: 數(shù)據(jù)庫大的邏輯單位是表空間(tablespace),一個表空間可以由多個數(shù)據(jù)文件組成(數(shù)據(jù)文件是指.dbf文件),一個表空間可以由多個數(shù)據(jù)文件組成,但是一個數(shù)據(jù)文件只能屬于一個表空間。一個數(shù)據(jù)庫至少有一個表空間(SYSTEM表空間),它存放oracle的數(shù)據(jù)字典,表空間的大小等于構(gòu)成該表空間的所有數(shù)據(jù)文件大小之和。
段:段是構(gòu)成表空間的邏輯存儲結(jié)構(gòu),段由一組區(qū)組成,這些區(qū)可以分布在不同的數(shù)據(jù)文件中。按照段所存儲數(shù)據(jù)的特征,將段分為若干種類型,主要有數(shù)據(jù)段、索引段、回退段和臨時段。
區(qū):由連續(xù)的數(shù)據(jù)塊組成。
表空間USER_DATA在物理上由兩個數(shù)據(jù)文件user_data01.dbf和user_data02.dbf兩個數(shù)據(jù)文件組成,在邏輯上由三個段組成。data01分為兩個區(qū),data02也分為兩個區(qū),段T1由兩個區(qū)組成,分別分布在不同數(shù)據(jù)文件中,而T2和II則只有一個區(qū)組成。
數(shù)據(jù)塊:是數(shù)據(jù)庫中最小的數(shù)據(jù)存儲單元,一般塊的大小是當(dāng)前操作系統(tǒng)的文件系統(tǒng)塊的倍數(shù),這是oracle官方的建議,使用 show parameter db_block_size來查看塊大小。