什麼是內部碎片?什麼是外部碎片?各種儲存管理中都可能產生何種

時間 2021-10-18 20:59:18

1樓:一灘新約

1.內部碎片:

當一個程序裝入到固定大小的分割槽塊(比如頁)時,假如程序所需空間小於分割槽塊,則分割槽塊的剩餘的空間將無法被系統使用,稱為內部碎片。

2.外部碎片:

指的是還沒有被分配出去(不屬於任何程序),但由於太小了無法分配給申請記憶體空間的新程序的記憶體空閒區域。

3.儲存管理中都可能產生的碎片:

除了內部碎片和外部碎片,在“分頁儲存”中,可能產生“頁內碎片”,頁內碎片是由於程序的最後一頁經常裝不滿一塊而形成了不可利用的碎片。

擴充套件資料

在資料儲存領域中,碎片(fragmentation)是指儲存空間使用效率低下,結果導致功能、執行效率變低或二者兼而有之的現象。碎片化所造成的影響取決於具體的儲存系統以及碎片化的種類。

大部分情況下,碎片化都會導致都會導致儲存空間的浪費,此時“碎片”一詞亦可指代閒置的空間本身。對於其他的一些系統來說(比如fat檔案系統),資料量一定的前提下,用於儲存資料所佔的儲存空間是一定的,和碎片化的程度無關。

2樓:黑夜中的風

內部碎片_(在資料頁內部)產生的碎片

外部碎片_(在資料頁外部)產生的碎片

在這裡,假設群集索引中的碎片會導致所有其他索引中產生碎片,因為群集索引(cluster index)被作為“群集關鍵字(cluster key)”與所有其他的在其上構造的非群集索引(non-clustered index)一起使用。我使用帶有tablesresult子句的dbcc showcontig語句來查詢產生的結果表,以列出所有包含內部碎片或者外部碎片的表的名字,其中內部碎片低於一個給定的可接受的掃描密度百分比,外部碎片大於一個給定的外部碎片百分比。

對於像sybase這樣的大型dbms系統而言,作為oltp(聯機事務處理)應用的基石,它需要能每天24小時,每年365天不間斷執行。由於其應用程式每天對資料庫進行大量的插入、更新、刪除等操作,在資料庫的物理儲存介質上產生了大量儲存碎片,從而影響了儲存的效率以及資料庫應用執行的速度。是否可以像windows作業系統的“碎片整理”程式一樣,整理這些碎片,從而優化資料庫儲存,提高資料庫的執行速度呢?

答案是肯定的。本文將介紹sybase資料庫的碎片型別以及碎片整理方法。

碎片型別

由於sybase是通過oam頁、分配單元和擴充套件頁來管理資料的,所以對oltp應用的database server會十分頻繁地進行資料刪除、插入和更新等操作,時間一長就會出現以下幾種情況:

1. 頁碎片

即本來可以存放在一個頁上的資料卻分散地儲存在多個頁上。如果這些頁儲存在不同的擴充套件單元上,database server就要訪問多個擴充套件單元,因此降低了系統效能。

2. 擴充套件單元碎片

在堆表中,當刪除資料鏈中間的記錄行時,會出現空頁。隨著空頁的累積,擴充套件單元的利用率也會下降,從而出現擴充套件單元碎片。帶cluster index的table也有可能出現擴充套件單元碎片。

當有擴充套件單元碎片存在,會出現以下問題:

對錶進行處理時,常常出現死鎖;

利用較大的i/o操作或增加i/o緩衝區的大小也無法改變較慢的i/o速度;

行操作的爭用。

3. 擴充套件單元遍歷

帶有cluster index的table會由於插入記錄而導致頁**,但當刪除記錄後,頁會獲得釋放,從而形成跨幾個擴充套件單元和分配單元的資料,而要訪問該資料就必須遍歷幾個擴充套件單元和分配單元。這將導致訪問/查詢記錄的時間大大延長,開始時資料庫的效能雖然較高,但使用一段時間後效能就會下降等問題。

實際上,資料在儲存空間上排列得越緊密有序,database server訪問的速度就越快,消除碎片有助於提高系統的效能和更有效地利用資料儲存空間。

碎片優化方法

處理碎片有多種方法,如重新定義table的填充因子,根據table的定義刪除並重新建立索引、重建表等。

本文給出的方法是通過bcp實用程式將使用者資料庫的資料以文字形式匯出,然後將使用者資料庫徹底清空、截斷,再將文字資料匯入到資料庫,從而達到消除碎片的目的,具有通用性。

下面以sun solaris 7作業系統下的sybase adaptive server enterprise 11.5為例,說明整理資料庫資料的具體方法。

1. 備份資料庫

為防止在資料庫碎片整理過程**現不可預見的問題,有必要先備份資料庫。

2. 建立bcp out指令碼並匯出資料

建立包含下列sql語句的檔案:

cre_bcp_out.sql

select “bcp” + name + “out ./” + name + “_out.txt -udboname -pdbopwd -ssys_name -c”

from sysobjects where type = ‘u’

order by name

goisql -udboname -pdbopwd -ssystemname < cre_bcp_out. sql > b_out

編輯輸出檔案,去掉檔案第一行和最後兩行無關的字元:vi b_out

