数据缓冲

2024-05-18

数据缓冲(精选九篇)

数据缓冲 篇1

数据库内存被分为若干大小相等的块, 称之为帧, 每块对应一个帧号。数据库中的数据被分为若干与帧大小相等的块, 称之为页, 每页对应一个页号。正常情况下, 页数要远远多于帧数, 因此需要多次实现页面在内存中的换 入换出。根据局部性原理, 一个在前面使用过的页面很可能接下来也要使用, 换句话说就是最近没使用过的页面接下来使用的概率也不大, 因此该程序主要依据LRU (最少页面使用 置换 )算法来实现页面的替换, 从而降低IO次数, 提供页面的命中率, 进而增加程序的运行效率。

该问题的实验数据为50万行的数据, 每行有读写标志位和页号 (页号为0-49999中的一个整数)。读写标志位指明了该页是只读的还是需要修改的 (写) 的, 实验结果给出了运行时间、I/O次数、命中率等结果。

2 程序设计

双向链表也叫双链表, 是链表的一种, 它的每个数据结点中都有两个指针, 分别指向直接后继和直接前驱 。所以 ,从双向链表中的任意一个结点开始, 都可以很方便地访问它的前驱结点和后继结点, 因此在删除节点的时候双向链表速度较快。

为了快速确定该页是否在缓冲区里, 如果在缓冲区, 该页所在的具体帧号, 定义了一个结构体数组:

刚开始数组a的页号和帧号初始化为-1, 表示所有的页都不在缓 冲区 , 如果页号 为page_id的页在缓 冲区 , a[page_id] .i=1, a [page_id] .j= 所在的帧 号。缓冲 区里有1024个帧, 因此可以定义一个全局变量n,初始化为0, 然后每读入一个不在缓冲区的页, n++, 等到n=1023的时候表明缓冲区已满, 再读入一个不在缓冲区的页的时候需要LRU替换算法。通过结构体a可以得出新读入的页的3种情况:

(1) 缓冲区未 满并且这 页未在缓 冲区 , 直接把该 页加入缓冲区。

(2) 该页在缓 冲区里 , 则先删掉 该页的数据 , 然后把该页的数据添加到链表头。

(3) 缓冲区已 满 , 该页不在缓 冲区 , 需要替换LRU算法替换, 将尾节点换掉。

计算命中和IO次数时可以定义全局变量hit和count, 初始化为0, 对于第一 种情况 , 一定有IO没有命中 , 即count++, hit不变。第二 种情况 (该页在缓 冲区里 ) 一定没有IO, 有命中 , 即hit++ , count不变。第 三种情况 ( 缓冲区已满, 该页不在缓冲区, 需要替换LRU算法替换) 这时由于页不在缓冲 区 , 需要把该 页读进缓 冲区 , 一定有次IO, 即count++。如果被 替换出去 的页被写 过 , 则需要把 该页重新 写回磁盘, 又产生一次IO, count++, 如果该页没被写过, 则直接替换掉即可。第三种情况没有命中, hit保持不变即可。

计算程序 运行时间 时 , 可以采用Get Tick Count() 函数 ,Get Tick Count返回从操 作系统启 动到现在 所经过的 毫秒数 ,它的返回值是DWORD。通过程序运行时调用Get Tick Count()和程序运行完成调用Get Tick Count() 即可算的程序的运行时间。

3 程序实现

首先建立MFC程序, 起名“数据库缓冲区模拟”, 为界面添加控件如图1所示。

其中“trace文件路径”后面的编辑框的ID为“IDC_EDIT1” (就是即系 统默认的名 字 ), “打开trace文件”按 钮ID为“IDC_BUTTON1”, 通过快捷键“CTRL” + “W”为列表控件添加变量名字“m_list”, “实验开始时间”到“命中页数”这5行后面都有一个静态文本框, ID为“IDC_STATIC1”到“IDC_STATIC5”。

由于程序用双向链表来实现 , 先建一个 头文件“doublelist.h”来实现链 表的操作 , 文件内容 如下 :

接下来需要在“数据库缓冲区模拟Dlg.h”中添加信息,首先需要定义全局常量const int max_frame=1024;将缓冲区里面的帧数为1024, 这样如果缓冲区里帧的数量需要变化的时候只需要修改该常量即可, 而无需有其他改变。然后在CMyDlg类里定义 变量n (缓冲区里 已经使用的 帧数 ), count, hit,数组a, 为按钮添加消息相应函数, 文件内容如下所示:

接下来实现“数据库缓冲区模拟Dlg.cpp”文件, 首先需要包含刚实现的“double list.h”头文件, 如下所示:

然后修改初始化函数, 添加需要初始化的信息, 如列表控件的初始化、状态栏编程等, 代码如下:

最后, 双击“打开trace文件路径”按钮, 添加消息响应函数, 该函数的主要流程为获得文件的路径, 打开文件, 解析文件里面的数据, 根据数据分为3种情况作出处理, 关闭文件、销毁链表、计算所需要的数据。具体实现如下:

至此, 整个程序已经完成。

4 程序结果

实验用时有可能误差1秒, 主要是计算的时候需要时间以及Get Tick Count() 返回的是毫秒数, 换算成秒时可能刚好差一秒。

“序号”指的是数 据集里的 第几行 , 读写页号 指的是数据集里的数据,“是否发生页面替换”指的是根据LRU算法该页发生的情况,“帧号“指的是该页在缓冲区所在 的帧号 ,如图2所示。

摘要:主要采用双向链表及LRU(最少页面使用置换)算法来模拟数据库缓冲区中页面的换入换出情况,统计了IO次数,命中页数等信息。可以学到双向链表的使用方法及其在插入删除操作过程中速度上的优势、LRU算法的实现过程、MFC中的列表等控件的使用方法等。

数据缓冲 篇2

为SQLSERVER提供的可用内存越多,SQLSERVER就有越多的资源使用于缓冲区,即可减少服务器从磁盘读取数据以获取静态信息或编译过程计划的次数。调整SQLSERVER所占内存可通过在服务器配置文件中设置totalmemory参数进行,该参数的值指定了SQLSERVER在启动时所需的内存总量,如若该值为10000页,则SQLSERVER在启动时就将试图获得10000*2K=19.5M的内存,若不能满足则启动失败。

注意,若操作系统在进程的整个生命周期中支持动态内存分配,则可在SQLSERVER启动后为其分配额外的内存。

SQLSERVER启动时将内存分配给SQLSERVER可执行代码,SQLSERVER使用的静态内存,用户可配置参数占用的内存及不驻留在缓存上的数据结构,剩余的内存分配给两种SQLSERVER缓冲区即:数据缓冲区和过程缓冲区。两缓冲区的大小对整个系统的性能影响很大,在一个开发系统上可能要增加过多端程缓冲区的专用内存,而在一生产系统上则需减少过程缓冲区大小以便获得更大的数据缓冲区。

1.确定缓冲区大小

在totalmemory配置的总空间中,首先要除去可爱执行代码所占空间,其大小因平台和版本不同而异,可使用sp_configure查询executablecodesize参数的值得知,一般为3-4MB;其次需除去内部结构所占空间,内部结构分成内核结构和服务器结构,亦可将此部分内存看成静态开销和用户配置参数占用两个部分,前者大小不受用户可配置参数的影响,一般为2-3MB,而后者即用户可配置参数的大小则取决于配置参数的类型及其值的大小,包括numberofuserconnections, numberofopendatabases,numberofdevices,numberofopenobjects,numberoflocks等,要得到这些用户配置参数使用内存大小的精确估计,可调用不带选项的sp_configure以显示所有参数和每个参数使用的内存量,其和即是用户配置参数所占用内存。

除去上述占用,剩余内存将以procedurecachepercent配置参数的值按比例分配给过程缓冲区和数据缓冲区,例若值为20,即表示剩余内存的20%分配给过程缓冲区而80%分配给数据缓冲区。

确定缓冲区大小的另一种方法是检查SQLSERVE启动时写入SQLSERVER错误日志的内存信息,其中准确地说明了分配给过程缓冲区和数据缓冲区的数据量,以及多少个过程或其他编译对象能同时驻留在缓冲区中,如相关信息为:

server:Numberofprocbuffersassocated:556

server:Numberofblocksleftforprocheaders:629

server:Memoryallocatedforthedefaultdatacache:4144kb

