|
aio_o_ 发表于 2013-9-6 15:47 ![]()
oracle在insert很多时commit,为什么在等待io完成?脏块太多了么?不得不会写磁盘?
oracle不是在commit时 ...
你的数据库基础知识还有所欠缺,我简单给你介绍一下。
数据库中,有两类重要的文件:日志文件和数据文件
数据文件很明显就会保存数据的,为什么还需要日志文件呢?
这主要是对数据库的数据文件的修改往往在磁盘上都是离散的,事务提交的时候必须保证该事务的数据都写出到磁盘上事务才能被提交,否则断电将会导致数据丢失,很明显这将导致大量的IO。另外,如果只有数据文件,一个事务修改了一些数据,但中途出现了错误时,被修改的数据将没法被恢复,为了解决此问题经过大牛们的研究搞了一个ARIES恢复协议,按照此协议,可以在修改数据的时候,修改内存数据的同时,将修改写入连续的日志块中,事务提交的时候,只需要保证日志被全部写出到磁盘,即可能保证数据被redo或者undo。
这样就保证了数据库的ACID特性。
目前的所有数据库都是有日志文件的,在事务提交的时候只讲日志文件的数据刷出到磁盘上,而数据可以不被写出到磁盘! |
|