IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁數(shù)據(jù)庫MYSQL → Sybase數(shù)據(jù)庫的碎片整理( arnold )

Sybase數(shù)據(jù)庫的碎片整理( arnold )

時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)

Sybase數(shù)據(jù)庫的碎片整理
對于像Sybase這樣的大型DBMS系統(tǒng)而言,作為OLTP(聯(lián)機(jī)事務(wù)處理)應(yīng)用的基石,它需要能每天24小時,每年365天不間斷運(yùn)行。由于其應(yīng)用程序每天對數(shù)據(jù)庫進(jìn)行大量的插入、更新、刪除等操作,在數(shù)據(jù)庫的物理存儲介質(zhì)上產(chǎn)生了大量存儲碎片,從而影響了存儲的效率以及數(shù)據(jù)庫應(yīng)用運(yùn)行的速度。是否可以像Windows操作系統(tǒng)的"碎片整理"程序一樣,整理這些碎片,從而優(yōu)化數(shù)據(jù)庫存儲,提高數(shù)據(jù)庫的運(yùn)行速度呢?答案是肯定的。本文將介紹Sybase數(shù)據(jù)庫的碎片類型以及碎片整理方法。
碎片類型
由于Sybase是通過OAM頁、分配單元和擴(kuò)展頁來管理數(shù)據(jù)的,所以對OLTP應(yīng)用的Database?Server會十分頻繁地進(jìn)行數(shù)據(jù)刪除、插入和更新等操作,時間一長就會出現(xiàn)以下幾種情況:
1.?頁碎片?
即本來可以存放在一個頁上的數(shù)據(jù)卻分散地存儲在多個頁上。如果這些頁存儲在不同的擴(kuò)展單元上,Database?Server就要訪問多個擴(kuò)展單元,因此降低了系統(tǒng)性能。?
2.?擴(kuò)展單元碎片
在堆表中,當(dāng)刪除數(shù)據(jù)鏈中間的記錄行時,會出現(xiàn)空頁。隨著空頁的累積,擴(kuò)展單元的利用率也會下降,從而出現(xiàn)擴(kuò)展單元碎片。帶cluster?index的table也有可能出現(xiàn)擴(kuò)展單元碎片。
當(dāng)有擴(kuò)展單元碎片存在,會出現(xiàn)以下問題:
●?對表進(jìn)行處理時,常常出現(xiàn)死鎖;
●?利用較大的I/O操作或增加I/O緩沖區(qū)的大小也無法改變較慢的I/O速度;
●?行操作的爭用。
3.?擴(kuò)展單元遍歷
帶有cluster?index的table會由于插入記錄而導(dǎo)致頁分裂,但當(dāng)刪除記錄后,頁會獲得釋放,從而形成跨幾個擴(kuò)展單元和分配單元的數(shù)據(jù),而要訪問該數(shù)據(jù)就必須遍歷幾個擴(kuò)展單元和分配單元。這將導(dǎo)致訪問/查詢記錄的時間大大延長,開始時數(shù)據(jù)庫的性能雖然較高,但使用一段時間后性能就會下降等問題。
實(shí)際上,數(shù)據(jù)在存儲空間上排列得越緊密有序,Database?Server訪問的速度就越快,消除碎片有助于提高系統(tǒng)的性能和更有效地利用數(shù)據(jù)存儲空間。
碎片優(yōu)化方法
處理碎片有多種方法,如重新定義table的填充因子,根據(jù)table的定義刪除并重新創(chuàng)建索引、重建表等。
本文給出的方法是通過BCP實(shí)用程序?qū)⒂脩魯?shù)據(jù)庫的數(shù)據(jù)以文本形式導(dǎo)出,然后將用戶數(shù)據(jù)庫徹底清空、截?cái)?,再將文本?shù)據(jù)導(dǎo)入到數(shù)據(jù)庫,從而達(dá)到消除碎片的目的,具有通用性。
下面以Sun?Solaris?7操作系統(tǒng)下的Sybase?Adaptive?Server?Enterprise?11.5為例,說明整理數(shù)據(jù)庫數(shù)據(jù)的具體方法。
1.?備份數(shù)據(jù)庫
為防止在數(shù)據(jù)庫碎片整理過程中出現(xiàn)不可預(yù)見的問題,有必要先備份數(shù)據(jù)庫。
2.?創(chuàng)建bcp?out腳本并導(dǎo)出數(shù)據(jù)
●?創(chuàng)建包含下列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
go
●?isql?-Udboname?-Pdbopwd?-Ssystemname??b_out
●?編輯輸出文件,去掉文件第一行和最后兩行無關(guān)的字符:vi?b_out
●?執(zhí)行腳本,將數(shù)據(jù)庫的數(shù)據(jù)導(dǎo)出到文本文件:sh?b_out?
3.?創(chuàng)建truncate?table腳本并截?cái)鄶?shù)據(jù)庫
●?創(chuàng)建包含下列SQL語句的文件:
cre_trunc_out.sql?
select?"truncate?table"?+?name?from?sysobjects?where?type?=?‘U’?
order?by?name
go
●?isql?-Udboname?-Pdbopwd?-Ssystemname??trunc_out.?sql
●?編輯輸出文件,去掉文件第一行和最后兩行無關(guān)的字符,并在最后一行加入?go構(gòu)成完整的SQL語句:vi?trunc_out
●?執(zhí)行以下語句,清空數(shù)據(jù)庫的數(shù)據(jù):
isql?-Udboname?-Pdbopwd?4.?創(chuàng)建bcp?in腳本并導(dǎo)入數(shù)據(jù)
●?創(chuàng)建包含下列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
go
●?isql?-Udboname?-Pdbopwd?-Ssystemname??b_in
●?編輯輸出文件,去掉文件第一行和最后兩行無關(guān)的字符:vi?b_in
●?從文本中導(dǎo)入數(shù)據(jù):sh?b_in
5.?更新數(shù)據(jù)庫狀態(tài)
Sybase不自動維護(hù)索引的統(tǒng)計(jì)信息,當(dāng)用truncate?table截?cái)鄶?shù)據(jù)庫時,索引并沒有改變,所以必須用update?statistics來確保索引的統(tǒng)計(jì)信息對應(yīng)當(dāng)前表數(shù)據(jù)的統(tǒng)計(jì)。
●?創(chuàng)建包含下列SQL語句的文件:
cre_upd_st.?sql
select?"update?statistics"?+?name?from?sysobjects?where?type?=?"U"?order?by?name
go
●?isql?-Udboname?-Pdbopasswd?-Ssystemname??upd_st.?sql
●?編輯輸出文件,去掉文件第一行和最后兩行無關(guān)的字符,在最后一行加入?go構(gòu)成完整的SQL語句:
vi?upd_st.?sql
●?更新數(shù)據(jù)庫狀態(tài):
isql?-Udboname?-Pdbopasswd?-Ssystemname?至此,基本上完成了數(shù)據(jù)庫用戶表的碎片整理工作。
小?結(jié)
在整理過程中,有以下兩點(diǎn)需要注意:?
1.?Tempdb的大小
當(dāng)Sybase執(zhí)行bcp?in腳本時,會占用導(dǎo)入數(shù)據(jù)2倍的tempdb空間,因此在執(zhí)行前要仔細(xì)估計(jì)最大的table的大小,保證有足夠的tempdb空間。當(dāng)空間不夠時,要考慮用分割table或刪除陳舊數(shù)據(jù)的方法縮小table的大小,或者考慮增加tempdb的大小。
2.?數(shù)據(jù)庫配置選項(xiàng)的設(shè)置
當(dāng)數(shù)據(jù)庫執(zhí)行bcp?in腳本時會產(chǎn)生大量的log,為保證bcp?in進(jìn)程不致因?yàn)閘og溢出而中斷,應(yīng)該設(shè)置database的選項(xiàng)"truncate?log?on?chkpt"為"true"。
雖然Sybase數(shù)據(jù)庫是自優(yōu)化的,但只要數(shù)據(jù)庫是動態(tài)的,數(shù)據(jù)庫碎片現(xiàn)象就會存在。在OLTP應(yīng)用的場合,隨著數(shù)據(jù)的不斷增大,系統(tǒng)變得越來越緩慢,并且經(jīng)常出現(xiàn)死鎖時,應(yīng)該檢查數(shù)據(jù)庫的碎片,并且采用以上方法進(jìn)行優(yōu)化。
實(shí)際上,應(yīng)該定期做數(shù)據(jù)庫的碎片整理,保證數(shù)據(jù)庫的物理存儲經(jīng)常處于最優(yōu)狀態(tài),相對于增加硬件而言,這是一種更好的保持?jǐn)?shù)據(jù)庫性能的低成本的途徑。

關(guān)鍵詞標(biāo)簽:整理,碎片,數(shù)據(jù)庫;,數(shù)

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 Xbox Game Pass Xbox Game Pass 10款MySQL數(shù)據(jù)庫客戶端圖形界面管理工具推薦 10款MySQL數(shù)據(jù)庫客戶端圖形界面管理工具推薦 MySQL常用維護(hù)管理工具 MySQL常用維護(hù)管理工具 MySQL數(shù)據(jù)庫啟動失敗1067進(jìn)程意外終止的解決辦法總結(jié) MySQL數(shù)據(jù)庫啟動失敗1067進(jìn)程意外終止的解決辦法總結(jié)

相關(guān)下載

    人氣排行 10款MySQL數(shù)據(jù)庫客戶端圖形界面管理工具推薦 MySQL數(shù)據(jù)庫啟動失敗1067進(jìn)程意外終止的解決辦法總結(jié) Mysql 1045錯誤解決辦法 MySQL服務(wù)器進(jìn)程CPU占用100%解決辦法 MySQL導(dǎo)出導(dǎo)入命令的用例 MySQL連接字符串的實(shí)際操作步驟匯總 MySQL無法啟動、無法停止各種解決方法總結(jié) 三種常用的MySQL建表語句