Sybase自身调优
所有的数据库设备均使用direct IO。
锁级别
更改锁级别为 行锁。
alter table dbo.WFWorkItem lock datarows;
见数据库目录 表锁类型.sql。
注意,如果执行失败,可以通过更改数据库的属性来解决。
其他调优
见数据库 优化集合.sql
sp_configure "default network packet size", 10240 --默认网络包
sp_configure "max network packet size", 10240 --最大网络包
sp_configure "max memory",0,"6553M" --(设置为共享内存的75%,重启生效)
sp_configure "allocate max shared mem",1 --(启动的时候自动分配max memory指定的最大内存)
sp_cacheconfig "default data cache","3200m" --(设置数据缓存为max memory的一半)
sp_cacheconfig "default data cache","cache_partition=2" --(在SMP的环境中还有一个问题就是螺旋锁的竞争,当用sp_sysmon观察到资源缓存螺旋锁争夺超过10%时就需要分区。)
sp_poolconfig "default data cache","128m","16k" --(增加一个16K I/O缓存池,解决排序等大IO操作,需要在长期观察后才能使用性能最佳化.)
sp_configure "procedure cache size",102400 --(过程高速缓存,通常是Max mem20%,这里是200M)
sp_cacheconfig 'tempdb_cache','200m','mixed' --(创建一个200M命名高速缓存tempdb_cache给temdpb使用)
sp_bindcache 'tempdb_cache',tempdb --(将tempdb_cache绑定到tempdb)
--2、CPU(默认值为1)
--当服务器的CPU个数多于一个时,可以考虑多CPU进行并行处理。(并行查询、并行dbcc、并行建立索引、并行bcp)
--可根据实际CPU数来修改,若CPU>1时,一般设置为N-1。实际上OS会自动调度。
sp_configure "max online engines",8
sp_configure "number of engines at startup",8
sp_configure "number of worker processes",200 --(并行度*并发连接数*1.5倍)
sp_configure "max parallel degree",1 --(允许CPU并行)
--3、连接数(默认数为25,可根据应用需要来修改,连接数不宜太多
sp_configure "number of user connections",600
--4、锁
sp_configure "number of locks",100000
--5、索引对像
--数据库空闲状态下运行:sp_countmetadata "open indexes"
--正常运行时运行:sp_monitorconfig "open indexes"
--来确定一个最佳值,增加10%左右。
sp_configure "number of open indexes",20000
sp_configure "number of open objects",20000
sp_configure "number of open partitions",15000
--锁升级大小
sp_configure "page lock promotion HWM",10000
sp_configure "page lock promotion LWM",5000
sp_configure "row lock promotion HWM",10000
sp_configure "row lock promotion LWM",5000
库表调优
索引删除
删除无用索引:
在目前的用例中:
'WF_IDX_ACTINST_ACTDEFID'
'WF_IDX_ACTINST_PROCID'
'WF_IDX_H_ACTINST_ADEFID'
'WF_IDX_H_ACTINST_PROCID'
'WF_IDX_H_TRANC_PROCID'
'WF_IDX_H_TRANS_PROCID'
'WF_IDX_H_WI_ACTID'
'WF_IDX_H_WI_PROCID'
'WF_IDX_PART_GLOBALID'
'WF_IDX_PROCINST_PRODEFID'
'WF_IDX_TRANC_PROCID'
'WF_IDX_TRANS_PROCID'
'WF_IDX_WI_ACTID'
'WF_IDX_WI_PROCID'
'IDX_WFHWI_PARTIC'
'IDX_WFWI_PARTICI'
'PK_WF_H_WIParticipant'
使用最多的索引:
ObjectName,LogicalReads,PagesRead,UsedCount
'IDX_WFWI_4ABC',3018890,2000,201048
'WF_IDX_ACTINST_ACTDEFID',2562953,1010,0
'PK_WFACTIVITYINST',2543354,4,553495
'PK_WFWORKITEM',2519425,4,503057
'WF_IDX_WI_ACTID',2417832,4,0
'WF_IDX_WI_PROCID',2414082,4,0
'WF_IDX_ACTINST_PROCID',2324417,3,0
'PK_WFWIPARTICIPANT',1902591,3,301572
'IDX_WFWIPART_WIID',1714977,3,251310
'IDX_WFWI_PARTICI',1609752,457,0
其他的索引,基本可以删除,相机而删。
绑定缓存
sp_bindcache 'default data cache','bps','WFWorkItem'
sp_bindcache 'default data cache','bps','WFActivityInst'
sp_bindcache 'default data cache','bps','WFProcessInst'
sp_bindcache 'default data cache','bps','WFTransCtrl'
sp_bindcache 'default data cache','bps','ABC_LOAN_APPLY'
绑定default data cache 到 bps。这一部操作需要在master库中进行。
然后把default data cache 绑定到 对应的表。
增加索引
给wfworkItem增加索引:
USE bps
go
CREATE NONCLUSTERED INDEX IDX_LOAN_APPLY
ON dbo.ABC_LOAN_APPLY(APPLY_ID)
go
IF EXISTS (SELECT * FROM sysindexes WHERE id=OBJECT_ID('dbo.ABC_LOAN_APPLY') AND name='IDX_LOAN_APPLY')
PRINT '<<< CREATED INDEX dbo.ABC_LOAN_APPLY.IDX_LOAN_APPLY >>>'
ELSE
PRINT '<<< FAILED CREATING INDEX dbo.ABC_LOAN_APPLY.IDX_LOAN_APPLY >>>'
Go
此索引为查询待办使用。
以下操作在公司内部可以在控制台安装数据库时已经ok,所以没有使用。
把temp从master中剥离出来:
tempdb数据和日志分离:
USE master
Go
DISK INIT name = 'tempdbdev01', physname = '/opt/sybase/data/tempdbdev01.dat' , size = '1G',dsync = 'false'
Go
DISK INIT name = 'tempdblogdev01', physname = '/opt/sybase/data/tempdblogdev01.dat', size = '1G',dsync = 'false'
Go
ALTER DATABASE tempdb ON tempdbdev01 = '1G' LOG ON tempdblogdev01 = '1G'
Go
USE tempdb
Go
删除tempdb上使用的master段:
EXEC sp_dropsegment 'logsegment', 'tempdb', 'master'
go
EXEC sp_dropsegment 'system', 'tempdb', 'master'
go
EXEC sp_dropsegment 'default', 'tempdb', 'master'
Go
如果已针对 tempdb 建立了设备,则只需禁用 dsyncio,但需要重新启动 Adaptive Server:
EXEC sp_deviceattr 'tempdbdev01', 'dsync', 'false'
Go
EXEC sp_deviceattr 'tempdblogdev01', 'dsync','false'
Go