sybase数据库:Sybase数据库的碎片整理(人气不足,大家多发贴!)




Sybase数据库碎片整理

对于像Sybase这样大型DBMS系统而言作为OLTP(联机事务处理)应用基石它需要能每天24小时每年365天不间断运行由于其应用每天对数据库进行大量插入、更新、删除等操作在数据库物理存储介质上产生了大量存储碎片从而影响了存储效率以及数据库应用运行速度是否可以像Windows操作系统“碎片整理”整理这些碎片从而优化数据库存储提高数据库运行速度呢?答案是肯定本文将介绍Sybase数据库碎片类型以及碎片整理思路方法
碎片类型
由于Sybase是通过OAM页、分配单元和扩展页来管理数据所以对OLTP应用DatabaseServer会十分频繁地进行数据删除、插入和更新等操作时间长就会出现以下几种情况:
1.页碎片
即本来可以存放在个页上数据却分散地存储在多个页上如果这些页存储在区别扩展单元上DatabaseServer就要访问多个扩展单元因此降低了系统性能
2.扩展单元碎片
在堆表中当删除数据链中间记录行时会出现空页随着空页累积扩展单元利用率也会下降从而出现扩展单元碎片带clusterindextable也有可能出现扩展单元碎片
当有扩展单元碎片存在会出现以下问题:
●对表进行处理时常常出现死锁;
●利用较大I/O操作或增加I/O缓冲区大小也无法改变较慢I/O速度;
●行操作争用
3.扩展单元遍历
带有clusterindextable会由于插入记录而导致页分裂但当删除记录后页会获得释放从而形成跨几个扩展单元和分配单元数据而要访问该数据就必须遍历几个扩展单元和分配单元这将导致访问/查询记录时间大大延长开始时数据库性能虽然较高但使用段时间后性能就会下降等问题
实际上数据在存储空间上排列得越紧密有序DatabaseServer访问速度就越快消除碎片有助于提高系统性能和更有效地利用数据存储空间
碎片优化思路方法
处理碎片有多种思路方法如重新定义table填充因子根据table定义删除并重新创建索引、重建表等
本文给出思路方法是通过BCP实用将用户数据库数据以文本形式导出然后将用户数据库彻底清空、截断再将文本数据导入到数据库从而达到消除碎片具有通用性
下面以SunSolaris7操作系统下SybaseAdaptiveServerEnterprise11.5为例介绍说明整理数据库数据具体思路方法
1.备份数据库
为防止在数据库碎片整理过程中出现不可预见问题有必要先备份数据库
2.创建bcpout脚本并导出数据
●创建包含下列SQL语句文件:
cre_bcp_out.sql
select“bcp”+name+“out./”+name+“_out.txt-Udboname-Pdbopwd-Ssys_name-c”
fromsysobjectswheretype=‘U’
orderbyname
go
●isql-Udboname-Pdbopwd-Ssystemname<cre_bcp_out.sql>b_out
●编辑输出文件去掉文件第行和最后两行无关:vib_out
●执行脚本将数据库数据导出到文本文件:shb_out
3.创建truncatetable脚本并截断数据库
●创建包含下列SQL语句文件:
cre_trunc_out.sql
select“truncatetable”+namefromsysobjectswheretype=‘U’
orderbyname
go
●isql-Udboname-Pdbopwd-Ssystemname<cre_trunc_out.sql>trunc_out.sql
●编辑输出文件去掉文件第行和最后两行无关并在最后行加入go构成完整SQL语句:vitrunc_out
●执行以下语句清空数据库数据:
isql-Udboname-Pdbopwd<trunc_out.sql
4.创建bcpin脚本并导入数据
●创建包含下列SQL语句文件:
cre_bcp_in.sql
select“bcp”+name+“in./”+name+“_out.txt-Udboname-Pdbopwd-Ssys_name-c”fromsysobjectswheretype=‘U’
orderbyname
go
●isql-Udboname-Pdbopwd-Ssystemname<cre_bcp_in.sql>b_in
●编辑输出文件去掉文件第行和最后两行无关:vib_in
●从文本中导入数据:shb_in
5.更新数据库状态
Sybase不自动维护索引统计信息当用truncatetable截断数据库时索引并没有改变所以必须用updatestatistics来确保索引统计信息对应当前表数据统计
●创建包含下列SQL语句文件:
cre_upd_st.sql
select“updatestatistics”+namefromsysobjectswheretype=“U”orderbyname
go
●isql-Udboname-Pdbopasswd-Ssystemname<cre_upd_st.sql>upd_st.sql
●编辑输出文件去掉文件第行和最后两行无关在最后行加入go构成完整SQL语句:
viupd_st.sql
●更新数据库状态:
isql-Udboname-Pdbopasswd-Ssystemname<upd_st.sql
至此基本上完成了数据库用户表碎片整理工作
小结
在整理过程中有以下两点需要注意:
1.Tempdb大小
当Sybase执行bcpin脚本时会占用导入数据2倍tempdb空间因此在执行前要仔细估计最大table大小保证有足够tempdb空间当空间不够时要考虑用分割table或删除陈旧数据思路方法缩小table大小或者考虑增加tempdb大小


