仓酷云

标题: MSSQL网页编程之数据库存取缓冲区的LRU与MRU算法 [打印本页]

作者: 愤怒的大鸟    时间: 2015-1-16 22:30
标题: MSSQL网页编程之数据库存取缓冲区的LRU与MRU算法
这里我们讨论用binlog来实现闪回的方案。数据|数据库|算法
数据库存取缓冲区的LRU与MRU算法



1.CacheHitandCacheMiss

当利用者第一次向数据库收回查询数据的哀求的时分,数据库会先在缓冲区中查找该数据,假如要会见的数据刚好已在缓冲区中(我们称之为CacheHit)那末就间接用缓冲区中读取该数据.

反之假如缓冲区中没有利用者要查询的数据那末这类情形称之为CacheMiss,在这类情形下数据库就会先从磁盘上读取利用者要的数据放进缓冲区,利用者再从缓冲区读取该数据.

很明显从感到下去说CacheHit会比CacheMiss时存取速率快.



2.LRU(比来起码利用算法)andMRU(比来最常利用算法)

所谓的LRU(Leastrecentlyused)算法的基础观点是:当内存的残剩的可用空间不敷时,缓冲区尽量的先保存利用者最常利用的数据,换句话说就是优先扫除”较不常利用的数据”,并开释其空间.之以是”较不常利用的数据”要用引号是由于这里判别所谓的较不常利用的尺度是工资的、不严厉的.所谓的MRU(Mostrecentlyused)算法的意义恰好和LRU算法相反.

上面我们经由过程Oracle9iCache中对LRU和MRU的利用来看一下二者在缓冲区事情机制中的感化和区分:

在Oracle9i中有LRUList的观点:我们能够把LRUList设想成是连续串的缓冲区汇合,两头分离是LRU端和MRU端,当数据库从磁盘上读取数据放进缓冲区时,体系必需先断定缓冲区中有freebuffers,这个时分Oracle9i会扫描LRUList,扫描的基础准绳是:

1.从LRU端到MRU端;

2.当扫描到freebuffer或已扫描的缓冲区数量凌驾临界值时,就会中断扫描举措;

假如在扫描历程顺遂的在LRUList中找到了freebuffer,那末Oracle9i就把从磁盘读出的数据写到freebuffer中然后把freebuffer加到LRUList的MRU端.

那假如扫描历程没有在LRUList中找到freebuffer怎样办?固然是从LRUList的LRU端入手下手扫除缓冲区,云云一来就能够腾出新的空间了.

下图就是一个例子:

利用者查询数据A,初始的时分LRUList中没无数据A,因而Oracle9i到磁盘读取A,然后放到LRUList的MRU端,利用者再从LRUList中读取数据A,同理关于B,C…当LRUList满了今后,假如利用者查询N,此时N不在LRUList中并且LRUList中已没有freebuffer了,此时Oracle9i就入手下手从LRU端减少A以腾出空间寄存N.







我们再来看别的一种情形:

在State3以后,刚好利用者延续的查询A―这将会招致A一向被安排在接近MRU真个缓冲区,了局将如图Statem’所示,你会发明的Statem’与的Statem缓冲区寄存的数据完整一样可是寄存地位纷歧样.此时LRUList满了,假如再放N的时分LRUList`减少的是B,由于A的查询率高于B,以是LRUList让A在缓冲区中呆上较长的工夫而先减少失落”较不经常使用的”的B.






php本地模拟的prepare底层就是mysql_real_escape_string,所以必须得用mysql_set_character_set去设置mysql->charset,否则就存在字符集问题。
作者: 乐观    时间: 2015-1-19 13:27
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
作者: 透明    时间: 2015-1-24 13:13
所以你总能得到相应的升级版本,来满足你的需求。
作者: 仓酷云    时间: 2015-2-1 15:59
这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?
作者: 变相怪杰    时间: 2015-2-7 07:37
然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情
作者: 深爱那片海    时间: 2015-2-21 01:53
对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。
作者: 因胸联盟    时间: 2015-3-6 19:35
发几份SQL课件,以飨阅者
作者: 简单生活    时间: 2015-3-13 07:07
原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。
作者: 金色的骷髅    时间: 2015-3-20 15:38
对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2