本文中,你將以調整臨時庫的位置開始,有步驟的完成臨時數據庫的優化,並在此過程中了解到優化臨時數據庫和臨時表的一些方法和規則。 實驗環境的要求:你應具有系統管理員的權限,系統中有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”
說明:在同一個存儲過程或批處理中,創建並使用一個表時,查詢優化器無法決定這個表的大小。
結論:通過本實驗我們知道,臨時數據庫經過優化可以極大的提高系統性能。實際工作中,必須考慮具體應用的情況,需長時間經驗的積累。