- 浏览: 1001487 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (529)
- 服务器 (8)
- jsp (1)
- java (6)
- AIX (1)
- solaris (3)
- linux学习 (53)
- javaScript (2)
- hibernate (1)
- 数据库 (74)
- sql语句 (8)
- oracle 学习 (75)
- oracle 案例 (42)
- oracle 管理 (42)
- Oracle RAC (27)
- oracle data guard (12)
- oracle 参数讲解 (14)
- Oracle 字符集 (8)
- oracle性能调优 (24)
- oracle备份与恢复 (12)
- oracle Tablespace (9)
- oracle性能诊断艺术 (1)
- oracle 11g学习 (5)
- oracle streams (1)
- oracle upgrade and downgrade (4)
- db2学习 (13)
- db2命令学习 (2)
- mysql (28)
- sql server (30)
- sql server 2008 (0)
- 工具 (10)
- 操作系统 (3)
- c++ (1)
- stock (1)
- 生活 (5)
- HADOOP (2)
最新评论
-
massjcy:
...
如何将ubuntu文件夹中文名改为英文 -
skypiea:
谢谢。。。
终于解决了。。。
Oracle 10.2.0.4(5)EM不能启动的解决方案(Patch 8350262) -
qwe_rt:
引用vi /etc/sysconfig/network 请问 ...
Linux操作系统下配置静态IP上网 -
liuqiang:
sudo killall -9 apache2
ps 和 kill 命令详解 -
dazuiba:
引用*绝杀 kill -9 PID 当使用此命令时,一定要通过 ...
ps 和 kill 命令详解
目前,Oracle已经广泛的应用于各个行业。作为一名DBA,及时发现并整理碎片已经成为DBA日常工作中的一项重要维护内容。
1、碎片是如何产生的
当生成一个数据库时,它会分成称为表空间(tablespace)的多个逻辑段(segment),如系统(system)表空间,临时(temporary)表空间等。一个表空间可以包含多个数据范围(extent)和一个或多个自由范围块,即自由空间(free space)。
表空间、段、范围、自由空间的逻辑关系如下:
当表空间中生成一个段时,将从表空间有效自由空间中为这个段的初始范围分配空间。在这些初始范围充满数据时,段会请求增加另一个范围。这样的扩展过程会一直继续下去,直到达到最大的范围值,或者在表空间中已经没有自由空间用于下一个范围。最理想的状态就是一个段的数据可被存在单一的一个范围中。这样,所有的数据存储时靠近段内其它数据,并且寻找数据可少用一些指针。但是一个段包含多个范围的情况是大量存在的,没有任何措施可以保证这些范围是相邻存储的,如图〈1〉。当要满足一个空间要求时,数据库不再合并相邻的自由范围(除非别无选择), 而是寻找表空间中最大的自由范围来使用。这样将逐渐形成越来越多的离散的、分隔的、较小的自由空间,即碎片。
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 enterprise linux 6.0 安装oracle 11g 所需要的包安装
2012-07-22 08:02 7620Linux 版本是Oracle enterprise ... -
Oracle10gR2 中 Oracle Wallet 的初步使用和维护
2011-06-02 01:59 19611) Wallet作用 从Oracle10gR2开始, 通过 ... -
如何手工删除oracle数据库和软件
2011-06-02 00:29 1427一、手工删库和数据库文件有时候,有可能在dbca图形界面中找不 ... -
AIX下设置Oracle10g随机启动,随机关闭的步骤
2011-06-02 00:19 1425假如ORACLE_HOME为/opt/app/oracle/p ... -
数据库突然无法登陆,只有sysdba可以
2011-05-20 18:05 1618数据库突然无法登陆,只有sysdba可以登陆。 检查aler ... -
Linux安装Oracle报Checking operating system version must be redhat-3, SuSE-9, redhat
2011-03-24 01:26 1887在Linux系统中安装oralce的过程中,如果Linux发行 ... -
How To Update NLS_SORT Parameter Value When Using 10g Thin JDBC Driver ? [ID 469
2010-12-17 10:05 2925Applies to: JDBC - Version: 1 ... -
使用SQL_TRACE进行数据库诊断(转自eygle)
2010-12-16 17:30 828SQL_TRACE是Oracle提供的用 ... -
oracle 查询时忽略大小写的方案研究
2010-12-15 02:00 2404项目已经开发完毕,由于业务变动,某些查询需要忽略大小写,研究是 ... -
Read By Other Session
2010-12-02 22:52 728Read By Other Session Definiti ... -
Wait Event: cache buffers chains
2010-11-30 15:58 1134cache buffers chains是相对比较常见的冲突事 ... -
log file sync(日志文件同步) 与 Log file parallel write 等待事件
2010-11-28 20:47 2113log file sync(日志文件同步)等待事件具有一个参数 ... -
删除Linux非rac环境下的ASM实例
2010-04-25 01:48 1987环境说明: 操作系统:CentOS 5 x86数据库:O ... -
扩大oracle最大session数以及清除inactive会话
2010-04-12 16:00 7279从上周起,服务器Oracle数据库出现问题,用不到半天,就会报 ... -
设计数据库时需要考虑的问题
2010-03-04 17:34 1505成功的管理系统=50% 的业务+(25%的数据库+25%的程序 ... -
介绍Oracle数据库锁的种类及研究
2009-12-02 09:30 1077本文通过对Oracle数据库锁机制的研究,首先介绍了Oracl ... -
expdp中使用连接字符串和network_link的区别
2009-12-01 11:47 1538expdp属于服务端工具,而exp属于客户端工具,expdp生 ... -
ora10G 使用数据泵(EXPDP和IMPDP)时应该注意的事项
2009-12-01 11:45 1223Oracle Database 10g引入了最新的数据泵(Da ... -
使用Oracle 10g数据泵(EXPDP/IMPDP)
2009-12-01 11:22 1998一、关于数据泵的概述 在Oracle 10 ... -
10g新特性之-expdp与传统exp的速度比较
2009-12-01 11:18 1275测试环境: System Configuration: Su ...
相关推荐
本书由多位工作在数据库维护一线的工程师合著而成,包含了精心挑选的数据库诊断案例与性能优化实践经验,内容涉及oracle典型错误的分析和诊断,各种sql优化方法(包括调整索引,处理表碎片,优化分页查询,改善执行...
本书由多位工作在数据库维护一线的工程师合著而成,包含了精心挑选的数据库诊断案例与性能优化实践经验,内容涉及Oracle典型错误的分析和诊断,各种SQL优化方法(包括调整索引,处理表碎片,优化分页查询,改善执行...
Oracle作爲一種大型資料庫,廣泛應用於金融、郵電、電力、民航等資料吞吐量巨大,電腦網路廣泛普及...作爲影響資料庫性能的一大因素--資料庫碎片,應當引起DBA的足夠重視,及時發現並整理碎片乃是DBA一項基本維護內容。
第一部分 数据库体系结构 第1章 Oracle体系结构 1 1.1 数据库概述及实例 1 1.2 数据库 1 1.2.1 表空间 2 1.2.2 文件 2 1.3 实例 3 1.4 数据库内部结构 3 1.4.1 表、列和数据类型 4 1.4.2 约束条件 5 1.4.3 抽象数据...
4.10 为什么必须保护 ORACLE_HOME 4.11 保护操作系统 4.12 如何保护回退段 4.13 分类和划分数据 4.14 划分表空间的优先次序 4.15 如何配置高可用性的 TEMP 表空间 4.16 确保在归档日志目标位置有足够的 可用...
本书由多位工作在数据库维护一线的工程师合著而成,包含了精心挑选的数据库诊断案例与性能优化实践经验,内容涉及Oracle典型错误的分析和诊断,各种SQL优化方法(包括调整索引,处理表碎片,优化分页查询,改善执行...
│ 05.Oracle数据库无响应故障的处理 │ 06.RAC环境诊断案例一则 ├─第三篇 SQL调优篇 │ 01.合理利用索引解决性能问题 │ 02.SQL优化与调整实践 │ 03.索引访问与数据读取 │ 04.SQL优化之Everything is possible ...
本书由多位工作在数据库维护一线的工程师合著而成,包含了精心挑选的数据库诊断案例与性能优化实践经验,内容涉及oracle典型错误的分析和诊断,各种sql优化方法(包括调整索引,处理表碎片,优化分页查询,改善执行...
本书由多位工作在数据库维护一线的工程师合著而成,包含了精心挑选的数据库诊断案例与性能优化实践经验,内容涉及oracle典型错误的分析和诊断,各种sql优化方法(包括调整索引,处理表碎片,优化分页查询,改善执行...
本书由多位工作在数据库维护一线的工程师合著而成,包含了精心挑选的数据库诊断案例与性能优化实践经验,内容涉及Oracle典型错误的分析和诊断,各种SQL优化方法(包括调整索引,处理表碎片,优化分页查询,改善执行...
本书由多位工作在数据库维护一线的工程师合著而成,包含了精心挑选的数据库诊断案例与性能优化实践经验,内容涉及oracle典型错误的分析和诊断,各种sql优化方法(包括调整索引,处理表碎片,优化分页查询,改善执行...
ORACLE数据库管理员应按如下方式对ORACLE数据库系统做定期监控: (1). 每天对ORACLE数据库的运行状态,日志文件,备份情况,数据 库的空间使用情况,系统资源的使用情况进行检查,发现并解决问题。 (2). 每周对数据库...
ORACLE数据库管理员应按如下方式对ORACLE数据库系统做定期监控: (1). 每天对ORACLE数据库的运行状态,日志文件,备份情况,数据 库的空间使用情况,系统资源的使用情况进行检查,发现并解决 问题。 (2). 每周对...
本书由多位工作在数据库维护一线的工程师合著而成,包含了精心挑选的数据库诊断案例与性能优化实践经验,内容涉及oracle典型错误的分析和诊断,各种sql优化方法(包括调整索引,处理表碎片,优化分页查询,改善执行...
本书由多位工作在数据库维护一线的工程师合著而成,包含了精心挑选的数据库诊断案例与性能优化实践经验,内容涉及Oracle典型错误的分析和诊断,各种SQL优化方法(如调整索引、处理表碎片、优化分页查询、改善执行...
2.2.1. ORACLE数据库管理员应按如下方式对ORACLE数据库系统做定期监控: 19 2.2.2. 每天的工作 20 2.2.3. 每周的工作 21 2.2.4. 每月的工作 22 DBA例行工作 22 2.3. 开发 DBA 工作 24 3. 操作系统和服务器硬件 25 ...
本书由多位工作在数据库维护一线的工程师合著而成,包含了精心挑选的数据库诊断案例与性能优化实践经验,内容涉及Oracle典型错误的分析和诊断,各种SQL优化方法(包括调整索引,处理表碎片,优化分页查询,改善执行...