文档库 最新最全的文档下载
当前位置:文档库 › SYBASE_系统参数调整

SYBASE_系统参数调整

sybase性能优化个人随记
sybase 优化总结
===========================================================
一. SYBASE 系统参数调整
1.内存
LINUX操作系统内存调整:
/sbin/sysctl -w kernel.shmmax=3416386150
shmmax是最大共享内存段,假如服务器上没有别的应用并且使用raw device可以将此参数调整到物理内存的90%,如果使用file system device 的话相应调小,因为file system buffer需要开销内存!修改后重新启动系统。

sp_configure "max memory",1500000 重启生效(设置为共享内存的75%)
sp_configure "allocate max shared mem",1 启动的时候自动分配max memory指定的最大内存。(如果sybase是安装在windows上,在windows任务管理器里可以看到占用内存确实为3G)
sp_cacheconfig "default data cache","1500m" 设置数据缓存(设置为max memory的一半)
sp_cacheconfig "default data cache","cache_partition=2" 是CPU数量的倍数,对数据缓冲区分区
sp_poolconfig "default data cache","64m","16k" 设置16K 数据缓存
sp_poolconfig "default data cache","128m","8k" 设置8K 数据缓存
sp_configure "procedure cache size",90000 存储过程数据缓存
sp_cacheconfig 'tempdb_cache','200m','mixed' 创建命名高速缓存
sp_poolconfig tempdb_cache,'50M','16K' 可选:若有大的I/O,配置内存池
sp_bindcache 'tempdb_cache',tempdb 重启生效。捆绑临时数据库到tempdb_cache高速缓存

2.cpu
sp_configure "max online engines",2 设置使用的CPU数量
sp_configure "number of engines at startup",2 启动时使用CPU数量

3. 网络
sp_configure "default network packet size",2048 设置网络传送包的大小(重启动生效)
sp_configure "max network packet size",2048

4. 其他资源使用
sp_configure "number of locks",100000 锁使用数量
sp_configure "number of open indexes",5000 打开索引
sp_configure "number of open objects",5000 打开对象
sp_configure "number of user connections",1000 用户连接数
sp_configure "number of device",100 新建设备最大数量

二. sybase 设备调整
数据设备与日志设备必须分开,添加临时数据库设备
1. 数据设备
sp_deviceattr devname,"dsync",true
2. 日志设备
sp_deviceattr devname,"dsync",false
3. 临时数据库设备
sp_deviceattr devname,"dsync",false

tempdb数据和日志分离:
USE master
DISK INIT name = 'tempdbdev01', physname = '/opt/sybase/data/tempdbdev01.dat', size = '1G',dsync = 'false'
DISK INIT name = 'tempdblogdev01', physname = '/opt/sybase/data/tempdblogdev01.dat', size = '1G',dsync = 'false'
ALTER DATABASE tempdb ON tempdbdev01 = '1G' LOG ON tempdblogdev01 = '1G'

从tempdb的段标记上去除master设备:

EXEC sp_dropsegment 'logsegment', 'tempdb', 'master'
go
EXEC sp_dropsegment 'system', 'tempdb', 'master'
go


use tempdb
sp_helpsegment 'logsegment'/'system' 验证tempdb使用的段标记里包含的设备已经去除了master

如果已

针对 tempdb 建立了设备,则只需禁用 dsync io,但需要重新启动 Adaptive Server:
EXEC sp_deviceattr 'tempdbdev01', 'dsync', 'false'
Go
EXEC sp_deviceattr 'tempdblogdev01', 'dsync','false'
Go

但是对于数据库设备最好设置Direct IO,获得的性能相信会让你满意

三. sybase 数据结构调整
1. 数据库对象表、索引。。
(1)对表新建合理的索引,定期分析表
update statistics tabname (不锁表)
(2)整理数据库空间 (锁表,剩余空间必须为最大表的1.2倍)
reorg rebuild tabname
recreate clustered index
(3)重新编译存储过程与触发器
sp_recompile usertable (与表相关联的存储过程和触发器)

四. sybase 数据库监控
1. 数据库死进程
select * from master..syslogshold