2.数据库配置选项设置
当数据库执行bcpin脚本时会产生大量log为保证bcpin进程不致log溢出而中断应该设置database选项“truncatelogonchkpt”为“true”
虽然Sybase数据库是自优化但只要数据库是动态数据库碎片现象就会存在在OLTP应用场合随着数据不断增大系统变得越来越缓慢并且经常出现死锁时应该检查数据库碎片并且采用以上思路方法进行优化
实际上应该定期做数据库碎片整理保证数据库物理存储经常处于最优状态相对于增加硬件而言这是种更好保持数据库性能低成本途径


genius1 回复于:2002-06-26 17:59:00itisverygood

luzx 回复于:2002-07-04 22:47:56能不能介绍下sybaseforwin2000该如何做此维护啊?谢谢哦!!!

最近感觉查询速度降低了是不是和碎片有关啊……

系统工程师 回复于:2002-07-05 00:59:57SYBASE有windows版吗?

guoyunzhi 回复于:2002-07-07 09:28:21太好了

richking 回复于:2002-07-19 13:49:56当然有阿

chenglima 回复于:2002-07-19 13:53:50正需要谢谢!

chuxu 回复于:2002-11-02 03:50:29reorgrebuild不就行了吗\" border=0>

edit 回复于:2002-11-02 11:23:59reorgrebuild好像是12开始才有

chuxu 回复于:2002-11-02 15:11:0111.9就有

过路客 回复于:2002-11-03 10:05:31好像对非聚类索引表加上个聚类索引再将聚类索引去掉也能达到碎片整理

threehair 回复于:2002-11-04 08:28:56我们采取办法般是:将变化比较大表drop再重新上
很有效

river23 回复于:2002-11-04 11:30:59reorgrebuild如何作

chuxu 回复于:2002-11-04 11:40:35dbo注册reorgrebuildtable_name


qhhoppk 回复于:2003-06-16 23:59:432.创建bcpout脚本并导出数据
●创建包含下列SQL语句文件:
cre_bcp_out.sql
select“bcp”+name+“out./”+name+“_out.txt-Udboname-Pdbopwd-Ssys_name-c”
fromsysobjectswheretype=‘U’
orderbyname
go
●isql-Udboname-Pdbopwd-Ssystemname<cre_bcp_out.sql>b_out
●编辑输出文件去掉文件第行和最后两行无关:vib_out
●执行脚本将数据库数据导出到文本文件:shb_out



大哥:在上边脚本中小弟有些东西请教

1name是否是数据库别名?还是固定格式
2-Udboname是固定格式还是saomaroot等等
3Ssystemname是什么东东

我菜我容易吗我~~~~~~~~~~~~~~~~~~~~

谢谢大家帮忙

qhhoppk 回复于:2003-06-17 00:02:45那位可以贴个检查数据库致性实列

最好全部

那位做完将报告截下来给我发[email protected]

谢谢大家帮忙

Kangoo 回复于:2003-08-21 08:53:36reorgrebuild是对于DOL表,对于APL表般只能用重新BCP方式和建聚族索引方式来消除碎片.

Tags:  sybase数据库乱码 sybase创建数据库 sybase数据库配置 sybase数据库

延伸阅读

最新评论

发表评论