Oracle 数据库碎片整理
我们知【wǒ men zhī】道【dào】🎭,oracle作为【wéi】一📫种大型⛹数据库【shù jù kù】👼,广泛应【guǎng fàn yīng】用于金㊗融、邮电😧、电力💈、民航等【děng】数【shù】据吞吐量【liàng】巨🍪大,计算机🌨网络广【wǎng luò guǎng】泛普及【fàn pǔ jí】♌的【de】重要【yào】部门🏒。对于系【duì yú xì】🌝统管理【tǒng guǎn lǐ】🕛员来讲【yuán lái jiǎng】,如【rú】💩何保证【hé bǎo zhèng】网络稳定运行,如何提【rú hé tí】🏻高数据【gāo shù jù】🅿库【kù】性能,使其更加【jiā】📱安全高效【xiào】,就显得😉尤为【wéi】重要【yào】。作为【wéi】影响🗨数据库【shù jù kù】👼性能的【xìng néng de】一大因素--数据库【shù jù kù】👼碎片【suì piàn】💊,应当引【yīng dāng yǐn】⛲起dba的【de】足够🚧重视,及时【shí】🐃 发现并【bìng】整理【zhěng lǐ】🕛碎片【suì piàn】💊乃是dba一项基🏅本维护【běn wéi hù】内容【nèi róng】。
---- 1、碎片【suì piàn】💊是如【rú】💩何产生的【de】🥧
---- 当生成一个🌃数据库【shù jù kù】👼时【shí】,它会分成称为【wéi】💞表空间【biǎo kōng jiān】🎄(tablespace)的多个【de duō gè】逻辑段【duàn】🕹(segment),如【rú】💩系统(system)表空间【biǎo kōng jiān】🎄,临时【shí】(temporary)表空间【biǎo kōng jiān】🎄等【děng】。一个表【yī gè biǎo】👎空间可【kōng jiān kě】以包含♐多个数【duō gè shù】据范【fàn】围【wéi】(extent)和一个🧚或多个自由范【zì yóu fàn】🌟围块【wéi kuài】,即自由【jí zì yóu】空【kōng】👿间【jiān】(free space)。
---- 表空间【biǎo kōng jiān】🎄、段【duàn】🍁、范【fàn】围【wéi】、自由空【kōng】👿间的逻【jiān de luó】🕍辑关系如【rú】下【xià】💽:
---- 当表【biǎo】空【kōng】📻间中生【jiān zhōng shēng】成一个🌃段【duàn】🍁时【shí】,将从表空间【biǎo kōng jiān】🎄有效自由【xiào zì yóu】🖊空间【kōng jiān】中为【wéi】这个👬段【duàn】🍁的【de】初始范【fàn】🗡围【wéi】分配空间【kōng jiān】。在这些🌲初始范【fàn】🗡围【wéi】充满🎓数【shù】据时【shí】,段【duàn】🍁会请求增加【jiā】📱另一个范【fàn】🚄围【wéi】。这样【zhè yàng】的【de】🥥扩展过【kuò zhǎn guò】⛹程会一【chéng huì yī】直继续下去【xià qù】,直到达【zhí dào dá】到最大【dào zuì dà】🐣的范围【de fàn wéi】值【zhí】,或者在表空间【biǎo kōng jiān】🎄中已经【zhōng yǐ jīng】没有自由空【kōng】👿间用于【jiān yòng yú】下【xià】📌一个范【fàn】🚄围【wéi】。最理【zuì lǐ】🕛想的【de】状态就是【tài jiù shì】一🖌个段【duàn】🍁的数据【de shù jù】可被存在单一的一个【de yī gè】范【fàn】🚄围【wéi】中 。这样【zhè yàng】🔟,所有的数据【de shù jù】存🥁储时【shí】靠近段【jìn duàn】🍁内其它数【shù】据,并且寻【bìng qiě xún】😱找数【shù】据🌝可少用【kě shǎo yòng】一些指针。但是一🔖个段【duàn】包👹含多个范【fàn】围【wéi】的【de】👩情况是【qíng kuàng shì】大量【liàng】存在的【de】,没有任何措施🎲可以保👱证这些范【fàn】围【wéi】是相邻存储的【de】,如图【rú tú】🈷〈1〉。当要【yào】满🔑足一个【zú yī gè】📸空间【kōng jiān】要【yào】🐓求时【shí】🚷,数据库【shù jù kù】👼不再合并相邻【bìng xiàng lín】的【de】自由💛范【fàn】围【wéi】(除非别😰无选择), 而【ér】是寻🚃找表【biǎo】空【kōng】🌈间【jiān】中最大【zuì dà】的【de】自由💛范围来【fàn wéi lái】使用【shǐ yòng】🗂。这样【zhè yàng】🔟将逐渐【jiāng zhú jiàn】形成越来越多的【de】离散的【de】、分隔的【de】🦎、较小的【jiào xiǎo de】自由💛空间【kōng jiān】,即碎片【suì piàn】💊。例如【lì rú】🐬:
---- 2、碎片【suì piàn】对🕧系统的【xì tǒng de】影响🗨
---- 随着时【shí】🎏间【jiān】推移📣,基于数据库【shù jù kù】👼的应用【de yīng yòng】系统的【xì tǒng de】广泛使用【shǐ yòng】,产生的【de】🥧碎片【suì piàn】💊会越来【huì yuè lái】越多,将对数据库【shù jù kù】👼有以下【xià】两点主要【yào】影响🗨:
---- (1)导致系统性能【tǒng xìng néng】减弱【jiǎn ruò】
---- 如【rú】💩上所述【shàng suǒ shù】,当要【yào】满🔑足一个【zú yī gè】📸空间【kōng jiān】要【yào】🐓求时【shí】🚷,数据库【shù jù kù】👼将首先🕣查找当【chá zhǎo dāng】前最大【zuì dà】😇的【de】自由💛范【fàn】围【wéi】,而【ér】🏭"最大【zuì dà】"自由范【zì yóu fàn】🌟围逐渐【wéi zhú jiàn】变小,要【yào】找到一个足够大的【de】自由💛范【fàn】围【wéi】已变得越来越困【lái yuè kùn】难,从而【ér】导😈致表空间【biǎo kōng jiān】🎄中的速【zhōng de sù】度障🚼碍【ài】⬜,使数据【shǐ shù jù】库【kù】👼的空间【de kōng jiān】分配愈发远离理【lǐ】🕛想状态【xiǎng zhuàng tài】;
---- (2)浪费大量的【dà liàng de】表【biǎo】👉空间【kōng jiān】
---- 尽管有一部分🦄自由范【zì yóu fàn】🌟围【wéi】(如【rú】表【biǎo】空【kōng】🐚间的【jiān de】🚩pctincrease为【wéi】非0)将会被【jiāng huì bèi】smon(系统监【xì tǒng jiān】控)后台进程周期性地合并【bìng】,但始终💃有一部分🦄自由范【zì yóu fàn】🌟围【wéi】无法得以自动合并【bìng】,浪费了大量的【dà liàng de】表【biǎo】👉空间【kōng jiān】。
---- 3、自由范【zì yóu fàn】🌟围【wéi】的【de】碎🎧片计算🏢
---- 由于自💦由空间【kōng jiān】碎片【suì piàn】💊是由几部📊分组成【zǔ chéng】🔍,如【rú】💩范【fàn】围【wéi】数【shù】量【liàng】、最大【zuì dà】范【fàn】围【wéi】尺寸🌷等【děng】,我们可用fsfi--free space fragmentation index(自由空【kōng】👿间碎片【jiān suì piàn】💊索引)值【zhí】来直观体现:
fsfi=100*sqrt(max(extent)/sum(extents))*1/sqrt(sqrt(count(extents)))
---- 可以看🌪出【chū】🚽,fsfi的【de】最大【zuì dà】可能值【kě néng zhí】为【wéi】100(一个理【lǐ】🕛想的【de】单文件表空间【biǎo kōng jiān】🎄)。随着范【fàn】👀围【wéi】的【de】增加【jiā】📱,fsfi值【zhí】缓慢下降【xià jiàng】,而【ér】🏭随着最【suí zhe zuì】大范【fàn】围【wéi】尺寸🌷的【de】减少,fsfi值【zhí】会迅速下降【xià jiàng】🈷。
---- 下【xià】面的【de】脚本可以用来计算fsfi值【zhí】:
rem fsfi value compute
rem fsfi.sql
column fsfi format 999,99
select tablespace_name,sqrt(max(blocks)/sum(blocks))*
(100/sqrt(sqrt(count(blocks)))) fsfi
from dba_free_space
group by tablespace_name order by 1;
spool fsfi.rep;
/
spool off;
---- 比如【rú】👀,在某数【zài mǒu shù】♒据库【jù kù】运🚲行脚本fsfi.sql,得到以【dé dào yǐ】下【xià】fsfi值【zhí】:
tablespace_name fsfi
------------------------------ -------
rbs 74.06
system 100.00
temp 22.82
tools 75.79
users 100.00
user_tools 100.00
ydcx_data 47.34
ydcx_idx 57.19
ydjf_data 33.80
ydjf_idx 75.55
---- 统计出【chū】🚽了数【shù】据📔库【kù】的【de】fsfi值【zhí】,就可以【jiù kě yǐ】把它作【bǎ tā zuò】为【wéi】一📫个可比参【cān】🖇数【shù】。在一个有着足够有效【xiào】😧自由空【kōng】👿间【jiān】,且💶fsfi值超过【zhí chāo guò】🌪30的表【de biǎo】空间【kōng jiān】🎄中,很少会【hěn shǎo huì】遇见有🕧效自由【xiào zì yóu】🖊空间【kōng jiān】的【de】🚩问题。当一个💾空间将【kōng jiān jiāng】要接近【yào jiē jìn】可比参【cān】🖇数【shù】时【shí】,就需要【yào】做碎片【suì piàn】💊整理【zhěng lǐ】了📤。
---- 4、自由范【zì yóu fàn】🌟围【wéi】的【de】碎🎧片整理【zhěng lǐ】🕛
---- (1)表空间【biǎo kōng jiān】🎄的【de】pctincrease值为非【zhí wéi fēi】0
---- 可以将【kě yǐ jiāng】🏬表空间【biǎo kōng jiān】🎄的【de】缺省🛬存储参【cān】数【shù】pctincrease改为【wéi】非0。一般将其设为【wéi】1,如【rú】💩:
alter tablespace temp
default storage(pctincrease 1);
---- 这样【zhè yàng】🔟smon便会将自由范【zì yóu fàn】🌟围【wéi】自动合并【bìng】。也可以手工合【shǒu gōng hé】并【bìng】自由范【zì yóu fàn】🌟围【wéi】:
alter tablespace temp coalesce;
---- 5、段【duàn】🍁的碎片【de suì piàn】💊整理【zhěng lǐ】🕛
---- 我们知【wǒ men zhī】道【dào】🎭,段【duàn】🍁由范【fàn】围【wéi】组成【zǔ chéng】。在有些✝情况下【xià】,有必要【yào】对段【duàn】🍁的碎片【de suì piàn】进😰行整理【zhěng lǐ】🕛。要【yào】查看段【duàn】🍁的有关【de yǒu guān】信息【xìn xī】📿,可查看数据字【shù jù zì】🍘典🕗dba_segments,范【fàn】围【wéi】的【de】👩信息【xìn xī】可查看数据字【shù jù zì】🍘典🕗dba_extents。如【rú】💩果段【duàn】🍁的碎片【de suì piàn】💊过多【guò duō】, 将其数【shù】💜据压缩【jù yā suō】🐩到一个范【fàn】🚄围【wéi】的【de】最简单方【jiǎn dān fāng】法便是【fǎ biàn shì】用正🚩确的存【què de cún】储参【cān】数【shù】将这个【jiāng zhè gè】段【duàn】🍁重建,然后将旧表【biǎo】中🍶的数据【de shù jù】插入到新表【biǎo】🏎,同时【shí】删🐒除旧表【chú jiù biǎo】。这个过程可以用import/export(输入【shū rù】/输出【chū】🚽)工具来【gōng jù lái】完成📕。
---- export()命令有一个(压缩)标志🥍,这个标志🥍在读表【zài dú biǎo】时【shí】会引发export确定该表【biǎo】所分配的【de】物理【lǐ】空间【kōng jiān】🧠量【liàng】,它会向输出【chū】转🛺储文件【chǔ wén jiàn】🍡写入一个【rù yī gè】新的【xīn de】✊初始化【chū shǐ huà】存储参【cān】数【shù】-- 等【děng】于全部所分【bù suǒ fèn】💖配空间【kōng jiān】。若这个【ruò zhè gè】表【biǎo】关闭🦂, 则使用【shǐ yòng】💲import()工具重🍬新生成。这样【zhè yàng】🔟,它的【de】数【shù】🍡据会放入一个【rù yī gè】新的【xīn de】✊、较大的【de】初始段【duàn】🍁中。例如【lì rú】🐬:
exp user/password file=exp.dmp compress=y grants=y indexes=y
tables=(table1,table2);
---- 若输出【chū】🚽成功【chéng gōng】💴,则从库【zé cóng kù】👌中删除【zhōng shān chú】🤣已输出【chū】🚽的表【de biǎo】,然后从输出【chū】转🛺储文件【chǔ wén jiàn】🍡中输入【zhōng shū rù】🍬表【biǎo】:
imp user/password file=exp.dmp commit=y buffer=64000 full=y
---- 这种方【zhè zhǒng fāng】法可用于整个💟数据库【shù jù kù】👼。
---- 以上简⛪单分【dān fèn】
关键词:Oracle,数据库【shù jù kù】👼,碎片【suì piàn】💊整理【zhěng lǐ】🕛
阅读本文后您有什么感想? 已有 人给出评价!
- 0
- 0
- 0
- 0
- 0
- 0