sybase cache配置

来源:互联网 发布:夷陵之战 知乎 编辑:程序博客网 时间:2024/05/21 07:52

一、sybase ASE 内存结构

 

SQL Server 时按以下顺序预分配内存:

  1. SQLServer可执行代码    
  2. SQL Server 使  的静态内存
  3. 数据缓存
  4. 过程缓存

其中,

SQL Server可执行代码所占内存的大小 SQL Server 可执行代码的大小因平台和版本的不同而异,但一般在3M4M 间。用dbcc memusage显示 executable code size 参数的值来确定。

静态内存 的大小,这部分内存不受用户配置参数的影响,一般在2.2MB3.25之间。

用户配置参数占用的内 存,可调用不带参数的sp_configure来显示所有参数和每个 参数使  的内存值。

二.内存参数调整

ASE参数中,我们需要关注的和内存相关的参数包括:

  1. allocate max shared memory (指定是否分配由max memory指定的最大内存,缺省不分配最大内存)
  2. max memory (确定Sybase最大可用内存)
  3. total logical memory (当前配置的逻辑内存,只读)
  4. total physical memory(当前配置的物理内存,只读)
  5. additional network memory(为要求包大于服务器缺省包大小的客户分配额外的网络内存,合理增加此参数,对于传送大量数据的应用程序,有助于提高性能)
  6. heap memory per user(SYBASE推荐,此参数大小为逻辑页大小的3倍)
  7. memory per worker process(设置工作进程使用的内存量【非数据,进程自身消息发布需要的内存量】,缺省的1024基本够用,建议设置为2048)
  8. global cache partition number(多引擎服务器中, 对缓存分区可以减少单个缓存中的螺旋锁任务争用,提高性能)
  9. user log cache size(每个用户的日志缓存大小)

因此,需要做如下调整:
sp_configure "max memory",xxx 
其中xxx为页数,不论逻辑页设置的是8K还是2K或者16K一律按照     字节数/2048来计算 ;例如,希望设置的max memory为896M,则此值应该为: 896×1024×1024/2048 =  458752
此值的大小为全部内存使用量;因此应该尽可能的大一些,但是不能超过最大共享内存值。该值等于/etc/system文件里定义的shmsys:shminfo_shmmax值/2048
(16G物理内存时,设为6815744)
sp_configure "allocate max shared memory",0 
allocate max shared memory 应该保持缺省值0,以避免浪费内存。当此值为1的时候,SYBASE将占用MAX MEMORY设置的内存量,不论是不是实际使用了这些内存;因此,建议设置成0,当需要的时候才申请内存。
sp_configure "additional network memory",524288    
此值基本上满足了绝大多数通讯所需的内存缓冲。具体数值需要通过SYSMON观测,才能给出更准确的值。
sp_configure "heap memory per user",49152   
当页为16K的时候设置为此值【如果为8K设置成24576;2K时候设置为6144】
sp_configure "memory per worker process",2048 
sp_configure "global cache partition number",4  
sp_configure "user log cache size",16384
  
 参数在页大小超过2K的情况下,保持与页大小一致;例如:8K页的时候,设置成8192;16K页时,设为16384;当页大小为2K的时候,设置成4096
重启数据库

三、Log Cache  

可以将数据库日志绑定到日志缓存上,提高日志的读写性能;经过测试,添加日志缓存后,性能相对没有日志缓存的情况,提高至少30%;经验上,日志缓存至少128M以上;内存允许的情况下,建议设置256M

具体方法如下:

 1. 创建一个命名cache,假如是Hannibal数据库,则

sp_cacheconfig 'Hannibal_log_cache','256M',logonly 

--注意logonly参数; 

 2. 重启数据库,使CACHE生效;

 3. 创建8K池,为提高logiosize做准备;(当逻辑页大小为8K的时候不需要再创建了,此时可以建一个16K的池

sp_poolconfig 'Hannibal_log_cache','250M','8K'

尽可能将Hannibal_log_cache的容量都分配给这个POOL池。如果数据页已经是8K,则不需再创建8K的池了。同理,如果数据页已经是16K,则不需再创建16K的池了。

 4. 进入数据库单用户模式,绑定日志到log cache

USE master
go
EXEC sp_dboption 'Hannibal','single user',true  
go
use Hannibal
go
checkpoint
go
EXEC sp_bindcache 'Hannibal_log_cache','ipnet','dbo.syslogs'
go

 5. 设置logiosize (仍然在单用户模式下),逻辑页为8K或8K以上的不需要做。注意,Hannibal_log_cache里必须有一个和logiosize相同大小的pool;否则出错.

use Hannibal
go
sp_logiosize "8K"
go

 6. 恢复数据库OPEN状态

USE master
go
EXEC sp_dboption 'Hannibal','single user',false
go
 

 7. 重启数据库, 之后可以用下列命令核查。

sp_helpcache
sp_poolconfig "Hannibal_log_cache"
sp_logiosize

 

四. Data Cache

default data cache  ――缺省数据缓存,在缺省状态下它的大小是8M,因此我们需要加大此缓存,提高查询的性能。其大小应该尽可能大,以适应大查询的需求。

修改方法:
sp_cacheconfig 'default data cache','5120M'
sp_cacheconfig 'default data cache','cache_partition=8'

重启数据库,使设置生效。

当逻辑页小于8K的时候,需要创建一个8Kpool,以启用大IO;这个POOLsize建议default data cache4060%;

 

sp_poolconfig "default data cache","2560M","8K"

注意:一个cache必须有一个和逻辑页相同尺寸的pool(缺省状态下的);此外,仅仅需要创建一个比逻辑页尺寸大的pool;例如:逻辑页为2K的时候,仅仅需要创建1个8k的pool就可以了,没有必要同时保留4k/8k/16k。
绝大多数情况下,2倍于逻辑页大小的pool效率最高。因此,对于pool,一般需要2个pool,一个是和逻辑页相同尺寸的pool;另一个是两倍于逻辑页尺寸的pool。
另外,default data cache上没有必要绑定任何数据库对象。

 

五. Tempdb Cache

创建一个tempdb独享的cache,提高tempdb的性能。经验上,256M就足够用了。
sp_cacheconfig 'tempdb_cache','256M'
重启数据库使设置生效。
将tempdb数据库绑定到此cache上。(注意,命名cache不绑定对象的时候,是没有用的)

use master
go
sp_bindcache "tempdb_cache",tempdb
go

至此,Sybase Cache的配置算告一段落。

出处:http://jackrui.blog.163.com/blog/#m=0&t=3&c=sybase