tempdb:tempdb(谨以此篇拜个山头)


sybase临时数据库

缺省情况下,tempdb数据库是放置在master设备上,容量为2M,而临时数据库是活动最为平凡的数据库常常被用来排序、创建临时表、重格式化等操作,所以tempdb的优化应该受到特别的关注。本篇文章目的在于使你掌握临时数据库的优化策略以及临时表的优化使用。本文中,你将以调整临时库的位置开始,有步骤的完成临时数据库的优化,并在此过程中了解到优化临时数据库和临时表的一些方法和规则。
实验环境的要求:你应具有系统管理员的权限,系统中有auths和article表。
步骤:
第一步:调整临时库的位置
  tempdb数据库缺省放在master设备上,将临时数据库发在分离的设备上是更可取的。
1)初始化一个用来存放临时数据库的设备
diskinit
name="tempdb_dev",
physname="d:\\sybase\\example\\tempdb.dat",
vdevno=13,
size=15360
(注意:如果将tempdb数据库放在多个设备上,需初始化多个数据库设备)
2)将临时数据库扩展到该一个设备上
alterdatabasetempdbontempdb_dev=30
3)打开tempdb数据库,从段上删除master设备
sp_dropsegment"default",tempdb,master
sp_dropsegmentlogsegment,tempdb,master
4)发出如下命令,检查default段中是否不再包含master设备
selectdbid,name,segmapfromsysusages,sysdevices
wheresysdevices.low<=syusages.size+vstart
andsysdevices.high>=sysusages.size+vstart-1
anddbid=2
and(status=2orstatus=3)
说明:若将临时数据库放在多个磁盘设备上,可以更好的利用并行查询特性来提高查询性能。
第二步:将临时数据库与高速缓冲进行绑定。
  由于临时表的创建、使用,临时数据库会频繁地使用数据缓存,所以应为临时数据库创建高速缓存,从而可以使其常驻内存并有助于分散I/O:
1、创建命名高速缓存
sp_cacheconfig“tempdb_cache”,”10m”,”mixed”
2、重新启动server
3、捆绑临时数据库到tempdb_cache高速缓存
sp_bindcache“tempdb_cache”,tempdb
4、若有大的I/O,配置内存池
第三步:优化临时表
大多数临时表的使用是简单的,很少需要优化。但需要对临时表进行复杂的访问则
应通过使用多个过程或批处理来把表的创建和索引分开。以下两种技术可以改善临时表的优化
slash;在临时表上创建索引
1)临时表必须存在
2)统计页必须存在(即不能在空表上创建索引)
slash;把对临时表的复杂的使用分散到多个批处理或过程中,以便为优化器提供信息
下面的这个过程需要进行优化:
createprocbase_proc
as
select*into#huge_resultfromauths
select*fromarticle,#huge_resultwherearticle.author_code=
#huge_result.author_codeandsex=”0”
使用两个过程可以得到更好的性能
1)createprocbase_proc
as
select*
into#huge_result
fromauths
execselect_proc
2)createprocselect_proc
as
select*fromarticle,#huge_result
wherearticle.author_code=#huge_result.author_codeandsex=”0”
说明:在同一个存储过程或批处理中,创建并使用一个表时,查询优化器无法决定这个表的大小。
结论:通过本实验我们知道,临时数据库经过优化可以极大的提高系统性能。实际工作中,必须考虑具体应用的情况,需长时间经验的积累。


daisyqi 回复于:2002-06-14 10:33:33请教几个问题
1.可不可以不删除master中的tempdb,会有什么影响?
2.我在solaris7+sybase11中,有master中的tempdb和另建的50Mtempdb,后来发现不够用,又创建了1Gtempdb,没有绑定高速缓存.在系统忙时,并没有用上新建的1G,请问是否一定要绑定高速缓存?

arnold 回复于:2002-06-14 14:27:44好像你删不掉master中的tempdb,绑定高速缓存可以提高速度。

sxoyb 回复于:2002-06-14 16:25:31master数据库中得tempdb删不掉,只能改变存储设备得位置,直接加大并且绑定高速缓存!

daisyqi 回复于:2002-06-14 17:07:36那前面这一段
打开tempdb数据库,从段上删除master设备
sp_dropsegment"default",tempdb,master
sp_dropsegmentlogsegment,tempdb,master
不是删除master中的tempdb吗?

还有我想问为什么新加的1Gtempdb没有用上?谢谢

arnold 回复于:2002-06-14 20:32:08sp_dropsegment"default",tempdb,master执行不了,是错误的。

daisyqi 回复于:2002-06-17 10:44:45请问Arnold,既然
sp_dropsegment"default",tempdb,master执行不了,是错误的
那前面第一部分3)中,为什么要执行这个命令?

hou007 回复于:2002-06-25 17:10:46可以删除,用单用户启动数据库。

lwq 回复于:2002-12-16 09:57:47好像tempdb提示不能用单用户启动?

aladdin 回复于:2002-12-16 13:34:07好文章!完全可以参考

Tags:  tempdb数据库 sqltempdb tempdb.mdf tempdb

延伸阅读

最新评论

发表评论