数据库系统日志的处理和作用

--内存大小,cpu速度,磁盘速度,磁盘大小这四个因素哪个对数据库系统来说最重要?也就是说哪个因素是数据库性能的瓶颈?

其实是磁盘速度。数据库的作用就是把磁盘中东西读到内存中然后处理完毕后提交上去,操作系统能管理的内存也就是几GB,但是超过最大内存容量的数据库很普遍,所以瓶颈还是在磁盘上面。

sqlserver数据库存放数据用的是页,每8个连续的页叫做一个盘区,每页有若干个数据行。sqlserver每次读8页,这样减少了读盘的次数,读上来后放入内存缓存,sqlserver中一个页是8kb,页与页之间形成一个双向链表,首尾相连。

--数据库系统日志作用:怎样恢复数据的?里面都记录了些什么东西?

记录数据操作和被操作的数据,一般来说数据文件大于日志文件,插入或是删除操作时,日志中不但要记录操作还要记录数据,如果专门是插入的话,而且如果更新的次数太多的话,那么数据文件不会怎么改变,但是日志文件会越来越大,sqlserver采用归档模式,用5个日志文件来记录,如果5个都记录满了的话,就开始覆盖第一个日志文件,继续覆盖的方法重新存储这5个日志。

修改数据库时候,客户端发送一个update命令,数据库服务器收到update请求,数据库引擎首先会把表里面的数据先按照8页一个盘区的方式读到缓存里面,读入缓冲区后,就要在硬盘的日志文件中记录数据修改的操作过程以及原始参数,然后根据客户端的要求修改缓冲区中的数据,最后检查点程序向数据库中写入已经提交的事务(一次或者多次数据的修改,也就是批处理数据的修改,这样减少写盘的次数,提高效率)。如果内存里面的数据经过了修改,但是没有写入磁盘,也就是没有和磁盘里面的数据同步,这就是脏数据了。

当你的数据在内存当中但是还没有写入硬盘的数据库中的时候,突然断电了,假如这时候有个银行帐户的转帐,如果发生这种事情的话,银行系统一般如何处理这种情况呢?以前是通过填写单子的方式来保证避免这种问题,现在都是通过日志来保证的,因为先是写入日志,然后才在内存中修改数据,日志中有个叫做检查点的东西,这个checkpoint后面的数据为脏数据块,证明没有写入硬盘,下一次启动系统后,会检查日志中的脏数据块记录,然后把他们再重新作一遍。

Oracle中用的是还原模式,不是归档模式,如果执行delete from删除的话,如果是完全还原模式的话,删除的所有数据都必须记录日志,sqlserver中全表的删除是不写日志的,这是简单的还原模式,无法还原了。


转自:http://hi.baidu.com/zhangxuan1224/blog/item/e812e2f2ac96ef1bb07ec585.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值