前两行为过程缓冲区信息,过程缓冲区总大小是分配给过程缓冲区的内存(第一行)及分配给过程头(即存放编译对象如存储过程的地方,根据被存储对象的大小,可能需要一个或多个过程头) 的内存(第二行)之和,可存储在过程缓冲区中的编译对象受到此二者中较小者的限制。上述信息中,第一行指明了分配给过程缓冲区的缓冲区数量为556,每个缓冲区大小为76B,故过程缓冲区大小即为42256B,合21页;第二行则指明了分配给过程头的空间为629页,由此可以得出,过程缓冲区总大小为629+21=650页,合1.27M。

信息中第三行则指明了分配给默认数据库缓冲区的空间大小。此外,若配置了命名缓冲区,则相关信息还将包含每个命名缓冲区的信息,再加上这些命名缓冲区所占内存大小即得到总的数据缓冲区大小。欲知数据缓冲区大小还可通过sp_helpcache过程得到每个缓冲区和捆绑到这些缓冲区中的对象以及与不同缓冲区大小相关的开销的详细信息。

2.缓冲区管理

数据缓冲区保存SQLSERVER当前使用和最近使用过的数据页,索引页和日志页.初装SQLSERVER时,会产生一个默认的数据缓冲区.SQLSERVER允许系统管理员把数据缓冲区分成独立的命名数据缓冲区,然后可把数据库或数据库对象捆绑到这些命名缓冲区上,以对缓冲区空间进行更合理的组织,控制数据库,表和索引在内存的驻留.另外,系统管理员还可在缓冲区内创建缓冲池,用于执行大块的磁盘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报告为查询进行的读操作数量

setprefetchon/off允许或禁止某个会话的预先提取

(1)查询数据库缓冲区的信息

查看默认数据缓冲区的大小,可使用指令sp_cacheconfig“defaultdatacache”,显示结果如下,由两部分构成,上部分报告每个缓冲区中的内存池配置信息并总计了所有配置缓冲区的大小;下部分提供了每个缓冲区中的其他详细信息。

第一部分输出各列含义为:cachename为缓冲区名;status指示该缓冲区是否激活(值为pend/act时表示该缓冲区刚建立,重启后将被激活;值为active时表示该缓冲区目前正处于激活状态;值为pend/del时表示该缓冲区处于激活状态,但在服务器重启后将被删除);type 指示缓冲区是否可以存储数据(“mixed”)和日志页(“logonly”),只有默认缓冲区才会有“default”类型,且默认的数据缓冲区类型不能改变,其他类型缓冲区也不能改为“default”; configvalue显示下次SQLSERVER重启后缓冲区的大小,在此情况下,默认缓冲区不能显式配置,故信息中其大小为0;runvalue显示SQLSERVER目前使用的大小,对于默认数据缓冲区,该值将作为未显示配置到其他缓冲区中的所有数据缓冲区空间。

第二部分输出各列含义为:IOsize显示缓冲池中的缓存大小,所有缓冲池缺省都分配2K空间(有效空间大小为2K,4K,8K,16K);washsize指示缓冲池的刷洗区大小;configsize和runsize显示配置大小和目前使用的大小,该两值在2K的缓冲池中是不同的(因为不能显式配置其大小),而对于其他缓冲池,若试图在缓冲池间移动空间而一些空间又不能被释放时, 上述两值也不同。

CacheNameStatusTypeConfigvalueRunvalue

---------------------------------------------------------

defaultdatacacheActiveDefault0.00MB59.36MB

-------------------------------

Total0.00MB59.36MB

=================================================

Cache:defaultdatacache,status:Active,Type:Default

ConfigSize:0.00MB,Runsize:59.36MB

IOSizeWashSizeConfigSizeRunSize

-----------------------------------

2KB512KB0.00MB59.36MB

(2)配置数据缓冲区

配置数据缓冲区有两种途径:一是使用过程sp_cacheconfig和sp_poolconfig进行交互式配置,二是编辑配置文件中的totalmemory参数后重启使之生效。

A.交互式配置

创建命名缓冲区(新创建的命名缓冲区从缺省缓冲区defaultdatacache中分配空间) ,每次执行sp_cacheconfig或sp_poolconfig时,SQLSERVER都将新的缓冲区或缓冲池信息写入配置文件中并将文件的旧版本拷贝到一个备份文件中,给出备份文件名的信息被送至错误日志。

创建一个新的名为pubs_cache的10M缓冲区指令如下,大小单位除M外,还可为P页,K,G, (默认为K).该指令将改变系统表并将新值写入配置文件但暂不激活缓冲区,要使其生效须重启SQLSERVER.

sp_cacheconfigpubs_cache,“10M”

在重启SQLSERVER使新值生效前,可先用sp_cacheconfig“pubs_cache”查看配置信息。如下,其中的status列值为pend/act说明该缓冲区的配置是挂起的,要待重启后生效,故Configvalue(配置的值)和Runvalue(正在使用的值)不同。

CacheNameStatusTypeConfigvalueRunvalue

--------------------------------------------

pubs_cachepend/actmixed10.00MB00.00MB

-------------------------------

Total10.00MB00.00MB

重启后再允许不带缓冲区名参数的sp_cacheconfig,则信息改变如下,可见pubs_cache 已被激活,默认缓冲区从其空间中分出了10M给该缓冲区.可利用sp_cacheconfig过程设置默认数据缓冲区的最小值,该部分空间将被锁定给默认数据缓冲区.例如设置默认数据缓冲区大小最少不低于25M则指令为sp_cacheconfig“defaultdatacache”“25M”。

CacheNameStatusTypeConfigvalueRunvalue

---------------------------------------------------------

defaultdatacacheActiveDefault0.00MB49.28MB

pubs_cacheActivemixed10.00MB10.00MB

-------------------------------

Total10.00MB59.28MB

===========================================

Cache:defaultdatacache,status:Active,Type:Default

ConfigSize:0.00MB,Runsize:49.28MB

IOSizeWashSizeConfigSizeRunSize

-----------------------------------

2KB512KB0.00MB49.28MB

===========================================

Cache:pubs_cache,status:Active,Type:mixed

ConfigSize:10.00MB,Runsize:10.00MB

IOSizeWashSizeConfigSizeRunSize

-----------------------------------

2KB512KB0.00MB10.00MB

若要保留一个只用于事务日志的缓冲区的类型,可以将缓冲区的类型设为“logonly”, 如创建“logonly”类型的pubs_log缓冲区为sp_cacheconfigpubs_log,“7M”,“logonly”, 下示为该缓冲区在重启前的状态。

CacheNameStatusTypeConfigvalueRunvalue

---------------------------------------------------------

pubs_cachepend/actlogonly7.00MB0.00MB

-------------------------------

Total7.00MB0.00MB

创建命名缓冲区后一般都须将某些对象捆绑到该缓冲区上。若建立命名缓冲区后未将任何对象捆绑到该命名缓冲区上,则该命名缓冲区所占内存将被浪费,因为任何未指定缓冲区的对象都将缺省使用默认数据缓冲区defaultdatacache.

>;

将数据缓冲区划分为缓冲池建立数据缓冲区后,可将其划分成缓冲池,各不同的缓冲池具有不同的I/O大小,当SQLSERVER进行大I/O操作时,可将许多页一次读入缓冲区中,故可提高I/O效率.这些页总是被当作一个单元进行处理,它们共存于缓冲区中,作为一个单元被写到磁盘中。

缓冲池的页大小可为2K,4K,8K,16K,缓冲池的总大小不能低于512K.所有关于缓冲池的配置都是动态的,无需重启SQLSERVER即可生效.SQLSERVER内2K页缓冲池的个数必须保持一个合理的值,否则将会影响SQLSERVER性能,因为某些命令只能使用2K的I/O块如diskinit及某些dbclearcase/“ target=”_blank“ >cc命令,

在pubs_cache数据缓冲区中创建一个每页16K,总空间为7MB的缓冲池,指令如下.通常,创建命名数据缓冲区时,其空间总是被默认划分为每页2K的缓冲池,创建其它页大小的缓冲池时,该2K页缓冲池空间被部分分配给新缓冲池.下例中2K页大小的缓冲池原共有10M空间,分配给7M给16K页的新缓冲池后,2K页缓冲池还剩3M空间。

>;sp_poolconfigpubs_cache,”7M“,”16K“

>;go

>;sp_cacheconfigpubs_cache

CacheNameStatusTypeConfigvalueRunvalue

--------------------------------------------

pubs_cacheActivemixed10.00MB10.00MB

-------------------------------

Total10.00MB10.00MB

====================================

