问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

逐步讲解 Oracle数据库碎片如何整理

发布网友 发布时间:2022-04-29 21:46

我来回答

2个回答

懂视网 时间:2022-04-30 02:07

x1 as (select userid,startdate,coalesce(min(case when type=-1 then add_months(startdate,-1) else startdate end) over(partition by userid order by vid rows between 1 following and unbouded following),startdate+1) as minsdate, enddate as orgenddate, case when enddate is null and (lead(type) over(partition by userid order by vid))=-1 then add_months((lead(startdate) over(partition by userid order by vid)),-1) else enddate end as enddate,type,vid, max(vid) over(partition by userid) as max_id from test, x2 as (select userid,startdate,minsdate,enddate,type,vid,max_id, case when (lag(enddate) over(partition by userid order by vid))<add_months(startdate,-1) then 1 when (lag(type) over(partition by userid order by vid))=1 then null else 1 end as so from x1), x3 as (select userid,vid,max_id,type,sum(so) over(partition by userid order by vid) as so, startdate,minsdate, case when minsdate<enddate and minsdate>=startdate then minsdate else enddate end as enddate from x2 where type=1 and startdate<=minsdate), x4 as (select userid,max_id,max(vid) as max_id2,sum(type) as type, min(startdate) keep(dense_rank first order by vid) as startdate, max(enddate) keep(dense_rank last order by vid) as enddate from x3) select userid,to_char(startdate,‘yyyymm‘)||‘--‘||coalesce(to_char(enddate,‘yyyymm‘),‘NULL‘) as rangeSpace from x4 where (max_id=max_id2 or startdate<=enddate) and type>-1;

Oracle数据整理

标签:

热心网友 时间:2022-04-29 23:15

对于系统管理员来讲,如何保证网络稳定运行,如何提高数据库性能,使其更加安全高效,就显得尤为重要。作为影响数据库性能的一大因素 -- 数据库碎片,应当引起 DBA 的足够重视,及时发现并整理碎片乃是 DBA 一项基本维护内容。 1、碎片是如何产生的 当生成一个数据库时,它会分成称为表空间( Tablespace )的多个逻辑段( Segment ),如系统(System)表空间 , 临时(Temporary)表空间等。一个表空间可以包含多个数据范围(Extent)和一个或多个自由范围块,即自由空间(Free Space)。 表空间、段、范围、自由空间的逻辑关系如下: 当表空间中生成一个段时,将从表空间有效自由空间中为这个段的初始范围分配空间。在这些初始范围充满数据时,段会请求增加另一个范围。这样的扩展过程会一直继续下去,直到达到最大的范围值,或者在表空间中已经没有自由空间用于下一个范围。最理想的状态就是一个段的数据可被存在单一的一个范围中。这样,所有的数据存储时靠近段内其它数据,并且寻找数据可少用一些指针。但是一个段包含多个范围的情况是大量存在的,没有任何措施可以保证这些范围是相邻存储的,当要满足一个空间要求时,数据库不再合并相邻的自由范围(除非别无选择), 而是寻找表空间中最大的自由范围来使用。这样将逐渐形成越来越多的离散的、分隔的、较小的自由空间,即碎片。例如: 2、碎片对系统的影响 随着时间推移,基于数据库的应用系统的广泛使用,产生的碎片会越来越多,将对数据库有以下两点主要影响: 1)导致系统性能减弱。 如上所述,当要满足一个空间要求时,数据库将首先查找当前最大的自由范围,而 “最大”自由范围逐渐变小,要找到一个足够大的自由范围已变得越来越困难,从而导致表空间中的速度障碍,使数据库的空间分配愈发远离理想状态; 2)浪费大量的表空间。 尽管有一部分自由范围(如表空间的 pctincrease 为非 0 )将会被 SMON (系统监控)后台进程周期性地合并,但始终有一部分自由范围无法得以自动合并,浪费了大量的表空间。 3、自由范围的碎片计算 由于自由空间碎片是由几部分组成,如范围数量、最大范围尺寸等,我们可用 FSFI--Free Space Fragmentation Index (自由空间碎片索引)值来直观体现: FSFI=100*SQRT(max(extent)/sum(extents))*1/SQRT(SQRT(count(extents))) 可以看出, FSFI 的最大可能值为 100 (一个理想的单文件表空间)。随着范围的增加, FSFI 值缓慢下降,而随着最大范围尺寸的减少, FSFI 值会迅速下降。 下面的脚本可以用来计算 FSFI 值: 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;比如,在某数据库运行脚本 fsfi.sql, 得到以下 FSFI 值: 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统计出了数据库的 FSFI 值,就可以把它作为一个可比参数。在一个有着足够有效自由空间,且FSFI 值超过 30 的表空间中,很少会遇见有效自由空间的问题。当一个空间将要接近可比参数时,就需要做碎片整理了。 4、自由范围的碎片整理1)表空间的 pctincrease 值为非 0。 可以将表空间的缺省存储参数 pctincrease 改为非 0 。一般将其设为 1 ,如: alter tablespace temp default storage(pctincrease 1);这样SMON 便会将自由范围自动合并。也可以手工合并自由范围: alter tablespace temp coalesce。 5、段的碎片整理我们知道,段由范围组成。在有些情况下,有必要对段的碎片进行整理。要查看段的有关信息,可查看数据字典 dba_segments ,范围的信息可查看数据字典 dba_extents 。如果段的碎片过多, 将其数据压缩到一个范围的最简单方法便是用正确的存储参数将这个段重建,然后将旧表中的数据插入到新表,同时删除旧表。这个过程可以用 Import/Export (输入 / 输出)工具来完成。 Export ()命令有一个(压缩)标志,这个标志在读表时会引发 Export 确定该表所分配的物理空间量,它会向输出转储文件写入一个新的初始化存储参数 -- 等于全部所分配空间。若这个表关闭, 则使用 Import ()工具重新生成。这样,它的数据会放入一个新的、较大的初始段中。例如: exp user/password file=exp.dmp compress=Y grants=Y indexes=Y tables=(table1,table2);若输出成功,则从库中删除已输出的表,然后从输出转储文件中输入表: imp user/password file=exp.dmp commit=Y buffer=64000 full=Y 这种方法可用于整个数据库。 以上简单分析了 Oracle 数据库碎片的产生、计算方法及整理,仅供参考。数据库的性能优化是一项技术含量高,同时又需要有足够耐心、认真细致的工作。 对数据库碎片的一点探讨, 下面是一种如何自动处理表空间碎片的代码,希望对上大家看上文有用 Coalesce Tablespace Automatically This technique comes from Sandeep Naik, a database administrator for GSXXI, Inc. in New York City, New York Here is a handy script which can be scheled to automatically run and coalesces the tablespaces. This script is designed to run in NT but can be run in any operating system by slight modifications in the path where the file spools from the SQLPLUS environment. It assumes that the user who runs the script has priviledges to view the data dictionary. Start of code -------------------------------------- sqlplus / prompt this script will coalesce the tablespace automatically set verify off; set termout off; set head off; spool c: empcoalesce.log select alter tablespace ||TABLESPACE_NAME|| coalesce ; from DBA_FREE_SPACE_COALESCED where PERCENT_EXTENTS_COALESCED
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 000725京东方属于什么板块 京东方A是什么公司股票?京东方A年度业绩预告?京东方A股属于什么板块? DSFY 都市牧马人鼠标怎么拆 京东方A是什么板块的股票?京东方A股票业绩如何?京东方A到底属于哪个板块? b站超出当前可用分p视频数上限 微信群,群主能退出吗 &quot;守得云开见月明&quot;有没有上下句呀? 微信群主怎么退出 为什么腾讯会议输入正确手机号没有验证码? 腾讯会议为什么给我发验证码? 白果怎么个吃法啊! 白果怎样吃法? 海信智能电视,最近每次开机都跳出自动更新,关也关不了。设置中己取消自动更新。为何? 海信电视怎么不升级版本 教师资格证合格证怎么查询 海信电视提示系统智能升级,可是升级一直失败,应该怎么办? 认定工作已结束怎么查教师资格证是不是通过 海信电视打开屏幕上面显示系统升级勿断电源和不插入u盘然后又关机了怎 ... 海信电视连接的是网络电视看的时候出现系统升级版本怎么能消掉_百度知 ... 问哈海信电视屏幕显示升级系统怎么消除 京东方a是创业板还是中小板 你懂我懂你懂我下句 京东方A是什么类型的股票?京东方A三季度业绩大涨原因?京东方A是属于哪个行业? 京东方分布在哪些城市 你懂我的在乎,我懂你的无奈,足矣是什么意思? 你懂我的图谋不轨,我懂你的故作矜持广告语 realmebook有2021联想拯救者r7000强吗 我该怎么办啊(拜托各位耐心点看完) MATE20支持无线充电吗? 华润置地北京公司的具体地址 想知道: 福州市 福州华润燃气有限公司 在哪 有谁知道西安华润万家的总部在哪里啊 联系方式地点有没有 徐州华润电力有限公司的公司地址 你好,青岛华润置地公司具体地址在哪儿啊,还有可以给我你QQ号吗 六年级下册 作文——演讲稿《在小学毕业典礼上的讲话》(不要太好,也... 演讲稿作文怎么写六年级 六年级的作文演讲稿怎么写 你们知道六年级的演讲稿怎么写吗啊? 需要一篇小学演讲稿,我现在上六年级下册,快期末了,最好关于学习之类的。 快点啊!急!急!急! 适合六年级的演讲稿