執行指令碼,將資料庫的資料匯出到文字檔案:sh b_out

3. 建立truncate table指令碼並截斷資料庫

建立包含下列sql語句的檔案:

cre_trunc_out.sql

select “truncate table” + name from sysobjects where type = ‘u’

order by name

goisql -udboname -pdbopwd -ssystemname < cre_ trunc_out. sql > trunc_out. sql

編輯輸出檔案,去掉檔案第一行和最後兩行無關的字元,並在最後一行加入 go構成完整的sql語句:vi trunc_out

執行以下語句,清空資料庫的資料:

isql -udboname -pdbopwd < trunc_out. sql

4. 建立bcp in指令碼並匯入資料

建立包含下列sql語句的檔案:

cre_bcp_in. sql

select “bcp” + name + “in ./” + name + “_out.txt -udboname -pdbopwd -ssys_name -c”from sysobjects where type = ‘u’

order by name

goisql -udboname -pdbopwd -ssystemname < cre_ bcp_in. sql > b_in

編輯輸出檔案,去掉檔案第一行和最後兩行無關的字元:vi b_in

從文字中匯入資料:sh b_in

5. 更新資料庫狀態

sybase不自動維護索引的統計資訊,當用truncate table截斷資料庫時,索引並沒有改變,所以必須用update statistics來確保索引的統計資訊對應當前表資料的統計。

建立包含下列sql語句的檔案:

cre_upd_st. sql

select “update statistics” + name from sysobjects where type = “u” order by name

goisql -udboname -pdbopasswd -ssystemname < cre_upd_st. sql > upd_st. sql

編輯輸出檔案,去掉檔案第一行和最後兩行無關的字元,在最後一行加入 go構成完整的sql語句:

vi upd_st. sql

更新資料庫狀態:

isql -udboname -pdbopasswd -ssystemname < upd_st. sql

至此,基本上完成了資料庫使用者表的碎片整理工作。

小 結在整理過程中,有以下兩點需要注意:

1. tempdb的大小

當sybase執行bcp in指令碼時,會佔用匯入資料2倍的tempdb空間,因此在執行前要仔細估計最大的table的大小,保證有足夠的tempdb空間。當空間不夠時,要考慮用分割table或刪除陳舊資料的方法縮小table的大小,或者考慮增加tempdb的大小。

2. 資料庫配置選項的設定

當資料庫執行bcp in指令碼時會產生大量的log,為保證bcp in程序不致因為log溢位而中斷,應該設定database的選項“truncate log on chkpt”為“true”。

雖然sybase資料庫是自優化的,但只要資料庫是動態的,資料庫碎片現象就會存在。在oltp應用的場合,隨著資料的不斷增大,系統變得越來越緩慢,並且經常出現死鎖時,應該檢查資料庫的碎片,並且採用以上方法進行優化。

實際上,應該定期做資料庫的碎片整理,保證資料庫的物理儲存經常處於最優狀態,相對於增加硬體而言,這是一種更好的保持資料庫效能的低成本的途徑。

3樓:匿名使用者

所謂“內部碎片”,是指系統已經分配給使用者使用、使用者自己沒有用到的那部分儲存空間;

所謂“外部碎片”,是指系統無法把它分配出去供使用者使用的那部分儲存空間。

對於教材而言,單一連續區儲存管理、固定分割槽儲存管理、分頁式儲存管理和請求頁式儲存管理都會出現內部碎片。只是前兩種儲存管理造成的內部碎片比較大,浪費較為嚴重;後兩種頁式儲存管理,平均來說每個作業都會出現半頁的內部碎片。教材中,只有可變分割槽儲存管理會產生外部碎片。

什麼是磁碟碎片 磁碟碎片是怎麼產生的?

磁碟碎片是怎麼產生的?1 當應用程式所需的物理記憶體不足時,一般作業系統會在硬碟中產生臨時交換檔案,用該檔案所占用的硬碟空間虛擬成記憶體。虛擬記憶體管理程式會對硬碟頻繁讀寫,產生大量的碎片。2 當中間的乙個簇 由扇區組成 內容被刪除後,新寫入乙個較小的檔案,這樣在這個檔案兩邊就會出現一些空間,這時候...

碎片是什麼 應該怎麼清理,磁碟碎片怎麼清理

windows系統的所有版本裡,都有乙個 磁碟碎片整理程式 都在 程式 附件 系統工具 下,執行這個命令時,硬碟將會大量的進行讀寫操作,將大量的分散檔案放在磁碟的最末尾,再寫入與其聯絡的檔案中,最終,使得磁碟裡基本沒有分散的檔案,這樣,對系統的執行速度將會有明顯的提公升!所以,每個磁碟的剩餘空間不能...

天天酷跑火雞精靈碎片集滿下碎片是什麼

你約電影 樓主,火雞精靈到手以後,再給的仍然是火雞碎片,你可以用碎片兌換成積分,一個碎片可以兌換八十八積分,希望我的回答對你有所幫助!天天酷跑翻牌火雞碎片集滿後是什麼碎片 在天生橋地質考察的墨蘭 你好 天天酷跑這個遊戲你說的活動下架了,火雞碎片十個可以自動兌換到精靈感恩火雞,現在沒換到的也就換不到了...