2. 表的争夺情况
sp_object_stats "00:05:00"
当很多事务同时访问同一个数据库时,会加剧锁资源争夺,严重时事务之间会发生死锁。可用sp_object_stats查明死锁位置。该过程报告资源争夺最激烈的10张表、一个数据库中资源争夺的表和单个表的争夺情况。语法为sp_object_stats interval [, top_n [, dbname [, objname [, rpt_option ]]]],查看锁争夺情况只需设置interval为“hh:mm:ss”。如果显示每种锁的争夺程度超过15%,应该改变加锁方式,比如表的全页锁改成数据页锁,数据页锁改成数据行锁等。


3.监控tempdb:
sp_helpcache tempdb_cache
select name,id from syscharsets

4.察看内存使用
dbcc traceon(3604) 将信息输出到前台
dbcc memusage
dbcc traceoff(3604)

5.查询命名CACHE情况
sp_cacheconfig或sp_helpcache

6.察看缓存统计信息:
sp_sysmon '00:01:00', dcache/mdcache/pcache/diskio(数据缓存/元数据缓存/过程缓存/磁盘读写)

7.察看查询统计信息:
查看select检索过程及I/O次数、执行时间等,在select 语句执行之前,先打开如下开关:
set showplan on (查看查询计划)
set statistics io on(查看I / O 次数)
set statistics time on(查看执行时间) )


五. sybase 数据库启动参数
-T3607 master
-T3608 其他数据
-m 单

更改默认设备:
为了防止用户数据库被分配到数据库系统主设备master上,应该在安装完数据库后修改默认设备—安装完sybase ASE后,master是唯一的默认设备。Sybase建议,master设备只应该提供给系统数据库而不是用户数据库。因此,对于用户数据库,我们应当单独创建设备,并且把用户设备设置成默认状态。上一步我们已经创建了用户设备“userdev”和“logdev”.其过程如下:
1>sp_diskdefault 'master', 'defaultoff' //取消master的默认设备资格
2>go
1>sp_diskdefault 'userdev', 'defaulton' //设定uerdev为默认设备
2> go
1>sp_diskdefault 'logdev', 'defaulton' //设定logdev为默认设备
2>go
在后面

创建用户数据库的过程中,如果不指定数据库设备,则该用户数据库理所当然地创建在默认设备上。

#####################################################################################################
#####################################################################################################

1、内存

sp_configure "max memory",0,"2600M" (设置为共享内存的75%(60-70%),重启生效。如SYBASE无法正常启动,请调整SYBASE.cfg文件将max memory参数调小。)

sp_configure "allocate max shared mem",1 (启动的时候自动分配max memory指定的最大内存)

sp_cacheconfig "default data cache","1300m"(设置数据缓存为max memory的一半)

