2 數據庫配置的優化2.1 優化master數據庫首先加大master設備空間,初始默認為30M,加大為150M。然後加大master數據庫空間,默認數據段和日志段各為5M大小,建議改為數據段100M,日志段50M。
alter database master on master=95
2.2 優化tempdb數據庫首先創建tempdb設備,分配給tempdb數據庫,默認tempdb數據庫數據段和日志段各為2M大小,並創建在master設備上,建議改為數據段200M,日志段50M,創建在tempdb設備上。
alter database tempdb on tempdb=200
SQL SEVRER所有用戶都共享工作表和臨時表的tempdb數據庫,tempdb主要瓶頸是磁盤I/0。解決辦法是把tempdb放在更快的設備上。在UNIX環境中,把tempdb放在文件系統中而不用原始的設備。由於tempdb在創建數據時,自動在master設備上創建為2M的數據庫,為了減少沖突,最好的辦法是把tempdb從master設備中移走。為了達到上述目的,可采用如下辦法實現:
1:在單用戶狀態下啟動SQL Server
啟動單用戶方法:dataserver -dmaster.dat -m
2:以sa登錄
3:在文件系統中創建一個啞數據庫。
4:刪除sysusages和 sysdatabase表中對現有tempdb數據庫的引用
5:獲取啞數據庫的數據庫ID,相應修改sysusages和 ysdatabase表對tempdb的引用
6:重新啟動數據庫
以在newdevice中創建200M的tempdb數據庫為例,執行過程如下:
create database newtemp on newdevice=200
go
begin tran
go
delete sysusages where dbid = 2
delete sysdatabases where dbid = 2
go
select dbid from sysdatabases where name = ‘newtemp’
go
update sysusages set dbid = 2 where dbid=10
update sysdatabases set name=’tempdb’,dbid=2 where name=’newtemp’
go
select name,dbid, from sysdatabases where name = ‘tempdb’
select * from sysusages where dbid = 2
go
commit tran
go
這種方法只對tempdb有效,其他數據庫不能采用這種方法。因為在SQL Server啟動時,tempdb每次都重新初始化。
2.3 優化系統參數以下參數為標准建議值,可根據實際情況修改。
優化系統參數的SQL腳本 sp_configure 'total memory', 100000
優化數據庫的內存,應根據不同機器配置設置, 建議為一半的物理內存大小。以db_block為單位,即每個單位為2k,上例為200M,默認為24M.
sp_configure "lock scheme" , 1,"datarows" sp_configure "number of locks" , 10000
加大最大鎖進程數, 默認為5000。
(如果設置一個已經存在的表(tabel)的鎖方式為行鎖,則執行:
alter table table_name lock datarows)
sp_configure 'procedure cache percent' ,30
缺省值:20 建議值:procedure使用頻率高時采用較大的值,不超過30
sp_configure "number of user connections",100
最大用戶連接數,默認為25,每個連接要占70k內存
sp_configure 'number of devices',20
將最大設備文件數據改為15個
sp_configure ‘number of Open databases’,20
最大打開數據庫個數,對於需在一台數據庫服務上打個多個數據庫則需加大此參數,默認為15
Sp_configure ‘max online engines CPU’,2
缺省值:1 建議值:采用實際機器的CPU個數
Sp_configure ‘total data cache size’,60000
缺省值:0 建議值:使用SQL Server內存的30%
如果上述參數改動後Sybase啟動不正常,則可檢查SYBASE的錯誤日志,把Sybase.cfg中的相應選項修改為較小的值。
附:Sybase SQL Server 內存的分配
1. SQL Server 可執行代碼 3-4M
2. SQL Server 使用的靜態內存 2.2-3.25M
3. 用戶可配置的參數所占用內存,以下示例(11.9.2版):用戶連接數(user connections) 25 每個約70k
打開的數據庫數(open database) 12 每個約60k
打開的對象數(open objects) 500 每個約1k
打開的索引數(open indexs) 500 每個約1k
鎖數目(locks) 5000 每個約0.1k
數據庫設備數(data device) 10 每個約0.5k
4. 剩余部份分配給
過程緩存 ( 由 procedure cache percent 決定,默認值為 20% )
數據緩存 ( 默認值為減去1、2、3項的 80% )
2.4 優化數據庫系統屬性在Sybase center中選擇數據庫屬性,將屬性中options選項中的下列項目選中。
allow select into/bulk copy
truncate log on checkpoint
checkpoint on recovery
abort transction on full log
free space accounting
allow nulls by default
auto identity column in non-unquIE index
方法二:在SQLPLUS中執行下列SQL腳本
如:sp_dboption mydb,"abort tran on log full",true(設定當數據庫的日志空間滿時,就終止該進程,使用 sa 用戶)
sp_dboption mydb," select into/bulkcopy ",true
sp_dboption mydb," trunc log on chkpt ",true
sp_dboption mydb," no chkpt on recovery",true
sp_dboption mydb," no free space acctg ",true
sp_dboption mydb,"allow nulls by default",true
sp_dboption mydb," auto identity dbo use only ",true
2.5 創建阈值存儲過程可根據不同的應用修改以下腳本或創建多個阈值存儲過程,並在配置阈值時指定相應的存儲過程。
create procedure sp_thresholdaction
@dbname varchar(30),@segmentname varchar(30), @free_space int,@status int
as dump transaction @dbname with no_log
print "LOG DUMP: '%1!' for '%2!' dumped",@segmentname,@dbname
go
2.6 配置多個阈值方法一:
打開 Sybase Central,雙擊相應數據庫(database)的段 Segments -> logsegment,在 Thresholds 頁面中可設置自動清除日志的閥值。其中有 Last Chance 的一行是系統默認的最後機會閥值,即系統日志空閒空間小於該值時為最後一次自動清除日志的機會。設置時閥值的大小可設為日志總空間大小的20%左右。方法二:
1、使用如下指令查出數據庫中日志的容量(用頁表示)
select sum(size) from master..sysusages where dbid=db_id("database_name") and (segmap&4)=4
2、使用sp_addthreshold增加新的阈值,大小為日志容量的50%,如上面語句顯示值為2048
sp_addthreshold database_name,logsegment,1024,proc_dump_display
注意:因一個大事務時可能會越過當前的threshold,所以必須加多個threshold,
使用命令select @@thresh_hysteresis查看數據庫的滯後值,如結果為64頁,則下一個阈值設為"最近的阈值-(2*64)",請在所設阈值再按這種原則各增加兩個更小的阈值。