Cache:pubs_cache,status:Active,Type:mixed

ConfigSize:10.00MB,Runsize:10.00MB

IOSizeWashSizeConfigSizeRunSize

-----------------------------------

2KB512KB0.00MB3.00MB

16KB1424KB7.00MB7.00MB

在默认数据缓冲区中也可创建缓冲池,如创建16K缓冲池,空间大小为8M,则指令为:sp_poolconfig”defaultdatacache“,”8M“,”16K“.

若要为一个数据库的事务日志创建缓冲区,应配置缓冲区中大部分空间来匹配日志I/O的大小.默认值为4K,若没有4K的可用缓冲池,SQLSERVER就为日志使用2K的I/O.

日志I/O的大小可通过系统过程sp_logiosize来改变,每个数据库的日志I/O大小会在SQLSERVER启动后的错误日志中报告,也可通过使用数据库和执行不带参数的过程sp_logiosize来检查一个数据库的日志I/O大小.如为pubs_log缓冲区配置4K页大小的缓冲池指令为sp_poolconfigpubs_log,”3M“,”4K“,也可在默认数据缓冲区中创建一个4K页缓冲池,以供未被捆绑至其它缓冲区的任何数据库的事务日志来使用:sp_poolconfig”defaultdatacache“,”2.5M“,”4K“.

此外,可修改缓冲池大小,如从16K页I/O的缓冲池中取出1M空间增加到4K页I/O缓冲池中:sp_poolconifgpub_cache,”1M“,”4K“,”16K“

缓冲区悃绑操作

系统管理员把数据缓冲区分成独立的命名数据缓冲区后,可将数据库对象捆绑到这些缓冲区上,以控制数据库,表和索引在内存的驻留.若建立命名缓冲区后未将任何对象捆绑到该命名缓冲区上,则该命名缓冲区所占内存将被浪费,因为任何未指定缓冲区的对象都将缺省使用默认数据缓冲区defaultdatacache.为了将任何系统表, 包括事务日志syslogs捆绑至缓冲区中,数据库须处于单用户模式.对象被捆绑后立即生效而无需重启SQLSERVER.注意,进行捆绑或删除捆绑操作时,SQLSERVER需锁定相应对象,故相应对象上的其它操作可能有延迟.此外,可不删除现有的捆绑而重新捆绑

对象.另外,当被捆绑对象上有脏的读活动或有打开的游标时,捆绑或删除捆绑的操作将不能进行。

1>;sp_dboptionpubs2,single,true置pubs2库为单用户状态

2>;usepubs2

3>;checkpoint

4>;go准备进行数据库对象的捆绑。注意,捆绑对象须在对象所在的库中进行。

>;sp_bindcachepubs_cache,pubs2,titles

将pubs2库中的表titles捆绑至缓冲区pubs_cache.

>;sp_bindcachepubs_cache,pubs2,titles.titleind

在titles上捆绑索引,并将pubs2库中的表titles捆绑至缓冲区pubs_cache.

>;sp_bindcachepubs_cache,pubs2,”hj.sale_east“

将pubs2库中用户hj的表sale_east捆绑至缓冲区pubs_cache.

>;sp_bindcachepubs_log,pubs2,syslogs

将pubs2库的事务日志syslogs捆绑至缓冲区pubs_log.

>;sp_bindcachepubs_cache,pubs2,au_pix,”textonly“

表的text和image列存储在一个单独的数据结构中,若将此表捆绑至缓冲区,需加”text“参数.

1>;sp_dboptionpubs3,single,true置pubs3库为单用户状态

2>;usepubs3

3>;checkpoiot

4>;usemaster

5>;go准备进行数据库的捆绑,注意,捆绑数据库须在master库中进行。

>;sp_bindcachetempdb_cache,tempdb

将数据库tempdb捆绑至缓冲区tempdb_cache。注意,被捆绑到日志缓冲区上的对象只能是syslogs表。可通过sp_helpcache过程查询所有或指定缓冲区及其中被捆绑对象的捆绑信息.如下例示,其中status列报告缓冲区的捆绑是(”V“)否(”I“)有效.若数据库或对象被捆绑至缓冲池而该缓冲区已被删除,则捆绑信息仍保留在系统表中但缓冲区捆绑被标记无效,所有无效的捆绑对象均使用默认的数据库缓冲区.若随后用与被删除的缓冲区相同的名字创建了另一个缓冲区,则当该缓冲区通过重启SQLSERVER而被激活时,上述捆绑又将变为有效。

删除缓冲区捆绑可用两个过程:sp_unbindcache用于删除缓冲区中对一个实体的捆绑; sp_unbindcache_all则用于删除缓冲区中对所有对象的捆绑,但若捆绑至缓冲区的数据库超过8个,或数据库的对象超过8个,就不能使用p_unbindcache_all,此情况下,必须使用sp_unbindcache删除单个的数据库或对象,使捆绑的数据库不超过8个.此外,当删除缓冲区对一个对象的捆绑时,内存中所有当前的页都被从缓冲区中清除.

>;sp_unbindcachepubs2

删除对数据库pubs2的捆绑

>;sp_unbindcachepubs2,titles

删除对pubs2库中对titles表的捆绑

>;sp_unbindcachepubs2,titles,titleidind

铲除对pubs2库中titles表上titleidind索引的捆绑.

>;改变命名数据缓冲区大小

可通过sp_cacheconfig指定一个新的空间以增加或减少指定缓冲区的大小,所有新增空间都将从缺省数据缓冲区defaultdatacache内的2K缓冲池中被加到指定缓冲区内的2K页缓冲池中,所有减少的空间亦从指定缓冲区内的2K页缓冲池中被释放到缺省数据库缓冲区defaultdatacache内的2K缓冲池中。

>;sp_cacheconfigpubs_cache

CacheNameStatusTypeConfigvalueRunvalue

--------------------------------------------

pubs_cacheActivemixed10.00MB10.00MB

-------------------------------

Total10.00MB10.00MB

=======================================

Cache:pubs_cache,status:Active,Type:mixed

ConfigSize:10.00MB,Runsize:10.00MB

IOSizeWashSizeConfigSizeRunSize

-----------------------------------

2KB720KB0.00MB3.00MB

4KB1024KB4.00MB4.00MB

16KB1424KB3.00MB3.00MB

现以sp_cacheconfigpubs_cache,”20M“后重启,则改变如下:

>;sp_cacheconfigpubs_cache

CacheNameStatusTypeConfigvalueRunvalue

----------------------------------------------

pubs_cacheActivemixed20.00MB20.00MB

-------------------------------

Total20.00MB20.00MB

========================================

Cache:pubs_cache,status:Active,Type:mixed

ConfigSize:20.00MB,Runsize:20.00MB

IOSizeWashSizeConfigSizeRunSize

-----------------------------------

2KB512KB0.00MB13.00MB

4KB1024KB4.00MB4.00MB

16KB1424KB3.00MB3.00MB

返回pubs_log缓冲区报告:

>;sp_cacheconfigpubs_log

CacheNameStatusTypeConfigvalueRunvalue

-------------------------------------------

pubs_logActivelogonly7.00MB7.00MB

-------------------------------

Total7.00MB7.00MB

====================================

Cache:pubs_log,status:Active,Type:logonly

ConfigSize:7.00MB,Runsize:7.00MB

IOSizeWashSizeConfigSizeRunSize

-----------------------------------

2KB512KB0.00MB4.00MB

4KB1024KB3.00MB3.00MB

再运行以指令sp_cacheconfigpubs_log,”6M“后重启,则改变为:

>;sp_cacheconfigpubs_log

CacheNameStatusTypeConfigvalueRunvalue

----------------------------------------------

pubs_logActivelogonly6.00MB6.00MB

-------------------------------

Total6.00MB6.00MB

==========================================

Cache:pubs_log,status:Active,Type:logonly

ConfigSize:6.00MB,Runsize:6.00MB

IOSizeWashSizeConfigSizeRunSize

-----------------------------------

2KB512KB0.00MB3.00MB

4KB1024KB3.00MB3.00MB

欲彻底删除一个数据缓冲区,将其大小复位为0可使用sp_cacheconfigpubs_log,”0“. 则将缓冲区状态变为”pend/del“,重启SQLSERVER后此改变生效.在执行该操作前,缓冲区需保持激活状态,捆绑至缓冲区的所有对象仍使用该缓冲区执行I/O操作.若有对象捆绑于待删除的数据缓冲区,则SQLSERVER重启后,缓冲区的捆绑被标记为无效,所有无效缓冲区捆绑的对象都使用默认数据缓冲区.当捆绑被标记为无效时,警告信息将被输入错误日志.注意,默认数据缓冲区不能删除。

