真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Oracle數(shù)據(jù)庫(kù)整理表碎片

表碎片的來源

成都創(chuàng)新互聯(lián)公司長(zhǎng)期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為克州企業(yè)提供專業(yè)的成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì),克州網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

當(dāng)針對(duì)一個(gè)表的刪除操作很多時(shí),表會(huì)產(chǎn)生大量碎片。刪除操作釋放的空間不會(huì)被插入操作立即重用,甚至永遠(yuǎn)也不會(huì)被重用。

怎樣確定是否有表碎片

--收集表統(tǒng)計(jì)信息

SQL> exec dbms_stats.gather_table_stats(ownname=>'SCHEMA_NAME',tabname=> 'TABLE_NAME');

[@more@]

--確定碎片程度

SQL>或者使用如下gist中的腳本找出某個(gè) Schema中表碎片超過25%的表。使用此腳本前,先確定 Schema中表統(tǒng)計(jì)信息收集完整。

SELECT table_name,

ROUND((blocks *8),2) "高水位空間 k",

ROUND((num_rows * avg_row_len /1024),2) "真實(shí)使用空間 k",

ROUND((blocks *10 /100) *8,2) "預(yù)留空間(pctfree) k",

ROUND((blocks *8 - (num_rows * avg_row_len /1024) -

blocks *8 *10 /100),

2) "浪費(fèi)空間 k"

FROM dba_tables

WHERE table_name ='BP_RESERVE_ORDERLIST';

--查看表上次收集統(tǒng)計(jì)信息時(shí)間

select table_name,last_analyzed from dba_tables where owner = 'SCHEMA_NAME'

--收集整個(gè) Schema中對(duì)象的統(tǒng)計(jì)信息

SQL> exec dbms_stats.gather_schema_stats(ownname=>'SCHEMA_NAME');

為什么要整理表碎片

Oracle對(duì)數(shù)據(jù)段的管理有一個(gè)高水位(HWM, High Water Mark)的概念。高水位是數(shù)據(jù)段中使用過和未使用過的數(shù)據(jù)塊的分界線。高水位以下的數(shù)據(jù)塊是曾使用過的,以上的是從未被使用或初始化過的。

當(dāng) Oracle進(jìn)行全表掃描(FTS, Full table scan)的操作時(shí),它會(huì)讀高水位下的所有數(shù)據(jù)塊。如果高水位下還有很多空閑空間(碎片),讀取這些空閑數(shù)據(jù)塊會(huì)降低操作的性能。

行鏈接和行遷移

  • 行鏈接 Row Chaining:當(dāng)插入數(shù)據(jù)量大的行的,如果一個(gè)Block不能存放一條記錄,該記錄的一部分會(huì)存儲(chǔ)到同個(gè)Extent中的其他Block,這些block形成一個(gè)數(shù)據(jù)塊鏈。
  • 行遷移 Row Migration:當(dāng)Update的時(shí)候?qū)е掠涗涢L(zhǎng)度增加了,存儲(chǔ)的Block已經(jīng)滿了,就會(huì)發(fā)生行遷移。Oracle會(huì)遷移整行數(shù)據(jù)到一個(gè)能夠存儲(chǔ)下整行數(shù)據(jù)的Block中,遷移的原始指針指向新的存放行數(shù)據(jù)的Block,ROWID不變。

當(dāng)數(shù)據(jù)行發(fā)生鏈接(chain)或遷移(migrate)時(shí),對(duì)其訪問將會(huì)造成 I/O性能降低,因?yàn)镺racle為獲取這些數(shù)據(jù)行的數(shù)據(jù),必須訪問更多的數(shù)據(jù)塊(data block)。

表碎片導(dǎo)致的問題

  • 查詢響應(yīng)時(shí)間(尤其是全表掃描)變慢
  • 產(chǎn)生大量行遷移
  • 浪費(fèi)空間

整理表碎片對(duì)基于索引的查詢不會(huì)有太大性能提升。

如何整理表碎片

10g之前

兩種方法:

  • 導(dǎo)出表,刪除表,再導(dǎo)入表
  • alter table move

一般選擇第二種,需要重建索引。

10g后

從 10g開始,提供一個(gè) shrink命令,需要表空間是基于自動(dòng)段管理的。

可以分成兩步操作:

--整理表,不影響DML操作

SQL> alter table TABLE_NAME shrink space compact;

--重置高水位,此時(shí)不能有DML操作

SQL> alter table TABLE_NAME shrink space;

也可以一步到位:

--整理表,并重置高水位

SQL> alter table TABLE_NAME shrink space;

shrink 的優(yōu)勢(shì):

  • 不需要重建索引。
  • 可以在線操作。
不需要空閑空間,alter move需要跟當(dāng)前表一樣大小的空閑空間。
網(wǎng)站名稱:Oracle數(shù)據(jù)庫(kù)整理表碎片
文章起源:http://weahome.cn/article/jssjio.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部