本發(fā)明涉及一種磁盤讀取方法及裝置,特別是涉及一種磁盤頁面的讀取方法和裝置。
背景技術(shù):
當(dāng)從磁盤頁面讀取數(shù)據(jù)時,傳統(tǒng)方法通常先將數(shù)據(jù)讀取到內(nèi)存中,以減少磁盤輸入輸出操作。除此以外,為了提高數(shù)據(jù)使用效率,預(yù)讀取技術(shù)也被引進(jìn)到數(shù)據(jù)庫內(nèi)核中來優(yōu)化數(shù)據(jù)庫性能。這樣,除了需要使用的數(shù)據(jù)所在的頁面被讀取以外,與其相鄰的其他頁面也被預(yù)先讀取到緩沖池中。
這種方法雖然在某種程度上提高了磁盤頁面讀取的效率,但僅能按照經(jīng)驗設(shè)置預(yù)讀取頁面的數(shù)量,具有一定的盲目性。如果預(yù)讀取的頁面并非數(shù)據(jù)庫內(nèi)核接下來將要讀取的頁面,此時不需要讀取的頁面甚至已經(jīng)將緩存中的有效頁面替換出去,導(dǎo)致數(shù)據(jù)庫性能降低。同時,如果預(yù)讀取的頁面數(shù)量過少,也將導(dǎo)致預(yù)讀取的數(shù)據(jù)不足而在后續(xù)的讀取中產(chǎn)生大量的磁盤讀取請求。傳統(tǒng)磁盤頁面的預(yù)讀取方法不僅沒有提高磁盤讀取效率,反而降低了磁盤讀取的效率。
技術(shù)實現(xiàn)要素:
基于此,有必要針對磁盤頁面的預(yù)讀取效率的問題,提供一種磁盤頁面的讀取方法及裝置。
一種磁盤頁面的讀取方法,包括:
接收數(shù)據(jù)庫操作指令;
從頁面緩沖池中查找所述數(shù)據(jù)庫操作指令所需的頁面;
若未在頁面緩沖池中查找到所述頁面,則判斷所述數(shù)據(jù)庫操作指令類型是否屬于預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合;
若所述數(shù)據(jù)庫操作指令類型屬于預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合,則根據(jù)數(shù)據(jù)庫操作指令類型確定需要預(yù)讀取的頁面數(shù)量;以及
根據(jù)需要預(yù)讀取的頁面的數(shù)量,從磁盤中讀取需要預(yù)讀取的頁面到頁面緩沖池中。
一種磁盤頁面的讀取裝置,所述裝置包括:
指令接收模塊,用于接收數(shù)據(jù)庫操作指令;
頁面查找模塊,用于從頁面緩沖池中查找所述數(shù)據(jù)庫操作指令所需的頁面;
指令類型判斷模塊,用于若未在頁面緩沖池中查找到所述頁面,則判斷所述數(shù)據(jù)庫操作指令類型是否屬于預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合;
頁面數(shù)量確定模塊,用于若所述數(shù)據(jù)庫操作指令類型屬于預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合,則根據(jù)數(shù)據(jù)庫操作指令類型確定需要預(yù)讀取的頁面數(shù)量;以及
頁面讀取模塊,用于根據(jù)需要預(yù)讀取的頁面的數(shù)量,從磁盤中讀取需要預(yù)讀取的頁面到頁面緩沖池中。
上述磁盤頁面的讀取方法和裝置,預(yù)先設(shè)置了數(shù)據(jù)庫操作指令集合,在從頁面緩沖池中未查找到數(shù)據(jù)庫操作指令所需的頁面時,判斷數(shù)據(jù)庫操作指令類型是否屬于預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合。若數(shù)據(jù)庫操作指令類型屬于預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合,則進(jìn)一步確定需要預(yù)讀取的頁面的數(shù)量,而不是單純地不進(jìn)行任何判斷僅按照經(jīng)驗設(shè)置預(yù)讀取既定數(shù)量的頁面。利用本發(fā)明可使得預(yù)讀取的頁面數(shù)量適當(dāng),降低了頁面緩沖池資源的非必要占用并提高了磁盤讀取效率。
附圖說明
圖1為一個實施例中磁盤頁面的讀取方法的流程示意圖;
圖2為一個實施例中數(shù)據(jù)庫預(yù)設(shè)操作指令類型獲取需要預(yù)讀取的頁面的示意圖;
圖3為一個實施例中對需要預(yù)讀取的頁面排序分組的流程示意圖;
圖4為一個實施例中磁盤頁面的讀取裝置的結(jié)構(gòu)框圖;
圖5為一個實施例中頁面數(shù)量確定模塊的結(jié)構(gòu)框圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
如圖1所示,在一個實施例中,提供了磁盤頁面的讀取方法的流程示意圖,包括如下步驟:
步驟102:接收數(shù)據(jù)庫操作指令。
所述接收的數(shù)據(jù)庫操作指令用于對頁面進(jìn)行操作,比如修改頁面上的數(shù)據(jù)或者讀取頁面上的數(shù)據(jù)等。
步驟104:從頁面緩沖池中查找所述數(shù)據(jù)庫操作指令所需的頁面。
要對數(shù)據(jù)進(jìn)行操作,則需要在頁面緩沖池中查找步驟102中所述的所需的頁面。
步驟106:若未在頁面緩沖池中查找到所述頁面,則判斷所述數(shù)據(jù)庫操作指令類型是否屬于預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合。
在頁面緩沖池中未查找到所需的頁面時,則根據(jù)所述數(shù)據(jù)庫操作指令類型,判斷是否需要從磁盤中讀取此頁面到緩沖池中從而得到所需頁面。通過將數(shù)據(jù)庫操作指令類型與預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合中的數(shù)據(jù)庫操作指令進(jìn)行比較,判斷是否屬于預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合。在本實施例中,首先通過判斷操作指令類型來確定是否需要讀取包括所需讀取的頁面在內(nèi)的一批頁面,或者僅讀取所需的頁面。
步驟108:若所述數(shù)據(jù)庫操作指令類型屬于預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合中的一種,則根據(jù)數(shù)據(jù)庫操作指令類型確定需要預(yù)讀取的頁面數(shù)量。
本實施例中,針對不同的數(shù)據(jù)庫操作指令類型,可采取不同的計算方法進(jìn)行精確的估算,從而得到需要預(yù)讀取的頁面的數(shù)量。
步驟110:根據(jù)需要預(yù)讀取的頁面的數(shù)量,從磁盤中讀取需要預(yù)讀取的頁面到頁面緩沖池中。
在確定了需要預(yù)讀取的頁面的數(shù)量之后,生成工作線程并行執(zhí)行預(yù)讀取頁面到頁面緩沖池中的操作。
上述磁盤頁面的讀取方法,先通過判斷數(shù)據(jù)庫操作指令類型是否屬于預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合,來確定是否需要進(jìn)行預(yù)讀取,然后再針對需要進(jìn)行預(yù)讀取的數(shù)據(jù)庫操作指令類型,分別計算需要預(yù)讀取的頁面的數(shù)量,使得預(yù)讀取的頁面數(shù)量適中,降低了頁面緩沖池資源的非必要占用,并提高了磁盤讀取效率。
在一個實施例中,步驟102所述的數(shù)據(jù)庫操作指令類型主要包括數(shù)據(jù)庫中的四大類語言DDL(數(shù)據(jù)定義語言),DML(數(shù)據(jù)操縱語言),DCL(數(shù)據(jù)控制語言),DQL(數(shù)據(jù)查詢語言)和數(shù)據(jù)庫執(zhí)行計劃中所包含的運算指令,比如全表掃描操作指令、全索引掃描操作指令、索引范圍掃描操作指令、索引葉節(jié)點掃描操作指令、日志掃描操作指令及事務(wù)的回滾操作指令等。通過解析指令,得出數(shù)據(jù)庫需要對某些數(shù)據(jù)執(zhí)行相應(yīng)操作,而這些數(shù)據(jù)存在于某一頁面或者某些頁面上,然后從頁面緩沖池中查找這些頁面。
在一個實施例中,在步驟108中,若未在頁面緩沖池中查找到步驟106中操作所需的頁面,則說明此頁面不在頁面緩沖池中,此時則需要從磁盤中讀取所需的頁面到頁面緩沖池中,以便頁面被使用。在從磁盤中讀取頁面時,不只讀取所需的頁面,還會讀取包含所需頁面在內(nèi)的一批頁面。在本發(fā)明的本實施例中,首先通過判斷操作指令類型是否是預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合中的一種來確定是否需要讀取一批頁面,如果屬于預(yù)設(shè)操作指令集合,則讀取一批頁面。否則,則不需要讀取一批頁面,僅讀取所需的頁面。
在本實施例中,所述的預(yù)設(shè)數(shù)據(jù)庫操作指令集合至少包括下列六種:全表掃描操作指令、全索引掃描操作指令、索引范圍掃描操作指令、索引葉節(jié)點的掃描、日志掃描操作指令及事務(wù)回滾操作指令。上述六種操作共有的特點是均會有大量針對頁面的操作,所以需要對操作所需的頁面數(shù)量進(jìn)行計算,來保證讀取合適數(shù)量的頁面。
在本實施例中,所述判斷數(shù)據(jù)庫操作指令類型是否屬于預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合中的一種可以通過在系統(tǒng)中設(shè)置操作指令監(jiān)測程序來實現(xiàn)。比如,當(dāng)監(jiān)測程序監(jiān)測到操作指令是預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合中的一種時,則開始準(zhǔn)備獲取需要預(yù)讀取的頁面的數(shù)量。具體地,操作指令監(jiān)測程序可以通過字符串比較來實現(xiàn)監(jiān)測。通常操作指令的關(guān)鍵字是一個字符串,比如ROLLBACK(回滾),TABLE SCAN(表掃描)等。通過字符串比較函數(shù)、其他函數(shù)或其他方法,可以判斷出操作指令中是否含有相應(yīng)的關(guān)鍵字。若含有相應(yīng)的關(guān)鍵字,則所述操作指令類型屬于預(yù)設(shè)操作指令集合中的一個。應(yīng)當(dāng)理解,本實施例僅列舉了一種判斷的方法,其他方法均可以用于判斷數(shù)據(jù)庫操作指令類型是否屬于預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合中的一種。
在步驟108中,若所述數(shù)據(jù)庫操作指令類型屬于預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合中的一種,則根據(jù)數(shù)據(jù)庫操作指令類型確定需要預(yù)讀取的頁面數(shù)量。
步驟108對需要預(yù)讀取的頁面的數(shù)量進(jìn)行精確估算,所述六種操作指令類型所對應(yīng)的頁面的數(shù)量采取的估算方法不同。
如圖2所示,提供了數(shù)據(jù)庫預(yù)設(shè)操作指令類型獲取需要預(yù)讀取的頁面的示意圖,所述數(shù)據(jù)庫操作指令類型包括:全表掃描操作指令、全索引掃描操作指令、索引范圍掃描操作指令、索引葉節(jié)點掃描操作指令、日志掃描操作指令及事務(wù)回滾操作指令。數(shù)據(jù)庫根據(jù)數(shù)據(jù)庫操作指令類型,針對需要操作的數(shù)據(jù)及其結(jié)構(gòu)來進(jìn)行相應(yīng)的操作(例如:全表掃描、全索引掃描、索引范圍掃描、索引葉節(jié)點掃描、日志掃描及事務(wù)的回滾),從而獲取需要預(yù)讀取的頁面。其中,需要預(yù)讀取的頁面可以是連續(xù)的也可以是非連續(xù)的頁面。
在一個實施例中,具體方法如下:
若數(shù)據(jù)庫操作指令類型為全表掃描操作指令或全索引掃描操作指令,步驟108中根據(jù)數(shù)據(jù)庫操作指令類型確定需要預(yù)讀取的頁面的數(shù)量的步驟具體包括:獲取全表掃描或全索引掃描所需掃描的表的總數(shù)據(jù)量;將表的總數(shù)據(jù)量中預(yù)設(shè)比例的數(shù)據(jù)量確定為所需讀取的數(shù)據(jù)量;根據(jù)所需讀取的數(shù)據(jù)量獲取需要預(yù)讀取的頁面的數(shù)量。
具體地,首先獲取全表掃描或全索引掃描所需掃描的表的總數(shù)據(jù)量。在一個實施例中,在獲取表的總數(shù)據(jù)量之前,可先根據(jù)表所占extent的個數(shù)判斷表的大小。全表掃描通常是對堆表的掃描,全索引掃描通常是對索引組織表的掃描,其本質(zhì)上都是對表的掃描,而表在數(shù)據(jù)庫中存儲時對應(yīng)的空間為多個extent,所以可以根據(jù)操作所需掃描的表所占的extent個數(shù)來判斷其大小。
其中,extent是指分配給對象的任何連續(xù)塊或者區(qū)間。extent包含多個連續(xù)的頁面,一個extent通??梢匀菁{8個連續(xù)的頁。其中,extent的個數(shù)和地址通常都記錄在表或索引的元數(shù)據(jù)中,所以可以通過獲取表或索引的元數(shù)據(jù)來獲取表和索引所占的extent個數(shù)。在本發(fā)明的一個實施例中,可以通過表所占的extent的個數(shù)來區(qū)分表的大小。若extent的個數(shù)大于等于預(yù)設(shè)默認(rèn)值,則判定表為大表;若extent的個數(shù)小于預(yù)設(shè)默認(rèn)值時,則判定表為小表,例如預(yù)設(shè)默認(rèn)值可以設(shè)置為10000,即:若extent的個數(shù)大于等于10000個extent,則判定表為大表;若extent的個數(shù)小于10000個extent,則判定表為小表。
在判定表的大小后,則根據(jù)表的數(shù)據(jù)量來確定需要預(yù)讀取的頁面的數(shù)量。表中含有大量的數(shù)據(jù),而這些數(shù)據(jù)是被寫在頁上的。數(shù)據(jù)量越大則需占用的頁越多。通常,每一頁所能容納的數(shù)據(jù)為8060字節(jié)。表的數(shù)據(jù)量通常記錄在數(shù)據(jù)庫的目錄(catalog)中,可以通過讀取catalog來獲取表的總數(shù)據(jù)量。
然后,將表的總數(shù)據(jù)量中預(yù)設(shè)比例的數(shù)據(jù)量確定所需讀取的數(shù)據(jù)量,例如依據(jù)表的大小來確定讀取表的數(shù)據(jù)量的一定預(yù)設(shè)比例的數(shù)據(jù)量,這些數(shù)據(jù)量所占的頁數(shù)即為需要預(yù)讀取的頁面的數(shù)量。表的大小決定了需要預(yù)讀取的數(shù)據(jù)量,從而確定了需要預(yù)讀取的頁面的數(shù)量。具體地,當(dāng)表為大表時,則確定預(yù)讀取表的總數(shù)據(jù)量的預(yù)設(shè)比例x的數(shù)據(jù)量,通過所述總數(shù)據(jù)量的預(yù)設(shè)比例x的數(shù)據(jù)量可以計算出需要預(yù)讀取的數(shù)據(jù)量所占的頁的個數(shù),即需要預(yù)讀取的頁面的數(shù)量,例如x取值范圍可為5%-10%,默認(rèn)值可為5%。同理,當(dāng)表為小表時,則確定預(yù)讀取表的總數(shù)據(jù)量的預(yù)設(shè)比例y的數(shù)據(jù)量,通過總數(shù)據(jù)量的預(yù)設(shè)比例y的數(shù)據(jù)量可以計算出其所占的頁數(shù),即需要預(yù)讀取的頁面的數(shù)量,例如y的取值范圍可為20%-100%,默認(rèn)值可為20%。從上述數(shù)據(jù)也可以看出:當(dāng)表較大時,只預(yù)讀取較少的頁面,而表較小時,則預(yù)讀取較多的頁面,甚至是表所占的全部頁面(即y取值為100%時的情況)。
若數(shù)據(jù)庫操作指令類型為索引范圍掃描操作指令或索引葉節(jié)點掃描操作指令,步驟108中根據(jù)數(shù)據(jù)庫操作指令類型確定需要預(yù)讀取的頁面的數(shù)量的步驟具體包括:獲取索引范圍掃描或索引葉節(jié)點掃描的請求次數(shù);根據(jù)所述請求次數(shù)獲取需要預(yù)讀取的頁面的數(shù)量。
具體地,首先計算索引掃描的請求的次數(shù)。索引范圍掃描從索引的根節(jié)點出發(fā),找到第一個匹配的條目所在的索引葉節(jié)點之后開始遍歷索引結(jié)構(gòu),而索引葉節(jié)點掃描則是直接對索引葉節(jié)點進(jìn)行索引結(jié)構(gòu)遍歷,其本質(zhì)上都是對索引葉節(jié)點進(jìn)行索引結(jié)構(gòu)遍歷,所以都可以基于索引結(jié)構(gòu)遍歷的特點,計算出需要預(yù)讀取的頁面數(shù)量。具體說明如下:
在遍歷索引葉節(jié)點的索引結(jié)構(gòu)時,每次首先從索引結(jié)構(gòu)中的索引條目中獲取行地址,然后通過行地址訪問行獲取對應(yīng)的表數(shù)據(jù),表數(shù)據(jù)所在的頁(可為一個或多個)即為需要預(yù)讀取的頁面。接下來,索引葉節(jié)點被再次訪問來獲取下一個索引條目的行地址,然后通過相同的過程確定需要預(yù)讀取的頁面。每次掃描請求都重復(fù)同樣的過程,直到整個索引葉節(jié)點中的索引條目全部被讀出?;谶@樣的機(jī)制,通過每次請求,可以得到每次請求所需要的頁面的數(shù)量,所有的掃描請求次數(shù)所需的頁面的數(shù)量加起來即得到需要預(yù)讀取的頁面的數(shù)量。
若數(shù)據(jù)庫操作指令類型為日志掃描操作指令或事務(wù)回滾操作指令,步驟108中根據(jù)所述數(shù)據(jù)庫操作指令類型確定需要預(yù)讀取的頁面的數(shù)量的步驟具體包括:根據(jù)日志中所記錄的被修改的數(shù)據(jù)所在的頁面的數(shù)量,得到需要預(yù)讀取頁面的數(shù)量的初始值;當(dāng)所述初始值大于等于預(yù)設(shè)第一閾值時,將需要預(yù)讀取的頁面的數(shù)量確定為占初始值預(yù)設(shè)比例的頁面的數(shù)量;當(dāng)所述初始值小于所述預(yù)設(shè)第一閾值且大于預(yù)設(shè)第二閾值時,將需要預(yù)讀取的頁面的數(shù)量確定為所述初始值;當(dāng)所述初始值小于等于所述預(yù)設(shè)第二閾值時,將需要預(yù)讀取的頁面的數(shù)量確定為所述預(yù)設(shè)第二閾值。
具體地,通過日志中所記錄的中被修改的數(shù)據(jù)在的頁面的數(shù)量獲取需要預(yù)讀取的頁面的數(shù)量,其中,所述日志類型至少包括邏輯日志和物理日志。日志掃描和事務(wù)的回滾都需要讀取日志并根據(jù)日志中所涉及的需要讀取的頁面進(jìn)行恢復(fù)的,所以都可以通過日志中記錄的相關(guān)頁面獲得需要預(yù)讀取的頁面的數(shù)量。
在事務(wù)回滾時,首先要根據(jù)這個事務(wù)所涉及的數(shù)據(jù)對象獲取REDO(重做)和UNDO(撤銷)日志,這些日志中包含了需要REDO和UNDO的數(shù)據(jù)和數(shù)據(jù)所在的頁面的地址,通過讀取這些頁面就得到了需要REDO和UNDO的頁面,而這些數(shù)據(jù)所在的頁面的數(shù)量就是需要預(yù)讀取的頁面的數(shù)量的初始值。
如果存在多個需要回滾的事務(wù),則將每個事務(wù)所需要預(yù)讀取的頁面的數(shù)量求和即得到需要預(yù)讀取的頁面的數(shù)量的初始值。
每個事務(wù)中需要REDO和UNDO的頁面通常都要跨越多個連續(xù)頁面。若需要預(yù)讀取的頁面的數(shù)量的初始值大于或等于預(yù)設(shè)第一閾值,則取所述初始值的預(yù)設(shè)比例的頁面數(shù)量作為需要預(yù)讀取的頁面的數(shù)量;若所述初始值小于預(yù)設(shè)第一閾值且大于預(yù)設(shè)第二閾值時,則取所述初始值作為需要預(yù)讀取的頁面數(shù)量;若所述初始值小于等于預(yù)設(shè)第二閾值,則需要預(yù)讀取的頁面的數(shù)量確定為預(yù)設(shè)第二閾值。
在本發(fā)明的一個實施例中,可以設(shè)置預(yù)設(shè)第一閾值為80,設(shè)置預(yù)設(shè)第二閾值為8,設(shè)置預(yù)設(shè)比例為20%。其中,預(yù)設(shè)第一閾值的默認(rèn)值一般為80個頁面,預(yù)設(shè)第一閾值取值范圍通常不超過100個頁面。具體地,需要預(yù)讀取的頁面的數(shù)量的初始值大于等于預(yù)設(shè)第一閾值(例如80),可以取初始值的預(yù)設(shè)比例(例如20%)作為需要預(yù)讀取的頁面的數(shù)量;需要預(yù)讀取的頁面的數(shù)量的初始值大于預(yù)設(shè)第二閾值(例如8)且小于預(yù)設(shè)第一閾值(例如80)時,則取初始值作為需要預(yù)讀取的頁面數(shù)量;需要預(yù)讀取的頁面的數(shù)量的初始值小于預(yù)設(shè)第二閾值(例如8)時,則需要預(yù)讀取的頁面數(shù)量為8。
在日志掃描操作指令中,計算需要預(yù)讀取的頁面的數(shù)量的方法也如上所述。
進(jìn)一步地,在獲取了需要預(yù)讀取的頁面的數(shù)量之后,即可以進(jìn)行預(yù)讀取。為了進(jìn)一步提高效率,在預(yù)讀取準(zhǔn)備階段還引入了對需要預(yù)讀取的頁面的進(jìn)行排序。如圖3所示,提供了對需要預(yù)讀取的頁面排序分組的流程示意圖。具體步驟如下:
步驟202:對所述需要預(yù)讀取的頁面的物理地址排序。
需要預(yù)讀取的頁面的物理地址是無序的,此時如果直接進(jìn)行讀取則會使磁頭在磁盤上的方向不確定,即某一時刻逆時針轉(zhuǎn)動而下一時刻又順時針轉(zhuǎn)動,這樣會降低讀取的效率。所以對需要預(yù)讀取的頁面的物理地址進(jìn)行排序,得到按照物理地址大小排列的順序物理地址序列。此時再進(jìn)行讀取,則可以保證磁盤頭在讀取時朝統(tǒng)一方向轉(zhuǎn)動,順序讀取。其中,排序方法可以是任意排序方法,包括但不限于快速排序、冒泡排序、插入排序、選擇排序等。
步驟204:根據(jù)排序結(jié)果和需要預(yù)讀取的頁面的數(shù)量,分組讀取需要預(yù)讀取的頁面到頁面緩沖池中。
在進(jìn)行預(yù)讀取時,每個輸入輸出操作都讀取一組頁面,所以需要對預(yù)讀取后的頁面按照物理地址進(jìn)行分組。比如,排序后的物理地址序列中含有30個地址,則可以將其分組為每10個一組的三組頁面,然后在執(zhí)行輸入輸出操作時每次讀取一組。應(yīng)當(dāng)理解,本實施例中的分組方法僅為一種,其他分組方法均可用于對頁面按照物理地址進(jìn)行分組。
另外,在步驟202之前,為了進(jìn)一步提高讀取效率,還可包括步驟:從已經(jīng)獲取的物理地址中剔除已經(jīng)在頁面緩沖池中的頁面的物理地址。
通常物理地址存儲在物理地址序列當(dāng)中。將已經(jīng)獲取的需要預(yù)讀取的頁面的物理地址序列中的物理地址與已經(jīng)在頁面緩沖池中的頁面的物理地址序列中的物理地址進(jìn)行比較,若有相等的地址,則將此地址從已經(jīng)獲取的需要預(yù)讀取的頁面的物理地址序列中刪除。將所有地址都比較完之后,即得到了經(jīng)過剔除后的需要預(yù)讀取的頁面的物理地址。
在對需要于讀取的頁面分組之后,根據(jù)之前確定的需要預(yù)讀取的頁面的數(shù)量,生成工作線程并行執(zhí)行預(yù)讀取頁面的操作。
請一并參閱圖4,圖4為一個實施例中磁盤頁面的讀取裝置。所述裝置包括:指令接收模塊1010,頁面查找模塊1020,指令類型判斷模塊1030,頁面數(shù)量確定模塊1040和頁面讀取模塊1050。
其中,指令接收模塊1010,用于接收數(shù)據(jù)庫操作指令,對頁面進(jìn)行操作,比如修改頁面上的數(shù)據(jù)或者僅是讀取頁面上的數(shù)據(jù)。
頁面查找模塊1020,用于從頁面緩沖池中查找所述數(shù)據(jù)庫操作指令所需的頁面,對數(shù)據(jù)進(jìn)行操作,則需要在頁面緩沖池中查找指令接收模塊1010中所述指令所需的頁面。
指令類型判斷模塊1030,用于若未在頁面緩沖池中查找到所述頁面,則判斷所述數(shù)據(jù)庫操作指令類型是否屬于預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合。
在頁面緩沖池中未查找到所需的頁面時,指令類型判斷模塊1030則根據(jù)所述數(shù)據(jù)庫操作指令類型,判斷是否需要從磁盤中讀取此頁面到頁面緩沖池中從而得到所需頁面。通過將數(shù)據(jù)庫操作指令類型與預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合中的數(shù)據(jù)庫操作指令進(jìn)行比較,判斷是否屬于預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合。
頁面數(shù)量確定模塊1040,用于若所述數(shù)據(jù)庫操作指令類型屬于預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合,則根據(jù)數(shù)據(jù)庫操作指令類型確定需要預(yù)讀取的頁面數(shù)量。
若所述數(shù)據(jù)庫操作指令類型屬于預(yù)設(shè)數(shù)據(jù)庫操作指令類型集合,則根據(jù)數(shù)據(jù)庫操作指令類型確定需要預(yù)讀取的頁面數(shù)量。針對不同的數(shù)據(jù)庫操作指令類型,可采取不同的計算方法進(jìn)行精確的估算,得到需要預(yù)讀取的頁面的數(shù)量。
頁面讀取模塊1050,用于根據(jù)需要預(yù)讀取的頁面的數(shù)量,從磁盤中讀取需要預(yù)讀取的頁面到頁面緩沖池中。
在確定了需要預(yù)讀取的頁面的數(shù)量之后,頁面讀取模塊1050生成工作線程并行執(zhí)行預(yù)讀取頁面的操作。
在一個實施例中,所述預(yù)設(shè)數(shù)據(jù)庫操作指令集合包括:全表掃描操作指令、全索引掃描操作指令、索引范圍掃描操作指令、索引葉節(jié)點掃描操作指令、日志掃描操作指令及事務(wù)回滾操作指令。
在一個實施例中,所述頁面讀取模塊1050還包括:
排序單元1050a,用于對所述需要預(yù)讀取的頁面的物理地址排序。排序單元1050a對需要預(yù)讀取的頁面的物理地址進(jìn)行排序,得到按照物理地址大小排列的順序物理地址序列。
讀取單元1050b,用于根據(jù)排序結(jié)果和需要預(yù)讀取的頁面的數(shù)量,分組讀取需要預(yù)讀取的頁面到頁面緩沖池中。在進(jìn)行預(yù)讀取時,讀取單元1050b根據(jù)排序結(jié)果分組讀取需要預(yù)讀取的頁面,需要預(yù)讀取的頁面的個數(shù)為步驟108中確定的需要預(yù)讀取的頁面的數(shù)量。
圖5為一個實施例中頁面數(shù)量確定模塊1040的結(jié)構(gòu)框圖。圖5將結(jié)合圖4進(jìn)行描述。
在一個實施例中,頁面數(shù)量確定模塊1040可包括:全掃描頁面數(shù)量確定單元1040a,用于若數(shù)據(jù)庫操作指令類型為全表掃描操作指令或全索引掃描操作指令,獲取全表掃描或全索引掃描所需掃描的表的總數(shù)據(jù)量;將表的總數(shù)據(jù)量中預(yù)設(shè)比例的數(shù)據(jù)量確定為所需讀取的數(shù)據(jù)量;根據(jù)所需讀取的數(shù)據(jù)量獲取需要預(yù)讀取的頁面的數(shù)量。
在一個實施例中,頁面數(shù)量確定模塊1040還可包括:索引掃描頁面數(shù)量確定單元1040b,用于若數(shù)據(jù)庫操作指令類型為索引范圍掃描操作指令或索引葉節(jié)點掃描操作指令,獲取索引范圍掃描或索引葉節(jié)點掃描的請求次數(shù);根據(jù)所述請求次數(shù)獲取需要預(yù)讀取的頁面的數(shù)量。在一個實施例中,頁面數(shù)量確定模塊1040還可包括:回滾頁面數(shù)量確定單元1040c,用于若數(shù)據(jù)庫操作指令類型為日志掃描操作指令或事務(wù)回滾操作指令,根據(jù)日志中所記錄的被修改的數(shù)據(jù)所在的頁面的數(shù)量,得到需要預(yù)讀取頁面的數(shù)量的初始值;當(dāng)所述初始值大于等于預(yù)設(shè)第一閾值時,所述回滾頁面數(shù)量確定單元將需要預(yù)讀取的頁面的數(shù)量確定為占初始值預(yù)設(shè)比例的頁面的數(shù)量;當(dāng)所述初始值小于預(yù)設(shè)第一閾值且大于預(yù)設(shè)第二閾值時,所述回滾頁面數(shù)量確定單元將需要預(yù)讀取的頁面的數(shù)量確定為所述初始值;當(dāng)所述初始值小于等于預(yù)設(shè)第二閾值時,所述回滾頁面數(shù)量確定單元將需要預(yù)讀取的頁面的數(shù)量確定為預(yù)設(shè)第二閾值。
本發(fā)明實施例提供的磁盤頁面的讀取裝置適用于上述任意實施例提供的磁盤頁面的讀取方法,具備相應(yīng)的功能和有益效果,在此不再贅述。
以上所述實施例的各技術(shù)特征可以進(jìn)行任意的組合,為使描述簡潔,未對上述實施例中的各個技術(shù)特征所有可能的組合都進(jìn)行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應(yīng)當(dāng)認(rèn)為是本說明書記載的范圍。
以上所述實施例僅表達(dá)了本發(fā)明的幾種實施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。