(责任编辑:铭铭)

数据缓冲 篇3

近些年来, 闪存的应用普及非常快, 但相对的, 其算法的更新却相对滞后, 这对闪存的实际能效发挥产生了一定的负面影响, 也不利于相关技术的进一步发展和应用。因此, 本文在这里对闪存的数据库算法进行分析, 探究以分区替换概率为基础的缓冲区替换算法和自适应替换算法对闪存数据库的优化作用。

1 闪存数据库算法概述

随着技术的进步, 闪存在容量、价格等方面的优势越发明显, 因此部分企业开始利用闪存技术来建立数据库系统, 具体来说是将底层存储介质从磁盘换成了闪存固态盘, 以提高读写速度。这种数据库系统在性能方面胜过传统的磁盘数据库, 但是在应用上存在一定的问题, 因为数据库系统的应用需要用到各种算法与数据结构, 而这些算法与数据结构都是基于磁盘数据库的特征开发的, 与新式闪存数据库的适性较差。这种适性低下会令闪存数据库的优势得不到充分发挥, 如果负载情况较为特殊, 甚至会产生闪存数据库性能跌落到磁盘数据库性能以下的情况。因此, 针对闪存数据库特征, 开发全新的高适性算法与数据结构成为目前数据库研究的热点之一, 这里将针对其中缓冲区的替换算法进行讨论。

所谓的缓冲区替换算法是通过对I/O序列的优化来降低磁盘访问次数, 进而达到提高存储效率的目的的。目前所使用的这种算法完全针对磁盘数据库特征, 利用了磁盘作为存储设备在读写延迟方面的一致性, 将算法的重点集中在命中率最大化上, 令磁盘的读写操作次数得以减少。但一旦将闪存作为底层存储设备, 由于其具有读操作速度远高于写操作速度的特性 (一个数量级的差距) , 所以读写延迟完全不一致, 为了获得高性能, 这两种操作必须通过算法区分开来才行。

2 常用的缓冲区替换算法

2.1 CFLRU 算法

CFLRU作为一种缓冲区替换算法对闪存特征有极强的针对性, 这种针对性体现在其替换策略对闪存读写延迟不一致特征的高适性上。为了应对这一特征, CFLRU提高了干净页替换的优先级, 具体来说, CFLRU对LRU链表进行了替换区、工作区的逻辑区分, 而且将替换操作强行限制在了替换区, 以此实现替换区干净页的优先替换。这一措施令闪存的擦除与写入两项操作得以减少, 提高了整体性能。但由于替换区大小需要人为确定, 所以适性较低, 而且存在查找代价过高的现象。

2.2 LRU-WSR 算法

该算法进一步优化了CF-LRU算法, 通过对脏页频度的控制, 实现了对冷脏页在内存中长期驻留这一现象的规避。而且LRU-WER算法能够通过为链表元素设置冷标识位的方法来进行冷页的标明与判断, 该措施为驱逐页和脏页替换的优化提供了基础。因此, LRU-WSR作为一种针对闪存的算法具有很高的性能, 目前的应用也比较广泛, 但其依然存在一定的缺陷, 具体来说就是对冷热属性的判断集中在脏页上, 无法对干净页进行冷热属性判断, 而且一次扫描污染缓冲区的问题依然没有得到解决。

3以替换概率为基础的闪存数据库朴素算法

该算法又称PB-LRU算法, 其在冷数据判断方面的机制和LRU-WSR算法相当类似。具体来说, 以访问特点为依据, 缓冲区数据页可以分为以下几类, 分别是热脏页、冷脏页、热干净页、冷干净页。在实际检测时, 这些数据页均被赋予独立的冷标识位, 利用0和1区分冷页和热页, 冷页的冷标识位是1, 热页的冷标识位是0, 但如果对冷页进行了再访问, 则需将其冷标识位改写为0, 即替换为热数据。因为闪存在操作代价方面, 写远高于读, 所以这4类数据页的替换代价由高到低依次为热脏页、热干净页、冷脏页、冷干净页。

由这个代价关系可以得出, 热脏页、热干净页的替换越少, 闪存I/O性能也就越高, 所以想要提升闪存性能, 就需要通过替换算法区分热页与冷页, 提高热页驻留于缓冲区的时间。但目前的常用替换算法大多没有考虑到这点, 例如LRU-WSR、CF-LRU都没有区分冷热页。

PB-LRU主要通过四方面的思路来解决上述缺陷和问题:第一方面是在区分缓冲区的冷热区时, 将热区与冷区的大小分别固定下来, 并规定页存储依据, 热区存储访问数超过两次的页, 冷区存储访问仅一次或长时间不访问的页。第二方面是改变冷区页的替换法, 因为替换操作全部发生于冷区, 所以根据干净页和脏页的区别来选择算法, 干净页以大概率替换, 脏页以小概率替换, 这样一来冷脏页在缓冲区的长期驻留就能得到避免。第三方面是调整存储位置, 利用MRU位置解决驱逐页问题, 数据页在刚刚读入缓冲区以后, 均存放于冷区MRU位置, 命中后再转移到热区MRU位置。第四方面是利用冷标识位进行冷页与热页的判断, 需要与MRU位置的应用相结合。

该算法的伪代码表如下:

4以替换概率为基础的闪存数据库自适应替换算法

从本质上来看, PB-LRU算法仍属于朴素算法, 虽然对传统算法中的一些常见问题有很好的解决能效, 但是依然存在一些问题。PB-LRU算法的主要问题有二:其一是在干净页寻找方面的开销过大, 因为其干净页的替换是通过对LRU链表的反向搜索实现的, 所以一旦LRU链表过长, 时间开销也会相应激增;其二是在区分冷热区时强制固定了冷热区大小, 一旦工作模式切换, 很有可能造成对工作负载的适性下降。

为此, 我们进一步研究了以替换概率为基础的闪存数据库自适应替换算法, 即APB-LRU。这种算法主要针对PB-LRU的两大问题进行了改进:首先, 针对干净页的寻找问题, APB-LRU对冷区链表也进行了区分, 将干净页与脏页的链表区分开来, 这样一来如果要进行干净页的替换, 直接从干净页链表里获取LRU位置页即可, 不必要的反向搜索时间开销得以避免, 查找速度大幅提升。其次, 不再固定冷热区大小, 通过APB-LRU增添对冷热区的大小比例进行动态调整的功能, 这样一来即使访问模式切换, 也能通过比例调整适应新的工作负载。

5结语

闪存技术的进一步普及令闪存数据库的全面应用呈现出一种必然趋势, 因此其算法的优化工作也越来越重要。为了令闪存数据库的优秀性能能够全面发挥, 甚至进一步提高, 我们需要更合理、更有针对性的缓冲区替换算法, 因此, APB-LRU算法虽然相当优益, 但进一步的优化研究仍需继续进行。

参考文献

[1]敖建华.基于闪存的数据库缓冲区替换算法优化研究[J].电脑知识与技术, 2014 (7) .

[2]卢科.闪存数据库系统存储管理及可裁剪性研究[D].中国科学技术大学, 2012.

压力缓冲技术研究 篇4

压力缓冲技术研究

