- 浏览: 15380 次
- 性别:
- 来自: 深圳
最近访客 更多访客>>
文章分类
最新评论
-
histan:
FeiXing2008 写道近来也在做Socket开发。明天再 ...
关于Socket的一个异常 -
FeiXing2008:
近来也在做Socket开发。明天再试试这个东西。
关于Socket的一个异常 -
yechw:
这个叫虚拟锁。
通常我们对一个类A中的两个方法进行同步操作是 ...
关于Socket的一个异常 -
fjlyxx:
看看你的WEB.XML用的是什么版本的DTD Webspher ...
其实也是提问 -
魔力猫咪:
很正常。因为Websphere对JSP的解析比其他产品要严格得 ...
其实也是提问
总结工作中的Sybase数据库(四)
sybase内存和缓冲区管理【网摘】
-------------------------------------
为SQL SERVER提供的可用内存越多,SQL SERVER就有越多的资源使用于缓冲区,即可减少服务器
从磁盘读取数据以获取静态信息或编译过程计划的次数。调整SQL SERVER所占内存可通过在服务器配
置文件中设置total memory参数进行,该参数的值指定了SQL SERVER在启动时所需的内存总量,如若
该值为10000页,则SQL SERVER在启动时就将试图获得10000*2K=19.5M的内存,若不能满足则启动失败。
注意,若操作系统在进程的整个生命周期中支持动态内存分配,则可在SQL SERVER启动后为其分配额
外的内存。
SQL SERVER启动时将内存分配给SQL SERVER可执行代码,SQL SERVER使用的静态内存,用户可配
置参数占用的内存及不驻留在缓存上的数据结构,剩余的内存分配给两种SQL SERVER缓冲区即:数据
缓冲区和过程缓冲区。两缓冲区的大小对整个系统的性能影响很大,在一个开发系统上可能要增加过多端
程缓冲区的专用内存,而在一生产系统上则需减少过程缓冲区大小以便获得更大的数据缓冲区。
1。 确定缓冲区大小
在total memory配置的总空间中,首先要除去可爱执行代码所占空间,其大小因平台和版本
不同而异,可使用sp_configure查询executable codesize参数的值得知,一般为3-4MB;其次需
除去内部结构所占空间,内部结构分成内核结构和服务器结构,亦可将此部分内存看成静态开销
和用户配置参数占用两个部分,前者大小不受用户可配置参数的影响,一般为2-3MB,而后者即用
户可配置参数的大小则取决于配置参数的类型及其值的大小,包括number of user connections,
number of open databases,number of devices,number of open objects,number of locks等,
要得到这些用户配置参数使用内存大小的精确估计,可调用不带选项的sp_configure以显示所有
参数和每个参数使用的内存量,其和即是用户配置参数所占用内存。
除去上述占用,剩余内存将以procedure cache percent配置参数的值按比例分配给过程缓冲
区和数据缓冲区,例若值为20,即表示剩余内存的20%分配给过程缓冲区而80%分配给数据缓冲区。
确定缓冲区大小的另一种方法是检查SQL SERVE启动时写入SQL SERVER错误日志的内存信息,
其中准确地说明了分配给过程缓冲区和数据缓冲区的数据量,以及多少个过程或其他编译对象能
同时驻留在缓冲区中,如相关信息为:
server:Number of proc buffers assocated:556
server:Number of blocks left for proc headers:629
server:Memory allocated for the default data cache:4144kb
前两行为过程缓冲区信息,过程缓冲区总大小是分配给过程缓冲区的内存(第一行)及分配给过
程头(即存放编译对象如存储过程的地方,根据被存储对象的大小,可能需要一个或多个过程头)
的内存(第二行)之和,可存储在过程缓冲区中的编译对象受到此二者中较小者的限制。上述信息
中,第一行指明了分配给过程缓冲区的缓冲区数量为556,每个缓冲区大小为76B,故过程缓冲区
大小即为42256B,合21页;第二行则指明了分配给过程头的空间为629页,由此可以得出,过程
缓冲区总大小为629+21=650页,合1.27M。
信息中第三行则指明了分配给默认数据库缓冲区的空间大小。此外,若配置了命名缓冲区,则
相关信息还将包含每个命名缓冲区的信息,再加上这些命名缓冲区所占内存大小即得到总的数据
缓冲区大小。欲知数据缓冲区大小还可通过sp_helpcache过程得到每个缓冲区和捆绑到这些缓冲
区中的对象以及与不同缓冲区大小相关的开销的详细信息。
2。 缓冲区管理
数据缓冲区保存SQL SERVER当前使用和最近使用过的数据页,索引页和日志页.初装SQL SERVER
时,会产生一个默认的数据缓冲区.SQL SERVER允许系统管理员把数据缓冲区分成独立的命名数据
缓冲区,然后可把数据库或数据库对象捆绑到这些命名缓冲区上,以对缓冲区空间进行更合理的组
织,控制数据库,表和索引在内存的驻留.另外,系统管理员还可在缓冲区内创建缓冲池,用于执行
大块的磁盘I/O,改善数据查询性能,减少磁盘I/O.有关数据库缓冲区的指令有:
sp_cacheconfig 创建或删除命名缓冲区,改变缓冲区的大小或类型
sp_poolconfig 创建或删除I/O缓冲池,并改变其大小
sp_bindeache 将数据库或数据库对象捆绑到缓冲区
sp_unbindcache 从一个缓冲区中取消对指定对象或数据库的捆绑
sp_unbindcache_all 从一个缓冲区中取消所有对象的捆绑
sp_helpcache 报告有关数据缓冲区的小结信息,并显示捆绑于缓冲区的数据库和对象
sp_cachestrategy 报告有关为表,索引设置的缓冲区策略,禁止或重新允许先提或MRU策略
sp_logiosize 为日志改变默认的I/O大小
sp_spaceused 估计表和索引大小或有关数据库使用的空间量的信息
sp_estspace 估计表和索引的大小,给出表包含的行的数目
sp_help 报告表将捆绑于哪个缓冲区
sp_helpindex 报告索引将捆绑于哪个缓冲区
sp_helpdb 报告数据库将捆绑于哪个缓冲区
setshowplanon 报告有关用于查询的I/O大小和缓冲区的应用策略
setstatisticsioon 报告为查询进行的读操作数量
setprefetch on/off 允许或禁止某个会话的预先提取
(1) 查询数据库缓冲区的信息
查看默认数据缓冲区的大小,可使用指令sp_cacheconfig "default data cache",显示
结果如下,由两部分构成,上部分报告每个缓冲区中的内存池配置信息并总计了所有配置缓
冲区的大小;下部分提供了每个缓冲区中的其他详细信息.
第一部分输出各列含义为:cache name为缓冲区名;status指示该缓冲区是否激活(值为
pend/act时表示该缓冲区刚建立,重启后将被激活;值为active时表示该缓冲区目前正处于
激活状态;值为pend/del时表示该缓冲区处于激活状态,但在服务器重启后将被删除);type
指示缓冲区是否可以存储数据("mixed")和日志页("logonly"),只有默认缓冲区才会有
"default"类型,且默认的数据缓冲区类型不能改变,其他类型缓冲区也不能改为"default";
config value显示下次SQL SERVER重启后缓冲区的大小,在此情况下,默认缓冲区不能显式
配置,故信息中其大小为0;run value显示SQL SERVER目前使用的大小,对于默认数据缓冲
区,该值将作为未显示配置到其他缓冲区中的所有数据缓冲区空间.
第二部分输出各列含义为:IO size显示缓冲池中的缓存大小,所有缓冲池缺省都分配2K
空间(有效空间大小为2K,4K,8K,16K);wash size指示缓冲池的刷洗区大小;config size和
run size显示配置大小和目前使用的大小,该两值在2K的缓冲池中是不同的(因为不能显式
配置其大小),而对于其他缓冲池,若试图在缓冲池间移动空间而一些空间又不能被释放时,
上述两值也不同.
Cache Name Status Type Config Value Run value
---------------- ------ ------ ---------------- -------------
default data cache Active Default 0.00MB 59.36MB
-------------------------------
Total 0.00MB 59.36MB
===================================================================
Cache:default data cache, status:Active, Type:Default
Config Size:0.00MB, Run size:59.36MB
IO Size Wash Size Config Size Run Size
------- --------- ----------- --------
2KB 512KB 0.00MB 59.36MB
(2) 配置数据缓冲区
配置数据缓冲区有两种途径:一是使用过程sp_cacheconfig和sp_poolconfig进行交互
式配置,二是编辑配置文件中的total memory参数后重启使之生效.
A. 交互式配置
>; 创建命名缓冲区 (新创建的命名缓冲区从缺省缓冲区default data cache中分配空间)
每次执行sp_cacheconfig或sp_poolconfig时,SQL SERVER都将新的缓冲区或缓冲池信
息写入配置文件中并将文件的旧版本拷贝到一个备份文件中,给出备份文件名的信息被
送至错误日志.
创建一个新的名为pubs_cache的10M缓冲区指令如下,大小单位除M外,还可为P页,K,G,
(默认为K).该指令将改变系统表并将新值写入配置文件但暂不激活缓冲区,要使其生效
须重启SQL SERVER.
sp_cacheconfig pubs_cache,"10M"
在重启SQL SERVER使新值生效前,可先用sp_cacheconfig "pubs_cache"查看配置信息
如下,其中的status列值为pend/act说明该缓冲区的配置是挂起的,要待重启后生效,故
Config value(配置的值)和Run value(正在使用的值)不同.
Cache Name Status Type Config Value Run value
---------------- ------ ------ ---------------- -------------
pubs_cache pend/act mixed 10.00MB 00.00MB
-------------------------------
Total 10.00MB 00.00MB
重启后再允许不带缓冲区名参数的sp_cacheconfig,则信息改变如下,可见pubs_cache
已被激活,默认缓冲区从其空间中分出了10M给该缓冲区.可利用sp_cacheconfig过程设置
默认数据缓冲区的最小值,该部分空间将被锁定给默认数据缓冲区.例如设置默认数据缓
冲区大小最少不低于25M则指令为sp_cacheconfig "default data cache" "25M".
Cache Name Status Type Config Value Run value
---------------- ------ ------ ---------------- -------------
default data cache Active Default 0.00MB 49.28MB
pubs_cache Active mixed 10.00MB 10.00MB
-------------------------------
Total 10.00MB 59.28MB
===================================================================
Cache:default data cache, status:Active, Type:Default
Config Size:0.00MB, Run size:49.28MB
IO Size Wash Size Config Size Run Size
------- --------- ----------- --------
2KB 512KB 0.00MB 49.28MB
===================================================================
Cache:pubs_cache, status:Active, Type:mixed
Config Size:10.00MB, Run size:10.00MB
IO Size Wash Size Config Size Run Size
------- --------- ----------- --------
2KB 512KB 0.00MB 10.00MB \
若要保留一个只用于事务日志的缓冲区的类型,可以将缓冲区的类型设为"logonly",
如创建"logonly"类型的pubs_log缓冲区为sp_cacheconfig pubs_log,"7M","logonly",
下示为该缓冲区在重启前的状态.
Cache Name Status Type Config Value Run value
---------------- ------ ------ ---------------- -------------
pubs_cache pend/act log only 7.00MB 0.00MB
-------------------------------
Total 7.00MB 0.00MB
创建命名缓冲区后一般都须将某些对象捆绑到该缓冲区上。若建立命名缓冲区后
未将任何对象捆绑到该命名缓冲区上,则该命名缓冲区所占内存将被浪费,因为任
何未指定缓冲区的对象都将缺省使用默认数据缓冲区default data cache.
>; 将数据缓冲区划分为缓冲池
建立数据缓冲区后,可将其划分成缓冲池,各不同的缓冲池具有不同的I/O大小,当
SQL SERVER进行大I/O操作时,可将许多页一次读入缓冲区中,故可提高I/O效率.这些
页总是被当作一个单元进行处理,它们共存于缓冲区中,作为一个单元被写到磁盘中.
缓冲池的页大小可为2K,4K,8K,16K,缓冲池的总大小不能低于512K.所有关于缓冲池
的配置都是动态的,无需重启SQL SERVER即可生效.SQL SERVER内2K页缓冲池的个数
必须保持一个合理的值,否则将会影响SQL SERVER性能,因为某些命令只能使用2K
的I/O块如disk init及某些dbcc命令。
在pubs_cache数据缓冲区中创建一个每页16K,总空间为7MB的缓冲池,指令如下.通
常,创建命名数据缓冲区时,其空间总是被默认划分为每页2K的缓冲池,创建其它页大
小的缓冲池时,该2K页缓冲池空间被部分分配给新缓冲池.下例中2K页大小的缓冲池
原共有10M空间,分配给7M给16K页的新缓冲池后,2K页缓冲池还剩3M空间.
>;sp_poolconfig pubs_cache,"7M","16K"
>;go
>;sp_cacheconfig pubs_cache
Cache Name Status Type Config Value Run value
---------------- ------ ------ ---------------- -------------
pubs_cache Active mixed 10.00MB 10.00MB
-------------------------------
Total 10.00MB 10.00MB
===================================================================
Cache:pubs_cache, status:Active, Type:mixed
Config Size:10.00MB, Run size:10.00MB
IO Size Wash Size Config Size Run Size
------- --------- ----------- --------
2KB 512KB 0.00MB 3.00MB
16KB 1424KB 7.00MB 7.00MB
在默认数据缓冲区中也可创建缓冲池,如创建16K缓冲池,空间大小为8M,则指令为:
sp_poolconfig "default data cache","8M","16K".
若要为一个数据库的事务日志创建缓冲区,应配置缓冲区中大部分空间来匹配日志
I/O的大小.默认值为4K,若没有4K的可用缓冲池,SQL SERVER就为日志使用2K的I/O.
日志I/O的大小可通过系统过程sp_logiosize来改变,每个数据库的日志I/O大小会在
SQL SERVER启动后的错误日志中报告,也可通过使用数据库和执行不带参数的过程
sp_logiosize来检查一个数据库的日志I/O大小.如为pubs_log缓冲区配置4K页大小
的缓冲池指令为sp_poolconfig pubs_log,"3M","4K",也可在默认数据缓冲区中创
建一个4K页缓冲池,以供未被捆绑至其它缓冲区的任何数据库的事务日志来使用:
sp_poolconfig "default data cache","2.5M","4K".
此外,可修改缓冲池大小,如从16K页I/O的缓冲池中取出1M空间增加到4K页I/O缓
冲池中:sp_poolconifg pub_cache,"1M","4K","16K"
>; 缓冲区悃绑操作
系统管理员把数据缓冲区分成独立的命名数据缓冲区后,可将数据库对象捆绑到这
些缓冲区上,以控制数据库,表和索引在内存的驻留.若建立命名缓冲区后未将任何对
象捆绑到该命名缓冲区上,则该命名缓冲区所占内存将被浪费,因为任何未指定缓
冲区的对象都将缺省使用默认数据缓冲区default data cache.为了将任何系统表,
包括事务日志syslogs捆绑至缓冲区中,数据库须处于单用户模式.对象被捆绑后立即
生效而无需重启SQL SERVER.注意,进行捆绑或删除捆绑操作时,SQL SERVER需锁定相
应对象,故相应对象上的其它操作可能有延迟.此外,可不删除现有的捆绑而重新捆绑
对象.另外,当被捆绑对象上有脏的读活动或有打开的游标时,捆绑或删除捆绑的操作
将不能进行.
1>;sp_dboption pubs2,single,true 置pubs2库为单用户状态
2>;use pubs2
3>;checkpoint
4>;go 准备进行数据库对象的捆绑。注意,捆绑对象须在对象所在的库中进行。
>;sp_bindcache pubs_cache,pubs2,titles
将pubs2库中的表titles捆绑至缓冲区pubs_cache.
>;sp_bindcache pubs_cache,pubs2,titles.titleind
在titles上捆绑索引,并将pubs2库中的表titles捆绑至缓冲区pubs_cache.
>;sp_bindcache pubs_cache,pubs2,"hj.sale_east"
将pubs2库中用户hj的表sale_east捆绑至缓冲区pubs_cache.
>;sp_bindcache pubs_log,pubs2,syslogs
将pubs2库的事务日志syslogs捆绑至缓冲区pubs_log.
>;sp_bindcache pubs_cache,pubs2,au_pix,"text only"
表的text和image列存储在一个单独的数据结构中,若将此表捆绑至缓冲区,需加
"text"参数.
1>;sp_dboption pubs3,single,true 置pubs3库为单用户状态
2>;use pubs3
3>;checkpoiot
4>;use master
5>;go 准备进行数据库的捆绑,注意,捆绑数据库须在master库中进行。
>;sp_bindcache tempdb_cache,tempdb
将数据库tempdb捆绑至缓冲区tempdb_cache。
注意,被捆绑到日志缓冲区上的对象只能是syslogs表。
可通过sp_helpcache过程查询所有或指定缓冲区及其中被捆绑对象的捆绑信息.如下
例示,其中status列报告缓冲区的捆绑是("V")否("I")有效.若数据库或对象被捆绑至缓
冲池而该缓冲区已被删除,则捆绑信息仍保留在系统表中但缓冲区捆绑被标记无效,所有
无效的捆绑对象均使用默认的数据库缓冲区.若随后用与被删除的缓冲区相同的名字创建
了另一个缓冲区,则当该缓冲区通过重启SQL SERVER而被激活时,上述捆绑又将变为有效.
删除缓冲区捆绑可用两个过程:sp_unbindcache用于删除缓冲区中对一个实体的捆绑;
sp_unbindcache_all则用于删除缓冲区中对所有对象的捆绑,但若捆绑至缓冲区的数据库
超过8个,或数据库的对象超过8个,就不能使用sp_unbindcache_all,此情况下,必须使用
sp_unbindcache删除单个的数据库或对象,使捆绑的数据库不超过8个.此外,当删除缓冲
区对一个对象的捆绑时,内存中所有当前的页都被从缓冲区中清除.
>;sp_unbindcache pubs2
删除对数据库pubs2的捆绑
>;sp_unbindcache pubs2,titles
删除对pubs2库中对titles表的捆绑
>;sp_unbindcache pubs2,titles,titleidind
铲除对pubs2库中titles表上titleidind索引的捆绑.
>; 改变命名数据缓冲区大小
可通过sp_cacheconfig指定一个新的空间以增加或减少指定缓冲区的大小,所有新增空
间都将从缺省数据缓冲区default data cache内的2K缓冲池中被加到指定缓冲区内的2K
页缓冲池中,所有减少的空间亦从指定缓冲区内的2K页缓冲池中被释放到缺省数据库缓冲
区default data cache内的2K缓冲池中.
>;sp_cacheconfig pubs_cache
Cache Name Status Type Config Value Run value
---------------- ------ ------ ---------------- -------------
pubs_cache Active mixed 10.00MB 10.00MB
-------------------------------
Total 10.00MB 10.00MB
===================================================================
Cache:pubs_cache, status:Active, Type:mixed
Config Size:10.00MB, Run size:10.00MB
IO Size Wash Size Config Size Run Size
------- --------- ----------- --------
2KB 720KB 0.00MB 3.00MB
4KB 1024KB 4.00MB 4.00MB
16KB 1424KB 3.00MB 3.00MB
现以sp_cacheconfig pubs_cache,"20M"后重启,则改变如下:
>;sp_cacheconfig pubs_cache
Cache Name Status Type Config Value Run value
---------------- ------ ------ ---------------- -------------
pubs_cache Active mixed 20.00MB 20.00MB
-------------------------------
Total 20.00MB 20.00MB
===================================================================
Cache:pubs_cache, status:Active, Type:mixed
Config Size:20.00MB, Run size:20.00MB
IO Size Wash Size Config Size Run Size
------- --------- ----------- --------
2KB 512KB 0.00MB 13.00MB
4KB 1024KB 4.00MB 4.00MB
16KB 1424KB 3.00MB 3.00MB
返回pubs_log缓冲区报告:
>;sp_cacheconfig pubs_log
Cache Name Status Type Config Value Run value
---------------- ------ ------ ---------------- -------------
pubs_log Active log only 7.00MB 7.00MB
-------------------------------
Total 7.00MB 7.00MB
===================================================================
Cache:pubs_log, status:Active, Type:log only
Config Size:7.00MB, Run size:7.00MB
IO Size Wash Size Config Size Run Size
------- --------- ----------- --------
2KB 512KB 0.00MB 4.00MB
4KB 1024KB 3.00MB 3.00MB
再运行以指令sp_cacheconfig pubs_log,"6M"后重启,则改变为:
>;sp_cacheconfig pubs_log
Cache Name Status Type Config Value Run value
---------------- ------ ------ ---------------- -------------
pubs_log Active log only 6.00MB 6.00MB
-------------------------------
Total 6.00MB 6.00MB
===================================================================
Cache:pubs_log, status:Active, Type:log only
Config Size:6.00MB, Run size:6.00MB
IO Size Wash Size Config Size Run Size
------- --------- ----------- --------
2KB 512KB 0.00MB 3.00MB
4KB 1024KB 3.00MB 3.00MB
欲彻底删除一个数据缓冲区,将其大小复位为0可使用sp_cacheconfig pubs_log,"0".
则将缓冲区状态变为"pend/del",重启SQL SERVER后此改变生效.在执行该操作前,缓冲
区需保持激活状态,捆绑至缓冲区的所有对象仍使用该缓冲区执行I/O操作.若有对象捆
绑于待删除的数据缓冲区,则SQL SERVER重启后,缓冲区的捆绑被标记为无效,所有无效
缓冲区捆绑的对象都使用默认数据缓冲区.当捆绑被标记为无效时,警告信息将被输入
错误日志.注意,默认数据缓冲区不能删除.
-------------------------------------
为SQL SERVER提供的可用内存越多,SQL SERVER就有越多的资源使用于缓冲区,即可减少服务器
从磁盘读取数据以获取静态信息或编译过程计划的次数。调整SQL SERVER所占内存可通过在服务器配
置文件中设置total memory参数进行,该参数的值指定了SQL SERVER在启动时所需的内存总量,如若
该值为10000页,则SQL SERVER在启动时就将试图获得10000*2K=19.5M的内存,若不能满足则启动失败。
注意,若操作系统在进程的整个生命周期中支持动态内存分配,则可在SQL SERVER启动后为其分配额
外的内存。
SQL SERVER启动时将内存分配给SQL SERVER可执行代码,SQL SERVER使用的静态内存,用户可配
置参数占用的内存及不驻留在缓存上的数据结构,剩余的内存分配给两种SQL SERVER缓冲区即:数据
缓冲区和过程缓冲区。两缓冲区的大小对整个系统的性能影响很大,在一个开发系统上可能要增加过多端
程缓冲区的专用内存,而在一生产系统上则需减少过程缓冲区大小以便获得更大的数据缓冲区。
1。 确定缓冲区大小
在total memory配置的总空间中,首先要除去可爱执行代码所占空间,其大小因平台和版本
不同而异,可使用sp_configure查询executable codesize参数的值得知,一般为3-4MB;其次需
除去内部结构所占空间,内部结构分成内核结构和服务器结构,亦可将此部分内存看成静态开销
和用户配置参数占用两个部分,前者大小不受用户可配置参数的影响,一般为2-3MB,而后者即用
户可配置参数的大小则取决于配置参数的类型及其值的大小,包括number of user connections,
number of open databases,number of devices,number of open objects,number of locks等,
要得到这些用户配置参数使用内存大小的精确估计,可调用不带选项的sp_configure以显示所有
参数和每个参数使用的内存量,其和即是用户配置参数所占用内存。
除去上述占用,剩余内存将以procedure cache percent配置参数的值按比例分配给过程缓冲
区和数据缓冲区,例若值为20,即表示剩余内存的20%分配给过程缓冲区而80%分配给数据缓冲区。
确定缓冲区大小的另一种方法是检查SQL SERVE启动时写入SQL SERVER错误日志的内存信息,
其中准确地说明了分配给过程缓冲区和数据缓冲区的数据量,以及多少个过程或其他编译对象能
同时驻留在缓冲区中,如相关信息为:
server:Number of proc buffers assocated:556
server:Number of blocks left for proc headers:629
server:Memory allocated for the default data cache:4144kb
前两行为过程缓冲区信息,过程缓冲区总大小是分配给过程缓冲区的内存(第一行)及分配给过
程头(即存放编译对象如存储过程的地方,根据被存储对象的大小,可能需要一个或多个过程头)
的内存(第二行)之和,可存储在过程缓冲区中的编译对象受到此二者中较小者的限制。上述信息
中,第一行指明了分配给过程缓冲区的缓冲区数量为556,每个缓冲区大小为76B,故过程缓冲区
大小即为42256B,合21页;第二行则指明了分配给过程头的空间为629页,由此可以得出,过程
缓冲区总大小为629+21=650页,合1.27M。
信息中第三行则指明了分配给默认数据库缓冲区的空间大小。此外,若配置了命名缓冲区,则
相关信息还将包含每个命名缓冲区的信息,再加上这些命名缓冲区所占内存大小即得到总的数据
缓冲区大小。欲知数据缓冲区大小还可通过sp_helpcache过程得到每个缓冲区和捆绑到这些缓冲
区中的对象以及与不同缓冲区大小相关的开销的详细信息。
2。 缓冲区管理
数据缓冲区保存SQL SERVER当前使用和最近使用过的数据页,索引页和日志页.初装SQL SERVER
时,会产生一个默认的数据缓冲区.SQL SERVER允许系统管理员把数据缓冲区分成独立的命名数据
缓冲区,然后可把数据库或数据库对象捆绑到这些命名缓冲区上,以对缓冲区空间进行更合理的组
织,控制数据库,表和索引在内存的驻留.另外,系统管理员还可在缓冲区内创建缓冲池,用于执行
大块的磁盘I/O,改善数据查询性能,减少磁盘I/O.有关数据库缓冲区的指令有:
sp_cacheconfig 创建或删除命名缓冲区,改变缓冲区的大小或类型
sp_poolconfig 创建或删除I/O缓冲池,并改变其大小
sp_bindeache 将数据库或数据库对象捆绑到缓冲区
sp_unbindcache 从一个缓冲区中取消对指定对象或数据库的捆绑
sp_unbindcache_all 从一个缓冲区中取消所有对象的捆绑
sp_helpcache 报告有关数据缓冲区的小结信息,并显示捆绑于缓冲区的数据库和对象
sp_cachestrategy 报告有关为表,索引设置的缓冲区策略,禁止或重新允许先提或MRU策略
sp_logiosize 为日志改变默认的I/O大小
sp_spaceused 估计表和索引大小或有关数据库使用的空间量的信息
sp_estspace 估计表和索引的大小,给出表包含的行的数目
sp_help 报告表将捆绑于哪个缓冲区
sp_helpindex 报告索引将捆绑于哪个缓冲区
sp_helpdb 报告数据库将捆绑于哪个缓冲区
setshowplanon 报告有关用于查询的I/O大小和缓冲区的应用策略
setstatisticsioon 报告为查询进行的读操作数量
setprefetch on/off 允许或禁止某个会话的预先提取
(1) 查询数据库缓冲区的信息
查看默认数据缓冲区的大小,可使用指令sp_cacheconfig "default data cache",显示
结果如下,由两部分构成,上部分报告每个缓冲区中的内存池配置信息并总计了所有配置缓
冲区的大小;下部分提供了每个缓冲区中的其他详细信息.
第一部分输出各列含义为:cache name为缓冲区名;status指示该缓冲区是否激活(值为
pend/act时表示该缓冲区刚建立,重启后将被激活;值为active时表示该缓冲区目前正处于
激活状态;值为pend/del时表示该缓冲区处于激活状态,但在服务器重启后将被删除);type
指示缓冲区是否可以存储数据("mixed")和日志页("logonly"),只有默认缓冲区才会有
"default"类型,且默认的数据缓冲区类型不能改变,其他类型缓冲区也不能改为"default";
config value显示下次SQL SERVER重启后缓冲区的大小,在此情况下,默认缓冲区不能显式
配置,故信息中其大小为0;run value显示SQL SERVER目前使用的大小,对于默认数据缓冲
区,该值将作为未显示配置到其他缓冲区中的所有数据缓冲区空间.
第二部分输出各列含义为:IO size显示缓冲池中的缓存大小,所有缓冲池缺省都分配2K
空间(有效空间大小为2K,4K,8K,16K);wash size指示缓冲池的刷洗区大小;config size和
run size显示配置大小和目前使用的大小,该两值在2K的缓冲池中是不同的(因为不能显式
配置其大小),而对于其他缓冲池,若试图在缓冲池间移动空间而一些空间又不能被释放时,
上述两值也不同.
Cache Name Status Type Config Value Run value
---------------- ------ ------ ---------------- -------------
default data cache Active Default 0.00MB 59.36MB
-------------------------------
Total 0.00MB 59.36MB
===================================================================
Cache:default data cache, status:Active, Type:Default
Config Size:0.00MB, Run size:59.36MB
IO Size Wash Size Config Size Run Size
------- --------- ----------- --------
2KB 512KB 0.00MB 59.36MB
(2) 配置数据缓冲区
配置数据缓冲区有两种途径:一是使用过程sp_cacheconfig和sp_poolconfig进行交互
式配置,二是编辑配置文件中的total memory参数后重启使之生效.
A. 交互式配置
>; 创建命名缓冲区 (新创建的命名缓冲区从缺省缓冲区default data cache中分配空间)
每次执行sp_cacheconfig或sp_poolconfig时,SQL SERVER都将新的缓冲区或缓冲池信
息写入配置文件中并将文件的旧版本拷贝到一个备份文件中,给出备份文件名的信息被
送至错误日志.
创建一个新的名为pubs_cache的10M缓冲区指令如下,大小单位除M外,还可为P页,K,G,
(默认为K).该指令将改变系统表并将新值写入配置文件但暂不激活缓冲区,要使其生效
须重启SQL SERVER.
sp_cacheconfig pubs_cache,"10M"
在重启SQL SERVER使新值生效前,可先用sp_cacheconfig "pubs_cache"查看配置信息
如下,其中的status列值为pend/act说明该缓冲区的配置是挂起的,要待重启后生效,故
Config value(配置的值)和Run value(正在使用的值)不同.
Cache Name Status Type Config Value Run value
---------------- ------ ------ ---------------- -------------
pubs_cache pend/act mixed 10.00MB 00.00MB
-------------------------------
Total 10.00MB 00.00MB
重启后再允许不带缓冲区名参数的sp_cacheconfig,则信息改变如下,可见pubs_cache
已被激活,默认缓冲区从其空间中分出了10M给该缓冲区.可利用sp_cacheconfig过程设置
默认数据缓冲区的最小值,该部分空间将被锁定给默认数据缓冲区.例如设置默认数据缓
冲区大小最少不低于25M则指令为sp_cacheconfig "default data cache" "25M".
Cache Name Status Type Config Value Run value
---------------- ------ ------ ---------------- -------------
default data cache Active Default 0.00MB 49.28MB
pubs_cache Active mixed 10.00MB 10.00MB
-------------------------------
Total 10.00MB 59.28MB
===================================================================
Cache:default data cache, status:Active, Type:Default
Config Size:0.00MB, Run size:49.28MB
IO Size Wash Size Config Size Run Size
------- --------- ----------- --------
2KB 512KB 0.00MB 49.28MB
===================================================================
Cache:pubs_cache, status:Active, Type:mixed
Config Size:10.00MB, Run size:10.00MB
IO Size Wash Size Config Size Run Size
------- --------- ----------- --------
2KB 512KB 0.00MB 10.00MB \
若要保留一个只用于事务日志的缓冲区的类型,可以将缓冲区的类型设为"logonly",
如创建"logonly"类型的pubs_log缓冲区为sp_cacheconfig pubs_log,"7M","logonly",
下示为该缓冲区在重启前的状态.
Cache Name Status Type Config Value Run value
---------------- ------ ------ ---------------- -------------
pubs_cache pend/act log only 7.00MB 0.00MB
-------------------------------
Total 7.00MB 0.00MB
创建命名缓冲区后一般都须将某些对象捆绑到该缓冲区上。若建立命名缓冲区后
未将任何对象捆绑到该命名缓冲区上,则该命名缓冲区所占内存将被浪费,因为任
何未指定缓冲区的对象都将缺省使用默认数据缓冲区default data cache.
>; 将数据缓冲区划分为缓冲池
建立数据缓冲区后,可将其划分成缓冲池,各不同的缓冲池具有不同的I/O大小,当
SQL SERVER进行大I/O操作时,可将许多页一次读入缓冲区中,故可提高I/O效率.这些
页总是被当作一个单元进行处理,它们共存于缓冲区中,作为一个单元被写到磁盘中.
缓冲池的页大小可为2K,4K,8K,16K,缓冲池的总大小不能低于512K.所有关于缓冲池
的配置都是动态的,无需重启SQL SERVER即可生效.SQL SERVER内2K页缓冲池的个数
必须保持一个合理的值,否则将会影响SQL SERVER性能,因为某些命令只能使用2K
的I/O块如disk init及某些dbcc命令。
在pubs_cache数据缓冲区中创建一个每页16K,总空间为7MB的缓冲池,指令如下.通
常,创建命名数据缓冲区时,其空间总是被默认划分为每页2K的缓冲池,创建其它页大
小的缓冲池时,该2K页缓冲池空间被部分分配给新缓冲池.下例中2K页大小的缓冲池
原共有10M空间,分配给7M给16K页的新缓冲池后,2K页缓冲池还剩3M空间.
>;sp_poolconfig pubs_cache,"7M","16K"
>;go
>;sp_cacheconfig pubs_cache
Cache Name Status Type Config Value Run value
---------------- ------ ------ ---------------- -------------
pubs_cache Active mixed 10.00MB 10.00MB
-------------------------------
Total 10.00MB 10.00MB
===================================================================
Cache:pubs_cache, status:Active, Type:mixed
Config Size:10.00MB, Run size:10.00MB
IO Size Wash Size Config Size Run Size
------- --------- ----------- --------
2KB 512KB 0.00MB 3.00MB
16KB 1424KB 7.00MB 7.00MB
在默认数据缓冲区中也可创建缓冲池,如创建16K缓冲池,空间大小为8M,则指令为:
sp_poolconfig "default data cache","8M","16K".
若要为一个数据库的事务日志创建缓冲区,应配置缓冲区中大部分空间来匹配日志
I/O的大小.默认值为4K,若没有4K的可用缓冲池,SQL SERVER就为日志使用2K的I/O.
日志I/O的大小可通过系统过程sp_logiosize来改变,每个数据库的日志I/O大小会在
SQL SERVER启动后的错误日志中报告,也可通过使用数据库和执行不带参数的过程
sp_logiosize来检查一个数据库的日志I/O大小.如为pubs_log缓冲区配置4K页大小
的缓冲池指令为sp_poolconfig pubs_log,"3M","4K",也可在默认数据缓冲区中创
建一个4K页缓冲池,以供未被捆绑至其它缓冲区的任何数据库的事务日志来使用:
sp_poolconfig "default data cache","2.5M","4K".
此外,可修改缓冲池大小,如从16K页I/O的缓冲池中取出1M空间增加到4K页I/O缓
冲池中:sp_poolconifg pub_cache,"1M","4K","16K"
>; 缓冲区悃绑操作
系统管理员把数据缓冲区分成独立的命名数据缓冲区后,可将数据库对象捆绑到这
些缓冲区上,以控制数据库,表和索引在内存的驻留.若建立命名缓冲区后未将任何对
象捆绑到该命名缓冲区上,则该命名缓冲区所占内存将被浪费,因为任何未指定缓
冲区的对象都将缺省使用默认数据缓冲区default data cache.为了将任何系统表,
包括事务日志syslogs捆绑至缓冲区中,数据库须处于单用户模式.对象被捆绑后立即
生效而无需重启SQL SERVER.注意,进行捆绑或删除捆绑操作时,SQL SERVER需锁定相
应对象,故相应对象上的其它操作可能有延迟.此外,可不删除现有的捆绑而重新捆绑
对象.另外,当被捆绑对象上有脏的读活动或有打开的游标时,捆绑或删除捆绑的操作
将不能进行.
1>;sp_dboption pubs2,single,true 置pubs2库为单用户状态
2>;use pubs2
3>;checkpoint
4>;go 准备进行数据库对象的捆绑。注意,捆绑对象须在对象所在的库中进行。
>;sp_bindcache pubs_cache,pubs2,titles
将pubs2库中的表titles捆绑至缓冲区pubs_cache.
>;sp_bindcache pubs_cache,pubs2,titles.titleind
在titles上捆绑索引,并将pubs2库中的表titles捆绑至缓冲区pubs_cache.
>;sp_bindcache pubs_cache,pubs2,"hj.sale_east"
将pubs2库中用户hj的表sale_east捆绑至缓冲区pubs_cache.
>;sp_bindcache pubs_log,pubs2,syslogs
将pubs2库的事务日志syslogs捆绑至缓冲区pubs_log.
>;sp_bindcache pubs_cache,pubs2,au_pix,"text only"
表的text和image列存储在一个单独的数据结构中,若将此表捆绑至缓冲区,需加
"text"参数.
1>;sp_dboption pubs3,single,true 置pubs3库为单用户状态
2>;use pubs3
3>;checkpoiot
4>;use master
5>;go 准备进行数据库的捆绑,注意,捆绑数据库须在master库中进行。
>;sp_bindcache tempdb_cache,tempdb
将数据库tempdb捆绑至缓冲区tempdb_cache。
注意,被捆绑到日志缓冲区上的对象只能是syslogs表。
可通过sp_helpcache过程查询所有或指定缓冲区及其中被捆绑对象的捆绑信息.如下
例示,其中status列报告缓冲区的捆绑是("V")否("I")有效.若数据库或对象被捆绑至缓
冲池而该缓冲区已被删除,则捆绑信息仍保留在系统表中但缓冲区捆绑被标记无效,所有
无效的捆绑对象均使用默认的数据库缓冲区.若随后用与被删除的缓冲区相同的名字创建
了另一个缓冲区,则当该缓冲区通过重启SQL SERVER而被激活时,上述捆绑又将变为有效.
删除缓冲区捆绑可用两个过程:sp_unbindcache用于删除缓冲区中对一个实体的捆绑;
sp_unbindcache_all则用于删除缓冲区中对所有对象的捆绑,但若捆绑至缓冲区的数据库
超过8个,或数据库的对象超过8个,就不能使用sp_unbindcache_all,此情况下,必须使用
sp_unbindcache删除单个的数据库或对象,使捆绑的数据库不超过8个.此外,当删除缓冲
区对一个对象的捆绑时,内存中所有当前的页都被从缓冲区中清除.
>;sp_unbindcache pubs2
删除对数据库pubs2的捆绑
>;sp_unbindcache pubs2,titles
删除对pubs2库中对titles表的捆绑
>;sp_unbindcache pubs2,titles,titleidind
铲除对pubs2库中titles表上titleidind索引的捆绑.
>; 改变命名数据缓冲区大小
可通过sp_cacheconfig指定一个新的空间以增加或减少指定缓冲区的大小,所有新增空
间都将从缺省数据缓冲区default data cache内的2K缓冲池中被加到指定缓冲区内的2K
页缓冲池中,所有减少的空间亦从指定缓冲区内的2K页缓冲池中被释放到缺省数据库缓冲
区default data cache内的2K缓冲池中.
>;sp_cacheconfig pubs_cache
Cache Name Status Type Config Value Run value
---------------- ------ ------ ---------------- -------------
pubs_cache Active mixed 10.00MB 10.00MB
-------------------------------
Total 10.00MB 10.00MB
===================================================================
Cache:pubs_cache, status:Active, Type:mixed
Config Size:10.00MB, Run size:10.00MB
IO Size Wash Size Config Size Run Size
------- --------- ----------- --------
2KB 720KB 0.00MB 3.00MB
4KB 1024KB 4.00MB 4.00MB
16KB 1424KB 3.00MB 3.00MB
现以sp_cacheconfig pubs_cache,"20M"后重启,则改变如下:
>;sp_cacheconfig pubs_cache
Cache Name Status Type Config Value Run value
---------------- ------ ------ ---------------- -------------
pubs_cache Active mixed 20.00MB 20.00MB
-------------------------------
Total 20.00MB 20.00MB
===================================================================
Cache:pubs_cache, status:Active, Type:mixed
Config Size:20.00MB, Run size:20.00MB
IO Size Wash Size Config Size Run Size
------- --------- ----------- --------
2KB 512KB 0.00MB 13.00MB
4KB 1024KB 4.00MB 4.00MB
16KB 1424KB 3.00MB 3.00MB
返回pubs_log缓冲区报告:
>;sp_cacheconfig pubs_log
Cache Name Status Type Config Value Run value
---------------- ------ ------ ---------------- -------------
pubs_log Active log only 7.00MB 7.00MB
-------------------------------
Total 7.00MB 7.00MB
===================================================================
Cache:pubs_log, status:Active, Type:log only
Config Size:7.00MB, Run size:7.00MB
IO Size Wash Size Config Size Run Size
------- --------- ----------- --------
2KB 512KB 0.00MB 4.00MB
4KB 1024KB 3.00MB 3.00MB
再运行以指令sp_cacheconfig pubs_log,"6M"后重启,则改变为:
>;sp_cacheconfig pubs_log
Cache Name Status Type Config Value Run value
---------------- ------ ------ ---------------- -------------
pubs_log Active log only 6.00MB 6.00MB
-------------------------------
Total 6.00MB 6.00MB
===================================================================
Cache:pubs_log, status:Active, Type:log only
Config Size:6.00MB, Run size:6.00MB
IO Size Wash Size Config Size Run Size
------- --------- ----------- --------
2KB 512KB 0.00MB 3.00MB
4KB 1024KB 3.00MB 3.00MB
欲彻底删除一个数据缓冲区,将其大小复位为0可使用sp_cacheconfig pubs_log,"0".
则将缓冲区状态变为"pend/del",重启SQL SERVER后此改变生效.在执行该操作前,缓冲
区需保持激活状态,捆绑至缓冲区的所有对象仍使用该缓冲区执行I/O操作.若有对象捆
绑于待删除的数据缓冲区,则SQL SERVER重启后,缓冲区的捆绑被标记为无效,所有无效
缓冲区捆绑的对象都使用默认数据缓冲区.当捆绑被标记为无效时,警告信息将被输入
错误日志.注意,默认数据缓冲区不能删除.
相关推荐
【Sybase数据库教程】 ...总结,Sybase数据库教程涵盖了C/S架构的基础知识,强调了其在数据库管理中的优势,以及Sybase系统的关键组成部分。通过学习,读者将能理解和运用Sybase构建高效、可靠的数据库解决方案。
1. 拷贝 SYBASE 安装程序至要安装的服务器硬盘中 2. 执行 SETUP 安装程序,并选择语言和同意协议 3. 选择典型安装和配置所有的 SERVER 4. 配置主服务和其他服务 5. 修改主设备大小、主数据库大小、系统过程设备大小...
本文将详细介绍如何在Sybase数据库中更换字符集,以解决中文乱码问题。 #### 更换字符集步骤详解 1. **检查当前字符集:** - 使用`Sybase Central`工具连接到`master`数据库。 - 执行查询命令`SELECT id, name ...
### Sybase数据库系统配置优化详解 #### 一、引言 Sybase数据库是企业级数据库管理系统之一,在金融、电信等领域有着广泛的应用。然而,在实际应用过程中,可能会遇到数据库性能缓慢的问题,这往往与系统配置密切...
在实际工作中,使用Rational Robot连接Sybase数据库的应用场景非常广泛,例如: - **自动化测试**:在进行Web应用的功能性测试时,可以通过Rational Robot读取或修改数据库中的数据,验证应用的逻辑是否正确。 - **...
### SYBASE数据库备份还原手册知识点解析 #### 一、SYBASE数据库备份与恢复的重要性 - **备份的意义**:SYBASE数据库备份是确保数据安全的重要手段之一。通过定期备份,可以在数据库遭遇物理损坏(如硬盘故障)、...
BCP 是 Sybase 数据库中的一个重要工具,用于导入和导出数据,但是如果不正确地使用 BCP,可能会出现各种错误和问题。 一、 BCP 错误 在使用 BCP 时,可能会遇到各种错误,例如: * ct_connect():network packet...
### Sybase数据库备份方案知识点详解 #### 一、概要:数据备份的重要性 在现代信息系统中,数据被视为企业的核心资产之一。确保数据的安全性和完整性对于维护业务连续性和稳定性至关重要。在Sybase数据库环境下,...
如何远程备份和还原sybase数据库 方法和步骤细则 是我工作的总结
5. sp_helpdb存储过程:sp_helpdb是Sybase数据库中的系统存储过程,用于获取数据库的详细信息。管理员在规划备份策略时,可以使用该存储过程来获取数据库的大小、位置和状态等信息,以便更好地安排备份计划。 6. sp...
描述中提到"网上这个太小众了,共享给大家",暗示jconn3可能不太常见,但对需要连接到Sybase数据库的开发者来说是有价值的资源。 **jconn3详解:** jconn3是SAP公司为Java应用程序提供的一种Sybase数据库连接驱动...
**SYBASE数据库日志详解** SYBASE SQL Server数据库系统依赖于事务日志来跟踪和确保数据的完整性和一致性。事务日志是数据库的关键组件,它记录了所有改变数据库状态的操作,这对于恢复和故障排查至关重要。本文将...
3. 查看 master 数据库中的 syscharsets 表,检查字符集是否已经安装成功。 4. 在 Sybase 的属性中,设置系统字符集为 CP936。 六、总结 Sybase 数据库的还原过程相对复杂,需要准备好备份文件,创建数据库驱动和...
总结起来,创建SYBASE数据库涉及安装配置环境、编写SQL脚本创建数据库、设置用户权限、定义表结构和索引、以及制定备份恢复策略。这个过程需要对数据库管理和SQL语言有深入的理解,同时也需要根据业务需求灵活调整。...
在IT领域,数据库调优是一项至关重要的工作,特别是对于Sybase Adaptive Server Enterprise (ASE) 12.5这样的企业级数据库管理系统而言。调优的目标是为了提高数据库的性能,确保系统在处理大量数据请求时能够保持...
例如,在C#应用程序中连接Sybase数据库进行数据查询时,如果Sybase数据库中的中文字符采用的是GBK编码,而C#应用程序默认使用的是UTF-8编码,那么查询结果中的中文字符就会显示为乱码。 ### 二、解决方案 针对C#...
标题“sqlDbx 连接Sybase数据库”指的是使用sqlDbx工具来连接到Sybase数据库,这在数据库管理和开发过程中是非常常见的操作。sqlDbx是一款功能强大的SQL客户端,它支持多种数据库系统,包括Sybase的ASE(Adaptive ...
《Sybase数据库系统管理指南》是一本专注于 Sybase 数据库管理系统运维与优化的专业书籍。Sybase 是一款功能强大的关系型数据库管理系统,广泛应用于金融、电信、制造业等领域,因其高效、稳定和安全的特性受到业界...
Sybase Adaptive Server Enterprise(ASE),简称Sybase数据库,是企业级的关系型数据库管理系统,以其高性能和稳定性著称。在本文中,我们将深入探讨如何进行Sybase ASE 12.5数据库的4k安装,以充分利用其优势。 ...
运行DDL语句将导致在Oracle数据库中创建对象。 六、迁移数据 迁移数据流程的最后一步是迁移数据。你可以用两种方法中的一种:在线数据移动和离线数据移动。在线数据移动可以从Oracle SQL Developer内部创建到您的...