sp_cacheconfig "default data cache","cache_partition=2" (在SMP的环境中还有一个问题就是螺旋锁的竞争,当用sp_sysmon观察到资源缓存螺旋锁争夺Spinlock Contention超过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",8 (并行度*并发连接数*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",2000

sp_configure "number of open objects",2000

sp_configure "number of open partitions",1500


此外,还有一个关于OLTP的配置,大家有爱好的可以试一试:

sp_configure "optimization goal","allow_oltp"



--增加网络内存
sp_configure 'additional network memory',1024
go

--锁内存
sp_configure 'lock shared memory',512
go

--调整扩展分配
sp_configure 'number of pre-allocated extent',20
go



优化数据库系统属性

方法一:在sybase center中选择数据库属性,将属性中options选项中的下列项目选中。
allow select into/bulk copy
truncate log on checkpoint
checkp

oint 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 本文来自Sqlclub
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



#####################################################################################################
#####################################################################################################
对于数据量较大和业务功能较复杂的系统,Sybase的默认参数根本无法满足需要,必须进行优化。系统数据库方面的优化从两方面进行,一个是调整数据库系统的一些性能参数的值,另一个是应用程序的调优。应用程序的调优调整hsql和sql的写法,配合sql合理的建索引,这里主要对Sybase系统一些基本的性能参数的调优进行一个小结。
1、内存
内存是对性能影响最大,也是最需要也是最难调优的地方。内存调优一定要,常用的需要调整的参数有:
sp_configure “max memory”,0,”2600M” (设置为共享内存的75%,重启生效)
sp_configure “allocate max shared mem”,1 (启动的时候自动分配max memory指定的最大内存)
sp_cacheconfig “default data cache”,”1300m”(设置数据缓存为max memory的一半)
sp_cacheconfig “default data cache”,“cache_partition=2”
sp_configure “procedure cache size”,102400 (过程高速缓存,通常是max mem20%-30%,这里是200M,在大量的执行sql的时候这个参数一定要调大)
sp_cacheconfig ‘tempdb_cache’,'100m’,'mixed’ (创建一个100M命名高速缓存tempdb_cache给temdpb使用)
sp_bindcache ‘tempdb_cache’,tempdb (将tempdb_cache绑定到tempdb)

实际中遇到一个很头痛的问题, 32位Windows版本的Sybase 最大内存只能到搞到3G左右,"default data cache"的值超过 1500M Sybase实例就起不来了,导致服务器的16G内存形同虚设,所以如果大家的项目和我这个类似,服务器和操作系统由客户提供,还换不了的,内存不妨要求个4G就够了,多了也浪费。

2、CPU
当服务器的CPU个数多于一个时,可以考虑多CPU。实际上对于OS会自动调度,设一下只不过是控制的更精确一点。实际需要根据CPU数来修改,若CPU=N,一般设置为N-1。设置这个参数,比如我的服务器8个CPU, 就像下面这样设置:
sp_configure “max online engines”,7
sp_configure “number of engines at startup”,7
sp_configure “max parallel degree”,1 (并行的度,

大于或等于1)
sp_configure “number of worker processes”,7 (并行度*并发连接数*1.5倍)

3、连接数(这个没什么说的,数量管够就可以,默认数为25,可根据应用需要来修改。)
sp_configure “number of user connections”,600

查询数据库死进程
select * from master..syslogshold

4、锁
数据库的锁机制其实是一个比较复杂的话题,这里只能简单说一下。Sybase数据库系统两个级别的锁机制:所有页锁、数据页锁。所有页锁在当数据库加锁时,既锁数据页,也锁索引页;数据页锁当数据库加锁时,只锁数据页,不锁索引页。
Sybase支持三种类型的锁: 数据表锁、数据页锁、数据行锁。 一些常用的调优命令和策略如下:

sp_configure "number of locks",50000 (设置锁的数量)

系统设置时要把锁的数量设大一点,简单说就是要管够;如果需要节省空间,减少维护量,使用所有页锁机制;而如果需要加快速度,空间足够,使用数据页锁机制。
sp_sysmon “00:10:00”,locks (检测锁的使用情况)

当通过监测发现锁竞争超过15%时,首先修改加锁最重的表的锁机制,然后再把数据页锁设置为数据行锁。如果发现螺旋锁多,则为该表建立单独的命名缓存并对命名缓存进行分区。

5、I/O
数据库调优总的思路是尽量减少和分散物理I/O,尽量减少网络I/O。
减少物理I/O的办法有:
在命名缓存中增加大块的I/O缓冲池,把数据分散到多个硬盘上,采用RAID技术,建立段,使一个表跨越多个硬盘等等,基本和其他的数据库软件调优一样。

减少网络I/O的办法是采用大数据包:
sp_configure "default network packet size",2048 #设置网络传送包的大小(需要重启动)
sp_configure "max network packet size",2048

6、设备调整
主要调整两块:
一个是业务数据库的数据设备与日志设备必须分开,添加临时数据库设备;
另一个是调整Tempdb,这一条很重要却很容易被大家忽视。
Tempdb是sybase数据库当中的临时库,用于存放中间结果和临时表。由于使用很频繁而默认大小又很小,我们需要加大其设备空间和库的大小,尽可能把tempdb放置到最快的硬盘上,并建立单独的命名缓存。
sp_cacheconfig ‘tempdb_cache’,'200m’,'mixed’ (创建一个200M命名高速缓存tempdb_cache给temdpb使用)
sp_bindcache ‘tempdb_cache’,tempdb (将tempdb_cache绑定到tempdb)


///
sp_addserver SYB_BACKUP, null, INFO02_BS


相关文档