摘要:高压问题在工业企业中是常见问题,它非常重要,因为它极大的影响到相关人员的安全问题.压力缓冲技术是关于压力变化规律的科学,它能够指导我们处理高压工作和出现的`相关问题.压力缓冲技术在工业企业中具有举足轻重的作用.本文以常见的压力缓冲方法为对象,从数学的角度深入分析了压力缓冲的实现原理,从本质上对压力缓冲技术进行了研究.对于压力缓冲设备的设计、选择和操作等各个环节都有一定的指导意义.本文还针对生产实际提出了一些建议,能够在压力缓冲和相关问题处理中有所帮助.作 者:张衍奎    赵岩    单国强    ZHANG Yan-kui    ZHAO Yan    SHAN Guo-qing  作者单位:张衍奎,单国强,ZHANG Yan-kui,SHAN Guo-qing(黑龙江省石油机械质检站,大庆,163312)

赵岩,ZHAO Yan(大庆油田装备制造集团抽油机制造公司,大庆,163311)

期 刊:中国安全生产科学技术  ISTICPKU  Journal:JOURNAL OF SAFETY SCIENCE AND TECHNOLOGY 年,卷(期):2007, 3(3) 分类号:X933.4 关键词:压力缓冲    工业安全    高压   

浅析燃料气缓冲罐改造 篇5

1 选题理由

1.1 增加经济效益

燃料气缓冲罐内部压力在0.2MPa, 通过底排排放, 粗甲醇罐有呼吸阀, 粗甲醇完全可以送回罐区。回收的粗甲醇可以由罐区送到精馏, 产出精甲醇, 增加效益。

1.2 实际生产需要

避免因燃料气带液, 造成加热炉燃烧器燃烧火焰不稳定, 发生熄火、闪爆的可能。

1.3 技术创新需要

为了进一步回收甲醇, 避免因燃料气带液产生一系列不良后果, 必须对原装置进行改造。改变原设计生产方式, , 既可以节约能源, 又可避免生产事故的发生。

2 现状调查

QC小组对2011年3月燃料气缓冲罐排液情况进行调查统计分析, 列表如下:

3 Á调查结论

从调查结果可以看出, 按原设计方案, 每天合成系统闪蒸汽并入燃料气缓冲罐后所产生的粗甲醇约为300Kg, 而为了系统稳定, 不得不及时将此部分粗甲醇外排, 即造成间接经济损失约573.67元/天, 按此计算, 如将这部分粗甲醇回收送至精馏系统利用, 每年即可为公司创造经济利益209389.55元。同时减少了因粗甲醇排放对环境卫生造成的影响, 避免COD指标超标给水厂生化车间带来处理压力。

4 制定活动目标

4.1 目标确定:

在燃料气缓冲罐导淋处接固定管线连接到合成闪蒸槽出口管线去罐区, 在连接管线上加双阀和盲板, 并增加一个逆止阀。即增加了经济效益, 又减少了环境污染。

4.2 制定目标依据

(1) 工厂领导甲醇生产过程增产、降耗、减排问题非常重视, 在人力、物力上对小组活动给予全力支持。 (2) 通过几年运行经验积累, 各级人员对装置优缺点有了足够掌握。 (3) 工厂建立于ISO9001:2000质量管理体系。 (4) 通过优化工艺控制、严肃工艺纪律、对设备进行技术改造, 有能力加强设备管理实现预定目标。

5 原因分析

针对影响工厂总体环境指标、增加经济效益等问题。QC小组成员认真分析总结归纳整理出因果关系图如下:

小组成员根据生产控制过程调查及设备检查、摸排, 认真确认了燃料气缓冲罐分离下来的甲醇对经济效益和整体环境的影响因素。

影响因素是:燃料气缓冲罐分离下来的粗甲醇如不及时排出, 即有可能使燃料气带液进入加热炉, 易引起加热炉熄火, 或发生闪燃、闪爆等生产安全事故, 给工厂的人身和财产安全带来隐患。

排出的粗甲醇如回收不及时将直接影响分厂内部下水系统及空气的环境指标, 进而影响工厂整体环境指标, 且由于排液量需及时, 使工人工作量加大, 接触危险化学品时间增加, 不符合职业卫生相关法律法规。因此就必须及时地对燃料气缓冲罐进行改造。

6 制定措施

7 实施对策

根据找出的原因制定实施对策, 在分厂领导的支持帮助下, 实施过程如下:

(1) 工艺措施。在燃料气缓冲罐导淋处接固定管线连接到合成闪蒸槽出口管线去罐区, 在连接管线上加双阀和盲板, 并增加一个逆止阀。a.在25万合成, 氧化停车时, 将闪蒸槽到罐区管线用水清洗, 置换。燃料气缓冲罐置换。b.置换合格后, 在闪蒸槽和粗甲醇罐之间管线加盲板, 燃料气缓冲罐置换, 所连管线加盲板, 做可靠隔绝。

(2) 安全措施。a.彻底置换闪蒸槽到罐区管线, 燃料气缓冲罐, 取样分析合格。b.要有专人负责、专人监护, 分析合格, 并配备有泡沫消防车监护。c.动火时管线用N2保护。d.高处作业要做好安全防护措施。采取以上措施后, 平均每天可回收粗甲醇300Kg如得率按83%、单价按2.3元/公斤计算, 即每天可创造经济价值:300×83%×2.3=572.7元

因此每年可创造效益:20.9万元, 减去成本费用6.36万元, 今年最低的可创造效益14.54万元

社会效益:燃料气缓冲罐改造项目提高甲醇产量, 既能减少对环境的污染, 又能为企业创造效益, 满足了国家节能减排的需要。提高了我公司在甲醇市场的竞争力和影响力, 提高我公司的声誉。

8 巩固措施及标准化

为了巩固QC活动成果, 采取以下措施:

(1) 对本次活动进行了总结, 并制定技术方案下发实施, 以便今后参考使用。 (2) 强化工艺操作, 生产部门每天根据燃料气缓冲罐的排液量判断罐内存液量, 确保去往加热炉的燃料气未带液, 避免发生安全生产事故。 (3) 及时推选新知识、新技术、促进小组成员不断进步。

9 总结及展望

生产系统瓶颈缓冲建模研究 篇6

关键词:瓶颈缓冲,建模,多机工序,生产系统

瓶颈缓冲一般用时间缓冲[1]的形式表示, 即为保证瓶颈正常运行而提前一定时间单位向其投入在制品。瓶颈缓冲的设置对生产系统运行有重要影响, 缓冲过大, 物料在瓶颈工序前等待时间过长, 导致在制品库存增加;缓冲过小, 不能很好地保护瓶颈工序, 影响生产物流的平衡。

关于瓶颈缓冲问题, 国内外有不少学者进行研究, 如徐学军等[2]和王凤洲等[3]取瓶颈工序前各道工序加工时间之和的固定比例作为瓶颈缓冲量。Eli Schragenheim[4], RONENB[5], SCHRAGENHEI-ME[6], WUSY[7]都是取瓶颈机器生产前置时间一定比例作为瓶颈缓冲量。Vguide D R[8]提出Guide缓冲量计算模型, 以一个固定的缓冲尺寸系数乘以生产设备的最小加工时间作为缓冲量。Zequeira等[9]研究了最优缓冲库存量与期望设备维修率之间的关系, 为制定设备维修计划提供重要依据。李爱华等[10]建立了单产品下考虑平均维修时间、平均故障间隔时间的瓶颈缓冲模型。陈俊等[11]在李爱华研究的基础上针对再制造系统加工时间和加工路线的不确定性加入一个系数对模型进行修正。王国磊等[12]提出了一种基于可用度理论的缓冲时间估算方法, 将瓶颈前的每道工序看成独立的单部件可修系统, 由马尔可夫过程方法根据故障率和维修率得到该工序的持续时间, 从而估算必需的缓冲时间。陈伟达等[13]在考虑机器平均维修时间、平均故障间隔时间等生产波动影响因素的基础上, 结合再制造系统中废旧品损毁情况不确定所导致的零部件可再利用率不确定、某些零部件加工时产生回流生产的特性, 研究了再制造系统的瓶颈缓冲设置。叶涛锋等[14]在文献[10]研究的基础上, 基于对不同产品生产时间的切换研究了瓶颈缓冲。刘远等[15]针对灰信息 (如机器的故障率和修复率表现为灰数形式, 无法精确数值描述) 下关键设备生产缓冲问题, 构建关键设备生产缓冲的灰色Petri网模型, 结合遗传算法进行仿真运算, 探寻其最优解。

以上方法基本可归纳为两种情况, 一是基于经验估计瓶颈缓冲, 二是考虑机器平均维修时间、平均故障间隔时间等因素对缓冲建模。两种方法中, 前者不够精确, 依据的理由不够充分;后者考虑的因素因果关系明确, 结果相对准确, 但大多数论文都假定各个工序只有单个机器, 不完全符合生产实际。本文基于在制品库存成本、平均故障间隔时间, 平均维修时间建立了瓶颈缓冲的基本模型;并针对实际生产系统中单机工序、多机工序并存的情况, 面向可靠度最小的工序, 研究工序在制品对瓶颈缓冲的修正模型, 以及其他生产波动因素对缓冲的影响, 以期达到更加精确的瓶颈缓冲量。

1 瓶颈缓冲基本模型的建立

在设置生产系统的瓶颈缓冲时, 在制品库存成本、平均故障维修时间和平均故障间隔时间是直接关联的因素。缓冲量大, 虽然有利于生产系统稳定, 但也提高了生产成本, 需要在缓冲与生产成本之间找到平衡点。而如果工序故障的平均维修时间较短, 缓冲就可设置得小一些, 因为其所产生的系统波动较小。如果生产系统在平均故障间隔时间内不能恢复所设置的缓冲量, 则说明缓冲设置过小, 不足以弥补工序故障所带来的波动, 而对生产系统运行产生影响。因此瓶颈缓冲模型的建立将综合考虑这三方面因素。

1.1 以成本最小为目标建立瓶颈缓冲模型

为保证瓶颈正常运行, 避免因前面工序设备故障等因素引发瓶颈闲置, 往往将工序间的在制品量在正常生产所需的基本量的基础上再增加一定的量, 即在制品增量, 该增量所消耗的生产时间就是缓冲。假设I表示在制品增量, p瓶表示瓶颈的生产能力, 则瓶颈缓冲可表示为

实际生产中, 在制品增量I越少, 则缓冲导致的成本就越小, 但I如果太少又可能使瓶颈闲置等待而造成损失, 这里就涉及故障设备的维修度M系 (t) , 因此需要首先对维修度计算进行研究。

1.1.1 系统维修度M系 (t) 的计算

瓶颈前的生产系统模型, 如图1所示, 假设瓶颈前共有i3道工序, 其中k1=1、2, …i1为单机工序, μk1为设备k1的维修率, k2=i1+1, i1+2, …, i2, i2+1, …, i3为多机工序, nk2为k2工序中的设备数量, hk2=1, 2, …, nk2为某道多机工序中的某台设备, μhk2为设备hk2的维修率。

假设每台设备的维修度服从负指数分布, 即M (t) =1-e-μt,

某道多机工序的维修度

瓶颈前生产系统的维修度为:

1.1.2 成本最小的瓶颈缓冲的计算

设w为瓶颈工序闲置时的单位时间损失, W (I) 为瓶颈闲置的损失期望。Cv表示在制品单位时间内的单位库存成本。tr为平均故障间隔时间, L为计划期时间。在计划期L内, 由于瓶颈前的工序设备发生故障而导致的平均产出损失期望为

单位时间在制品库存占用成本与平均产出损失和[6]为

由此可得成本损失最小的瓶颈缓冲最优解BS1。

1.2 考虑平均维修时间下的缓冲设置

设tr为系统的平均维修时间, 当系统出现故障时, 缓冲量的设置至少要大于tr, 否则在系统的维修过程中, 瓶颈工序就会因饥饿而停机, 使系统运行不稳定。因此考虑平均维修时间时的瓶颈缓冲BS2可表示为

1.3 考虑平均故障间隔时间下的缓冲设置

设考虑平均故障间隔时间tF时的缓冲为BS3, pmin为瓶颈工序前生产能力最小的工序的生产能力, 则在平均故障间隔时间内, 瓶颈前各工序可输出的最大物流量为

由此可得

如果max (BS1, BS2) <BS3, 表明考虑前两因素所设置的缓冲在平均故障间隔时间内能得到补充而不影响在下次故障时的正常运作。

当max (BS1, BS2) >BS3, 表明考虑前两因素所设置的缓冲无法在平均故障间隔时间内得到完全补充而可能对下次发生故障时的系统运作产生影响。为避免这种情况发生, 瓶颈缓冲需增加每次故障无法补充的那部分量。令z=max (BS1, BS2) -BS3, 即平均故障间隔时间内缓冲量的不足部分, 此时,

其中:相当于在计划期L内的故障次数。

综上, 瓶颈缓冲的基本模型为

2 基于工序在制品的瓶颈缓冲基本模型的修正

以上研究仅是考虑在制品增量成本、平均故障间隔时间和平均维修时间的情况来设置瓶颈缓冲, 并没考虑到瓶颈工序前的某道工序出现故障时, 其之后工序加工的在制品也有部分可充当缓冲的情况。因为一个工序加工的在制品以转运批量的形式传递到下一道工序, 某一工序若发生故障, 其后的工序还可继续工作, 所完成的在制品还可继续向瓶颈输送。

在生产系统中, 一般是单机工序和多机工序并存, 即系统各工序是以串联并联混合的形式存在, 如图1所示, 而不同工序的故障对系统物流有不同的影响。对于瓶颈前有i3道工序的生产系统而言, 若其中某单机工序出现故障, 则使系统物流断流, 而故障工序到瓶颈工序之间的各工序仍可继续生产, 其在制品有部分可充当缓冲;如果是其中某一多机工序出现故障, 一般生产系统不会断流, 但会减少物流, 此时故障工序后原先生产的在制品仍将继续向瓶颈输送, 而故障后物流减少了的在制品也将送往瓶颈, 这些在制品有部分也可充当缓冲。因此需对前面的缓冲基本模型进行修正, 以准确设置瓶颈缓冲。

下面以生产系统中可靠度最小的工序出现故障的情况研究瓶颈缓冲基本模型的修正, 因为该工序出现故障的概率最大, 是最可能发生的情况, 由于这种情况可能出现在单机工序, 也可能是多机工序, 因而缓冲基本模型的修正分单机工序和多机工序两方面研究。

2.1 单机工序可靠度最小的情况

如图2所示, 假设每道工序间的转运批量为q, 整个生产系统可靠度最小的工序为单机工序k, 若其出现故障, 则之后共有 (i3-k) q的在制品能够到达瓶颈, 为了避免k工序重新正常运行后瓶颈出现断流, 这些在制品不能全部用作缓冲, 必需保留一定的量。

如何确定该保留量以保证生产系统不出现断流?根据TOC原理, 系统正常运行时以瓶颈的生产节拍控制瓶颈之前各工序的生产节拍。当故障工序k重新正常运行时, k到瓶颈前工序i3之间的生产链须以最快的速度生产以减少故障带来的损失, 由于其各工序的生产能力都大于瓶颈, 因此以其中生产能力最小的工序为生产节拍所需要的在制品加工时间即是系统需要的保留时间, 而这部分时间转化为在制品便是所需在制品的保留量。

设当单机工序k出现故障时, 其后的生产系统可作为缓冲量的部分为, 修正缓冲量为。根据上述分析, 的计算公式有

其中为单机工序k出现故障时, 之后工序正常运行下在制品到达瓶颈所需的时间。表示故障工序k恢复运行后各工序在制品到达瓶颈的最短时间。

因此, 单机工序k出现故障时瓶颈缓冲基本模型可修正为

2.2 多机工序可靠度最小的情况

当生产系统中可靠度最小的工序为多机工序时, 其中一台设备发生故障会出现两种情况, 一是提高工序中其他设备的利用率能够弥补故障设备的能力损失, 此时系统正常运行, 其瓶颈缓冲就是基本模型所得的大小BS*;二是提高了工序中其他设备的利用率仍不能弥补故障设备的能力损失, 此时该多机工序的生产能力降低, 输出物流减少, 其后到瓶颈工序之间的在制品量减少。这种情况下的瓶颈缓冲修正需要考虑该工序的生产能力损失率。

2.2.1 多机工序故障时的生产能力损失率

当多机工序中的某一设备故障且导致该工序生产能力降低, 表明该多机工序的生产能力受到损失。故障工序生产能力损失率是衡量该工序生产能力损失的一个参数, 用工序故障前的生产能力减去故障后生产能力的差值与故障前生产能力的比值来计算, 设ηk2表示第k2个多机工序中一台机器故障时的生产能力损失率, 其公式为

2.2.2 瓶颈缓冲的修正

若生产系统中多机工序k可靠度最小, 其中的某设备出现故障导致该多机工序出现能力损失, 设为其后生产系统可作为缓冲的部分, 计算式为

则修正的瓶颈缓冲BS&apos;多计算为

综上, 当可靠度最小的k工序出现故障时, 考虑工序的在制品, 瓶颈缓冲的修正值BS&apos;可归纳为

3 考虑生产系统其他波动的瓶颈缓冲基本模型的修正

对于一个系统而言, 除了机器故障与维修这两个方面的波动外, 还有如加工操作失败、原料短缺、加工时间变动、到达时间变动等等一些难以预料的波动产生, 这些波动往往无法全面考虑, 且不能很好地用定量的方式去研究。

通过生产周期的变化来整体衡量系统的波动情况。因为生产周期是系统运行的最终结果, 由各种波动相互影响、综合作用所致, 因此将瓶颈前各工序组成一个生产周期, 用该生产周期内正常运行不存在故障维修的生产周期方差 (DCT) , 从整体的角度去考量其他波动对生产周期的影响, 将其与平均生产周期 (MCT) 的比值[16]来表示生产系统异常波动的比例, 进而修正前面所设置的缓冲。

据此, 瓶颈缓冲的计算最终可修正为

4 算例分析

现以有八道工序 (最后一道工序为瓶颈工序) 的简单产品瓶颈前生产线为例, 如图3。图中数字表示工序数, 其中单机工序为第1、5道工序, 存在能力损失的多机工序为第2、4、6道工序, 不存在能力损失的多机工序为第3、7道工序, 多机工序内的设备数量都为3台。

各相关参数如表1所示。

当第一道单机工序为可靠度最小的工序, 则

当第二道多机工序为可靠度最小的工序, 则

5结语

数据缓冲 篇7

目前行业所用的散装物料输送与装卸系统中, 带式输送机是最为常见的物料输送设备, 其优点是输送能力强, 输送距离远, 结构简单易于维护, 能方便地实行程序化控制和自动化操作, 广泛应用于煤炭、电力、化工、冶金、港口等行业。缓冲装置是带式输送机受料部位不可缺少的部件, 其作用是保护带式输送机受料部位胶带。现有的缓冲装置主要有缓冲托辊组、滑条式缓冲床等, 本文就常见缓冲装置进行分析, 进而引出一种无间隙快速更换缓冲块的曲线缓冲床的设计及应用。

2 常见缓冲装置分析

2.1 缓冲托辊组

在带式输送机中最早使用且最简单的缓冲装置就是缓冲托辊组, 其主要的特点是加工方便、造价低廉。但随着高带速、高运量和长距离带式输送机的出现, 缓冲托辊组在使用中的问题也愈发突出, 主要总结有以下几点。

缓冲托辊与胶带接触面积小, 造成缓冲托辊的缓冲能力差, 不能够有效的吸收物料下降时的冲击力, 缓冲托辊容易断裂、脱落, 从而造成输送带纵向撕裂。缓冲托辊组间距大, 两托辊组之间为悬空, 物料中尖锐硬物容易插入两托辊之间的输送带, 从而导致输送带纵向撕裂。缓冲托辊组重载时, 会引起两缓冲托辊间的输送带下陷, 使落料段的输送带呈波浪形, 导料槽上的防溢裙板与胶带不能完全接触, 造成落料段密封性不好。物料溢出从而对工作环境造成污染 (图1) 。输送带长时间的运行, 导致缓冲托辊表面容易粘附物料增加了胶带的磨损, 更加严重的后果会引起皮带的跑偏。缓冲托辊内部的转动轴承长期受到物料的冲击, 轴承和密封容易损坏, 从而造成辊体转动不灵活或停止转动, 胶带与托辊从原来的滑动摩擦变为静止摩擦, 从而影响输送带的使用寿命。缓冲托辊也可能在物料冲击下产生跳动而蹦出托辊架, 造成无法回位。

2.2 滑条式缓冲床

滑条式缓冲床是由缓冲条和支架组成, 起缓冲作用的是缓冲条;滑条式缓冲床相对于缓冲托辊组而已, 已经解决了后者大部分的问题, 但滑条式缓冲床还是有一些不足之处。

滑条式缓冲床在工作时夹角处与输送带之间无接触的盲区而造成增加了输送带被锐器或尖锐物料穿透后纵向撕裂的概率 (图2) 。

在高带速、高落差、大块物料的工况下, 滑条式缓冲床不能够充分有效的吸收物料下降时的冲击力, 使得物料下落时对输送带的造成巨大的冲击, 这样大大的减少了传输带的使用寿命。

滑条式缓冲床中缓冲条是等距排布方式, 由于侧边缓冲条之间有一定的空隙, 输送带运行中有卡入缓冲条之间的空隙中风险, 一旦卡入会造成缓冲条与输送带之间的磨损加剧, 相互影响使用寿命。

由于滑条式缓冲床中的缓冲条大多采用螺栓紧固连接, 更换缓冲条时因工况环境恶劣连接螺栓不易卸下, 增加了工人的劳动强度和维护作业时间, 降低了工人的工作效率。

3 曲线缓冲床的结构与原理

本种新型设计提供的是一种无间隙快速更换缓冲块的曲线缓冲床, 目的是解决现有缓冲托辊组与滑条式缓冲床的技术问题, 提供一种防冲击, 使用寿命长, 更换方便的曲线缓冲床。曲线缓冲床分解结构示意图见图3。

一种无间隙快速更换缓冲块的曲线缓冲床, 其特征在于:具有支撑座, 支撑座的上表面为弧形轨道, 支撑座沿弧形轨道上装设有缓冲垫, 缓冲垫的形状与弧形轨道的形状相同, 缓冲垫与弧形轨道之间固定连接, 缓冲垫上嵌设有缓冲块, 数块缓冲块组合覆盖嵌设在缓冲垫上, 缓冲块通过缓冲块卡扣与支撑座沿弧形轨道固定连接。支撑座的上表面的弧形轨道为双弧形轨道。缓冲垫为橡胶缓冲垫。所述缓冲块为超高分子聚乙烯制成。

其工作原理是:当物料冲击输送带时, 胶带与缓冲块无间隙接触承载冲击力, 通过缓冲块下的天然橡胶缓冲垫起到缓冲和吸收冲击力的作用, 来全面保护输送带;根据落料点的长度增加曲线缓冲床的数量, 以配合落料。

4 曲线缓冲床的优点

本新型设计的有益效果:缓冲面由缓冲块组成, 缓冲块采用特殊的UHMW高分子聚乙烯材料, 使输送带与缓冲块之间的摩擦系数非常小, 且耐磨性优异。曲线缓冲床的使用保证了输送带与缓冲块表面完全无间隙接触, 使输送带表面受力均匀, 能有效防止托辊断裂、脱落造成的皮带纵向撕裂, 同时缓冲块下部加装缓冲垫, 而缓冲垫主要选用优良的高弹性特种橡胶层, 能够充分的有效吸收物料下降时的冲击力, 大大降低了物料下落时对输送带的冲击, 真正的改善了落料点的受力状况, 增加输送带的使用寿命, 曲线结构设计使缓冲块更换时间很短, 减少维护时间和费用, 同时也增加了结构强度, 大大提高了生产效率。

5 结语

缓冲床目前在煤炭、电力、化工、冶金、港口等行业广泛使用, 特别对于高带速、高落差及大块物料的工况, 曲线缓冲床防止胶带划伤撕裂等起到了很好的保护作用, 减少了胶带的事故发生, 对生产的连续稳定起到了保障;经过现场的应用, 曲线缓冲床在带式输送机中的作用已越来越被业主认可和肯定。

参考文献

[1]孙镇.缓冲托辊和缓冲床在选煤厂中的应用及比较[J].中国科技博览, 2011 (29) .

缓冲区溢出攻击与防范 篇8

关键词:缓冲区,溢出,攻击

0 引言

缓冲区溢出是一个很严重的安全问题。从攻击者的角度看,现在缓冲区溢出已经发展成了基于栈的缓冲区溢出、基于堆/BSS的缓冲区溢出、格式化缓冲区溢出等多种方式,而且有很多的模板可以直接套用,实现方便;而从编程人员角度,程序员难免会编写出缓冲区溢出漏洞的代码,即使是有经验的程序员也是如此。这两个因素共同作用,加剧了缓冲区溢出引发的安全问题。

1 缓冲区溢出攻击概述

缓冲区是程序运行时计算机内存中的一个连续的块,它保存了给定类型的数据。缓冲区溢出是指当计算机程序向缓冲区内填充的数据位数超过了缓冲区本身的容量,溢出的数据覆盖其他的数据缓冲区域。操作系统所使用的缓冲区又被称为堆栈,在各个操作进程之间,指令被临时存储在堆栈当中,堆栈也会出现缓冲区溢出。

一般情况下,缓冲区溢出会出现以下后果:

①被覆盖的其他数据区中的数据永远丢失;

②如果被覆盖的信息中有能够被程序调用的子程序的列表信息,将引起应用程序运行失败,甚至引起机器重新启动等;

③如果覆盖其他数据区的数据是黑客的入侵程序代码,黑客就获取了程序的控制权。如果该程序是以root运行的,黑客就获得了root权限,然后就可以编译黑客程序、留下入侵后门,实施进一步的攻击。按照这种原理进行的黑客入侵叫做缓冲区溢出攻击。

2 缓冲区溢出的原因

缓冲区溢出最根本的原因是使用不安全的语言,如C语言。很多操作系统以及在操作系统上运行的许多应用程序都是用C语言编写的,而C语言对数组和指针的操作没有自动的边界检查机制,更严重的是一些标准的对字符串操作的库函数本身就是不安全的。

3 缓冲区溢出攻击的原理

攻击者善于在系统当中发现容易产生缓冲区溢出之处,运行特别程序,获得优先级,指示计算机破坏文件,改变数据,泄露敏感信息,产生后门访问点,感染或者攻击其他计算机。

下面是一个简单实例,可以显示缓冲区溢出是如何产生的以及缓冲区溢出是如何被黑客利用的:

下面是函数的执行情况:

(1)函数使用长度为240个字节的缓冲区,该缓冲区的内存地址是00000077

缓冲区地址(8字节)00000077

缓冲区内容(240字节)空白

旧基址指针(8字节)12345678

返回的指令指针(8字节)00401000

(2)程序被执行时,函数开始将B填写到缓冲区中

缓冲区地址(8字节)00000077

缓冲区内容(240字节)BBBBBBBBB……

旧基址指针(8字节)12345678

返回的指令指针(8字节)00401000

(3)超过240个字节,缓冲区被写满了,240个字节以后的内容溢出到下一个内存区域,覆盖旧基址指针和返回指令指针

缓冲区地址(8字节)00000077

缓冲区内容(240字节)BBBBBBBBB……

旧基址指针(8字节)BBBBBBBB

返回的指令指针(8字节)BBBBBBBB

(4)现在假设函数没有填写B,而是插入了恶意代码

缓冲区地址(8字节)00000077

缓冲区内容(240字节)恶意代码……

旧基址指针(8字节)12345678

返回的指令指针(8字节)40100000

(5)缓冲区被填满了恶意代码,旧基址指针也被改写

缓冲区地址(8字节)00000077

缓冲区内容(240字节)恶意代码……

旧基址指针(8字节)××××××××

返回的指令指针(8字节)00401000

(6)接下来返回的指令指针也被改写,不是随机而是根据现在包含恶意代码的缓冲区本身的地址

缓冲区地址(8字节)00000077

缓冲区内容(240字节)恶意代码……

旧基址指针(8字节)××××××××

返回的指令指针(8字节)00000077

(7)在缓冲区被填满之后,程序定位在指令指针提供的地址处,并且开始执行恶意代码。

4 缓冲区溢出攻击的方法

(1)在程序的地址空间里安排适当的代码

攻击者向被攻击的程序输入一个字符串,程序会把这个字符串放到缓冲区里,这个字符串包含的数据是可以在这个被攻击的硬件平台上运行的指令序列。攻击者对已经在被攻击的程序中的代码传递一些参数,然后使程序跳转到他们的目标位置。

(2)控制程序转移到攻击代码

该方法寻求改变程序的执行流程,使之跳转到攻击代码。最基本的就是溢出一个没有边界检查或者其他弱点的缓冲区,这样就扰乱了程序的正常执行顺序。

(3)综合代码植入和流程控制技术

攻击者定位一个可供溢出的自动变量,然后向程序传递一个很大的字符串,在引发缓冲区溢出改变激活纪录的同时植入了代码。

5 缓冲区溢出攻击的防范

5.1 编写正确的代码

为了帮助经验不足的程序员编写安全正确的程序,人们开发了一些工具和技术,这些工具可以通过人为的缓冲区溢出来寻找代码的安全漏洞以及侦测缓冲区溢出的存在。

5.2 非执行的缓冲区

通过使被攻击程序的数据段地址空间不可执行,从而使得攻击者不可能执行被植入被攻击程序输入缓冲区的代码,这种技术被称为非执行的缓冲区技术。

5.3 数组边界检查

所有的对数组的读写操作都应当被检查以确保对数组的操作在正确的范围内。最直接的方法是检查所有的数组操作,但是通常可以用一些优化的技术来减少检查的次数。

5.4 程序完整性检查

(1)手写的堆栈监测

Snarskii为FreeBSD开发了一套定制的能通过监测CPU堆栈来确定缓冲区溢出的libc。这个应用完全用手工汇编写的,而且只保护libc中的当前有效纪录函数。这个应用达到了设计要求,对于基于libc库函数的攻击具有很好的防卫,但是不能防卫其它方式的攻击。

(2)堆栈保护:编译器生成的有效纪录完整性检测

堆栈保护是一种提供程序指针完整性检查的编译器技术,通过检查函数活动纪录中的返回地址来实现。

(3)指针保护:编译器生成程序指针完整性检查

通过在所有的代码指针之后放置附加字节来检验指针在被调用之前的合法性。如果检验失败,会发出报警信号和退出程序的执行,就如同在堆栈保护中的行为一样。

6 结束语

在本文中,我们详细叙述了缓冲区溢出攻击的概念、方法和防范措施,由于缓冲区溢出攻击是目前常见的攻击手段,所以进行这个方面的研究工作是有意义和成效的。事实研究表明,堆栈保护和非执行缓冲区技术对大多数的攻击都能有效地防御,指针保护的方法能对其它的攻击进行有效的防御。

参考文献

[1]徐卓峰.信息安全技术[M].武汉:武汉理工大学出版社,2004.

[2]李海泉,李健.计算机系统安全[M].北京:人民邮电出版社,2001.

[3]刘晨,张滨.黑客与网络安全[M].北京:航空工业出版社,1999.

缓冲罐的应急处理方法 篇9

关键词:缓冲罐,缓冲装置,验收

风城油田位于准噶尔盆地西北缘北端, 距克拉玛依市东北约130km, 该区北界为哈拉阿拉特山, 东邻夏子街油田, 南邻风3井区和沥青矿, 西面为重32、重检3井区。

风城油田作业区在稠油开发工艺上, 以蒸汽吞吐为主, 由于蒸汽吞吐向地层注入了大量的高温高压蒸汽, 极大地改善了油层中稠油的流动性质, 有利于稠油的采出, 但同时将会产生稠油乳状液携带大量的泥砂, 不利于采出液在地层、井筒和地面集输管线中的流动, 经常发生管汇刺漏等问题。

一、概况

风城采油一站共有管辖着11座接转注汽站, 8座转油站, 每站配置2个缓冲罐, 其中100m3缓冲罐36座, 200m3缓冲罐2座。部分缓冲罐罐顶出汽孔携液量大, 罐体外壁、站区墙体及周围地面污染严重。

在清罐过程中, 发现有部分缓冲罐内部构件断裂倒塌 (图1所示) 的情况, 在已清理的13个缓冲罐中, 2-1#、4-4-1#、4-4-2#缓冲罐进油缓冲装置均倒塌。为消除安全隐患及保证生产的顺利进行, 需对该缓冲罐进油缓冲装置进行改造维修。

二、改造施工方案

在保证罐内不动火, 即时恢复生产的前提下, 通过采油站技术人员设计, 安装一套新型来液缓冲装置 (图2所示) , 提前进行罐外预制。在缓冲罐内部以卡瓦的形式进行连接。

三、技术要求

1按照施工计划进行施工, 如有改动需经作业区同意;

1、连接卡扣2、缓冲泄压管线3、连接孔

2施工前做好安全防范措施;

3施工前与采油站相关人员进行现场交底;

4检查站区各工艺流程, 做好施工准备;

5将缓冲罐清洗干净, 打开人孔、排污孔和罐顶通孔, 采取强制通风, 并进行可燃气体、H2S气体检测, 防止爆炸、中毒事故;

6清洁100方缓冲罐来液管线表面, 将新型来液缓冲装置连接卡扣内面预制好耐高温高强度树脂胶, 套在来液管线上, 紧固螺栓, 安装好固定顶丝。

四、施工及验收规范

施工完后由采油站工程技术人员进行了验收, 验收按《立式圆筒型钢制维修储罐施工及验收规范》GB50128及《石油天然气建设工程施工质量验收规范储罐工程检验批质量验收记录》SY4202-2007标准及方案执行。

将预制好的新型来液缓冲装置扣到来液管线之后, 上紧连接螺栓和固定顶丝 (图3) , 实现罐内不动火连接安装。

五、效果评价

通过采油站技术人员的共同努力, 针对缓冲罐内缓冲装置进行了维修改造, 缓冲罐即时恢复了生产。经过近半年的运行, 缓冲装置达到了保证安全生产的目的。

参考文献

上一篇:初三化学的启蒙教育下一篇:界限与衔接