ORACLE 体系结构详解
(参考资料)oracle 体系结构详解

oracle 体系结构详解一、体系结构图oracle实例=SGA区+后台进程oracle服务器=oracle实例+oracle数据库数据库实例启动实质上即为:分配SGA区,启动后台进程Oracle 实例1、是访问Oracle 数据库的一种方式2、通常只开一个且仅开一个数据库3、由内存结构和进程结构组成,即SGA区+后台进程连接Oracle实例:包括建立用户连接和创建会话Oracle数据库是作为整体的数据集,由三类文件组成:Data files, Control files, Redo log files二、物理结构主要由三类文件组成:data files ,control files,redo-log files1.data files:数据文件,存放基本表信息(即表中数据等)、索引信息(系统内建有索引表)、回退信息(主要为数据的rollback)、临时信息(如有orderby 等操作时系统有临时信息)、系统引导信息(如数据字典等)2、control files:控制文件(二进制的)。
存放库物理结构、库名、库创建日期、序列号(存有同步信息);控制文件至少有两个一摸一样的,用做备份用参数Controlfiles=/../../文件名1,/../../文件名2;指定3、redo log files:回退日志文件,存放修改前后的信息,主要用于数据的恢复,一个数据库至少有两个redo log files文件,以便可以循环记录信息注:三类文件都有序列号,必须同步才能使用,且已Control files中的序列号为准,其他的必须与其保持一致除了上面三类文件还有:Parameter file(参数文件),Password file(口令文件),Archived log files(归档文件)等参数文件:有二进制、文本两种,用于设定参数的值。
二进制参数文件可以及时更改,即时生效;文本参数文件需重启口令文件:可用orapwd.exe 建口令文件。
Oracle数据库体系结构

Oracle数据库体系结构⼀、oracle数据库体系结构基本组成:Oracle server:⼀般情况下是⼀个instance和⼀个database组成⼀般:1个instance只能对应⼀个数据库。
特殊:1个数据库可以有多个instance(RAC)⼀台服务器上同时可装多套版本的数据库软件,每个数据库软件可建多个数据库,但是每个数据库只对应⼀个instance,也可以理解成每个数据库只有⼀个SID 。
利⽤DBCA建出的每个库都是相对独⽴的,在同⼀服务器上如果创建多库必须将环境变量的参数⽂件做区分,并且在对实例切换时需如下操作:connect ⽤户名/密码@实例的服务名1.1 oracle服务器和实例1.1.1实例由内存区和后台进程组成①内存区:数据库⾼速缓存、重做⽇志缓存、共享池、流池以及其它可选内存区(如Java池),这些池也称为数据库的内存结构②后台进程:包括系统监控进程(SMON)、进程监控(PMON)、数据库写进程(DBWR)、⽇志写进程(LGWR)、检验点进程(CKPT)、其它进程(SMON,如归档进程、RECO进程等)③注:要访问数据库必须先启动实例,实例启动时先分配内存区,然后再启动后台进程,后台进程执⾏库数据的输⼊、输出以及监控其它Oracle进程。
在数据库启动过程中有五个进程是必须启动的,它们是系统监控进程(SMON)、进程监控(PMON)、数据库写进程(DBWR)、⽇志写进程(LGWR)、检验点进程(CKPT),否则实例⽆法创建。
1.1.2服务器Oracle服务器由数据库实例和数据⽂件组成,也就是我们常说的数据库管理系统。
数据库服务器除了维护实例和数据库⽂件之外,还在⽤户建⽴与服务器的连接时启动服务器进程并分配PGA1.2 oracle数据库逻辑结构表空间:据库的基本逻辑结构,是⼀系列数据⽂件的集合;段:不同类型数据在数据库中占⽤的空间,有许多区组合⽽成;区:由连续的块组成,⽬的是为数据⼀次性预留⼀个较⼤的空间,oracle为存储空间进⾏分配回收都是以区为单位的;块:最⼩的存储单位,在创建数据库时指定,不能修改。
第4章ORACLE服务器体系结构和组成

PFILE子句是必需的,SPFILE子句可以省略, 那么SPFILE存贮在缺省位置 <ORACLE_HOME>\DATABASE\下。
ORACLE的体系构造 物理构 造
• 查看效劳器端参数文件
• 在SQL PLUS中使用SHOW PARAMETERS命令
• 修改效劳器端参数文件
• 在9i中直接手工修改本地参数化文件是没 用的,不会改变数据库的设置。
• 利用ALTER SYSTEM SET parameter = value语句可以在数据库运行时修改初始化参 数的值。
• 在SET子句中可以使用SCOPE选项来设 置影响范围,所谓影响范围就是ALTER SYSTEM语句对参数的修改是仅对当前实例 有效〔记录在内存中〕,还是永久有效〔记 录在SPFILE中〕。
日志缓冲存储区〔Log Buffer〕 日志缓冲区
以记录项的形式备份数据库缓
冲区中被修改的缓冲块,这些
记录将被写到日志文件中。
LOG_BUFFER
日志文件
确定日志缓冲区的大小。
ORACLE的体系构造 图示
PMON LCKn RECO SMON
共享池
SGA
数据缓冲区 日志缓冲区
体系构造
Server UUUssseeerrr
当一个日志文件组被填满时
关闭数据库时
ORACLE的体系构造 物理构 造
日志文件写操作图示
Log File 2
ORACLE的体系构造 物理构 造
镜像日志文件是为防止日志文件的丧失,在 不同磁盘上同时维护两个或多个联机日志文件 的副本。 其特点如下: 每个日志文件组至少包含两个日志文件成员。 每组的成员数目一样。 同组的所有成员同时被修改。 同组的成员大小一样,不同组的成员大小可 不同。
Oracle数据库体系结构

Oracle数据库体系结构一.Oracle数据库体系结构1.实例:一组用于管理数据库文件的内存结构,实例对应着数据库;RAC/CDB CDB:CDB为数据库容器,PDB插拔数据库。
在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC),即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。
而实例与数据库不可能是一对多的关系。
当进入ORACLE 12C后,实例与数据库可以是一对多的关系。
RAC:允许多个Oracle数据库实例在多台服务器上共享同一个数据库存储空间,并通过集群来保证高可用性和容错性。
简单来说,RAC就是将多个数据库实例连接起来,形成一个“集群”。
2.ShardingSphere:中间件,不同的数据库对应不同的实例,中间有一个中间件,使用者连接中间件;数据库中间件可以简化对读写分离以及分库分表的操作,并隐藏底层实现细节,可以像操作单库单表那样操作多库多表。
常见的中间件有MyCat,Mysql-Proxy,DRDS,Atlas,Zebra二.Orcal数据库体系结构:Orcal服务器=数据库+实例1.实例是暂时的,它只不过是一组逻辑划分的内存结构和进程结构,它会随着数据的关闭而消失数据库它就是一堆物理文件(控制文件、数据文件、日志文件等等)它呢是永久存在的数据库和实例是一对一的,这种结构我们一般称为单实例体系结构;既然有一对一,那就会有一对多,在复杂的分布式结构中,一个数据库可以对多个实例,多个实例之间可以通过网络来进行数据的一个交互或着交换2.PGA:程序全局区,为单独的服务器进程存储私有数据的内存区域(SAG属于公共资源,PAG是私有的)3.SGA:系统全局区,所有用户都可以访问的共享内存区域启动Oracle数据库时,系统先在内存内规划一个固定区域,用来储存用户需要的数据,以及Oracle运行时必备的系统信息4.后台进程结构,此处只罗列必须启动的5个后台进程系统监控器SMON:负载检查数据库一致性,有必要会在数据库打开时启动数据库恢复进程监视器PMON:负责一个Orcal数据库进程失败时清理资源,会定期唤醒或者被其他主动事务主动唤醒数据库写进程DBWR:负责将更改的数据从“数据库高速缓冲区”写入“数据文件”日志写进程LGWR:负载把日志数据写到练级日志文件检查点进程SKPT:负责检查点操作,主要检查数据库状态一致性和记录系统变更时间5.三个文件1)控制文件:存储数据库结构,一个控制文件只属于一个数据库,包含数据文件日志文件信息及相关状态归档信息,2)数据文件:存储数据,xxx.dbf文件存储着系统数据,数据字典数据,索引数据及用户存储的数据3)日志文件:存储与事务有关的重做日志三.逻辑存储结构1.块是Oracle用来管理存储的最小单元,也是最小的逻辑存储结构2.区是Oracle数据库分配空间的最小单位3.段由多个区组成,这些区可以是连续的,也可以是不连续的4.表空间是Oracle数据库的最大逻辑划分区域,通常用来存放数据表、索引、回滚段等数据对象。
第2讲_Oracle的体系结构

Page 9
2.2.3 控制文件(.ctl)
控制文件(control files)是一个较小的二进制文件,在Oracle服务器在启 动期间用来标识物理文件和数据库物理结构。 创建数据库时,创建控制文件。数据库的启动和正常运行都离不开控制文 件。启动数据库时,Oracle从初始化参数文件中获得控制文件的名字及位 置,打开控制文件,然后从控制文件中读取数据文件和联机日志文件的信 息,最后打开数据库。数据库运行时,Oracle会修改控制文件。 三个控制文件内容一样,镜像关系。
– 将执行结果返回用户
2.5.3 后台进程
为所有数据库用户异步完成各种任务
Page 21
服务器进程
后台进程
用户进程
Page 22
2.5.3.1 DBWR进程
数据库写进程。该进程执行将缓冲区写入数据文件,是负责缓冲存储区管 理的一个ORACLE后台进程。 当缓冲区中的一缓冲区被修改,它被标志为“弄脏”,DBWR的主要任务是 将“弄脏”的缓冲区写入磁盘,使缓冲区保持“干净”。
实例
用户进程 共享缓冲区 库缓冲区 服务器进程 PGA 数据字典
SGA
数据缓冲区 日志缓冲区 大池
Java池
PMON SMON DBWR LGWR CKPT Others
参数文件 口令文件
数据文件
控制文件
重做日 志文件
归档日志文件
数据库
Page 3
数据库和实例
数据库(Database)及实例(Instance) 数据库:物理操作系统文件或磁盘(disk)的集合。 实例:数据库启动时,系统首先在服务器内存中分配系统全局区 (SGA),构成了Oracle的内存结构,然后启动若干个常驻内存 的操作系统进程,即组成了Oracle的进程结构,内存区域和后台 进程合称为一个Oracle实例。
简述oracle体系结构

简述oracle体系结构
Oracle体系结构
Oracle是一种支持分布式数据库管理系统,其体系结构主要包
括E-R图,表和索引,存储过程和视图, SQL,PL/SQL程序和组件,等等。
1. E-R图
E-R图是一种关系数据库管理系统的基本模型,其中实体表示客观事物,关系表示实体之间的联系。
E-R图可以被用来描述实体和它们之间的关系,以及实体的属性和它们之间的关系。
2.表和索引
表是由一系列列组成的逻辑结构,它们包含每行和每列的数据。
索引是一种特别的表,可以被用来提高表的搜索速度和性能。
3.存储过程和视图
存储过程是一种特定类型的程序,它们可以被用来完成某些操作,比如查询和更新。
视图是一种准备好的查询,它们可以被用来返回数据库中的数据。
4.SQL,PL/SQL程序和组件
SQL(Structured Query Language)是一种用于在数据库中执行查询和更新操作的语言,是一种面向关系型数据库的核心语言。
PL/SQL是一种可以嵌入SQL语句的程序设计语言,用来定义复杂的
查询,更新和实现回调函数。
组件是一种模块化的程序,用来构建更复杂的系统。
Oracle数据库体系结构

在Oracle 9i之前,初始化参数都是以文本格式存放 的。在Windows平台上,建议将PFILE文件存放在 %ORACEL_HOME%\database目录中,文件名为 initSID.ora,其中SID为实例名。
(2)SPFILE
SPFILE是以二进制格式存放的。在Window 平台上,Oracle建议将SPFILE存放在 %ORACLE_HOME%\dbs 目录中。文件名为sp。
2.4.2 段
• 段是用户建立的数据库对象(如:表,索引, 簇等)的存储表示。它是有一个或多个区组 成的。
• 当建立表、索引、簇时,Oracle会为这些对 象分配段,以存放它们的数据信息,并且段 名与对象名完全相同。
• 用户建立的每一个表都会有一个在表空间中 存储的逻辑段。为用户所建立的对象生成的 段都要在磁盘上占用空间。
• 日志文件主要用于数据库恢复。
• 查看重做日志文件
SQL> select member from v$logfile;
MEMBER -------------------------------------------------E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG
db_block_size 指定标准oracle块的尺寸
db_cache_size 指定标准数据高速缓存的尺寸
share_pool_size 指定共享池的尺寸
常用初始化参数(一)
参数名 log_buffer sga_max_size java_pool_size large_pool_size
oracle第一篇:oracle12c体系结构

oracle第⼀篇:oracle12c体系结构1、oracle12c的体系结构:内存(逻辑)结构:SGA可以分为数据缓冲区、⽇志缓冲区、共享池、⼤型池、JAVA池、流池。
数据缓冲区(data buffer cache):oracle读取数据的缓存区,执⾏数据的临时存储空间以及修改未提交时,未写⼊磁盘的脏数据。
主要作⽤是提⾼数据的查询速度和减少磁盘的I/O操作;⽇志缓冲区(redo log buffer cache):在执⾏sql语句之前,需要计算出sql执⾏语句的改变向量,并将该向量以⽇志的形式临时存储在该内存区域,然后再去数据缓冲区进⾏数据的更改。
共享池(share pool):共享池分为库缓存、数据字典缓存、sql查询和pl/sql函数结果查询缓存;共享池的⼤⼩9i版本之后就可以直接调整⼤⼩。
库缓存:⽤于临时存储近期已经分过的代码,再次使⽤时就不需要对该代码进⾏分析,直接调⽤。
提⾼语法的执⾏效率。
数据字典缓存:⽤于对近期调⽤的数据字典进⾏缓存,并且数据字典缓存的分配是在库缓存之后的,所以只要库缓存没问题,数据字典缓存也就没问题。
sql查询和pl/sql函数结果查询缓存:当同⼀会话或者多个不同的会话执⾏多次,就会将该查询的结果存储在内存中,当下⼀次查询时直接去调⽤该查询的结果。
在运⽤该执⾏结果之前缓存机制会⾃动的检查查询中的表等对象是否发⽣了变化。
如果变化就会重新查询,使⽤重新查询得到的结果。
⼤型池(large pool):可选择型的内存区域,主要⽤于共享服务器进程的使⽤。
如果未分配再⽤⼑该内存时会在共享池中进⾏分配。
JAVA池(java pool):在运⾏java过程时才使⽤到java池,它作⽤于java对象所需要的堆空间。
但是实际java的实际运⾏还是在数据缓存区。
流池(stream pool):⽤于在redo log中获取⽇志向量,并重新构造执⾏语句,在远程数据库执⾏。
⽽在redo log中提取更改的进程以及应⽤更改的进程将⽤到内存,该内存即是流池。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ORACLE 体系结构(Architecture of ORACLE)第一部分:ORACLE8i体系结构第一章. 概要在本章里你可以了解以下内容1、理解ORACLE 实例的组成2、理解ORACLE 数据库的组成3、理解ORACLE内存结构的组成4、理解后台进程的作用与分工5、理解数据库的物理文件与对应的逻辑结构6、理解ORACLE的整体构架第二章. 理解ORACLE实例2.1 ORACLE SERVERORACLE是一个可移植的数据库——它在相关的每一个平台上都可以使用,即所谓的跨平台特性。
在不同的操作系统上也略有差别,如在UNIX/LINUX上,ORACLE是多个进程实现的,每一个主要函数都是一个进程;而在Windows上,则是一个单一进程,但是在该进程中包含多个线程。
但是从整体构架上来看,ORACLE在不同的平台上是一样的,如内存结构、后台进程、数据的存储。
一个运行着的ORACLE数据库就可以看成是一个ORACLE SERVER,该SERVER由数据库(Database)和实例(Instance)组成,在一般的情况下一个ORACLE SERVER包含一个实例和一个与之对应的数据库,但是在特殊情况下,如8i的OPS,9i的RAC,一个SERVER中一个数据库可以对应多个实例。
一系列物理文件(数据文件,控制文件,联机日志等)的集合或与之对应的逻辑结构(表空间,段等)被称为数据库,简单的说,就是一系列与磁盘有关系的物理文件的组成。
ORACLE内存结构和后台进程被成为数据库的实例,一个实例最多只能安装(Mount)和打开(Open)在一个数据库上,负责数据库的相应操作并与用户交互。
实例与数据库的关系如下图所示:图一ORACLE SERVER2.2 ORACLE内存结构(Memory structure)2.2.1 内存结构的组成Oracle内存结构主要可以分共享内存区与非共享内存区,共享内存区主要包含SGA(System Global Area),非共享内存区主要由PGA(Program Global Area)组成,可以用如下图形表示。
图二ORACLE MEMOERY STRUCTRUE2.2.2全局共享区System Global Area(SGA)System Global Area 是一块巨大的共享内存区域,他被看做是Oracle 数据库的一个大缓冲池,这里的数据可以被ORACLE的各个进程共用。
其大小可以通过如下语句查看:SQL> select * from v$sga;NAME V ALUE-------------------- ---------Fixed Size 39816V ariable Size 259812784Database Buffers 1.049E+09Redo Buffers 327680更详细的信息可以参考V$sgastat、V$buffer_pool主要包括以下几个部分:2.2.2.1共享池(Shared pool)共享池是SGA中最关键的内存片段,特别是在性能和可伸缩性上。
一个太小的共享池会扼杀性能,使系统停止,太大的共享池也会有同样的效果,将会消耗大量的CPU来管理这个共享池。
不正确的使用共享池只会带来灾难。
共享池主要又可以分为以下两个部分:1、SQL语句缓冲(Library Cache)当一个用户提交一个SQL语句,Oracle会将这句SQL进行分析(parse),这个过程类似于编译,会耗费相对较多的时间。
在分析完这个SQL,Oracle会把他的分析结果给保存在Shared pool的Library Cache中,当数据库第二次执行该SQL时,Oracle自动跳过这个分析过程,从而减少了系统运行的时间。
这也是为什么第一次运行的SQL 比第二次运行的SQL 要慢一点的原因。
下面举例说明parse的时间SQL>StartupSQL> select count(*) from usertable;COUNT(*)----------243Elapsed: 00:00:00.08这是在Share_pool 和Data buffer 都没有数据缓冲区的情况下所用的时间SQL> alter system flush SHARED_POOL;System altered.清空Share_pool,保留Data bufferSQL> select count(*) from usertable;COUNT(*)-----------------243Elapsed: 00:00:00.02SQL> select count(*) from usertable;COUNT(*)----------------243Elapsed: 00:00:00.00从两句SQL 的时间差上可以看出该SQL 的Parse 时间约为00:00:00.02对于保存在共享池中的SQL语句,可以从V$Sqltext、v$Sqlarea中查询到,对于编程者来说,要尽量提高语句的重用率,减少语句的分析时间。
一个设计的差的应用程序可以毁掉整个数据库的Share pool,提高SQL语句的重用率必须先养成良好的变成习惯,尽量使用Bind变量。
2、数据字典缓冲区(Data Dictionary Cache)显而易见,数据字典缓冲区是ORACLE特地为数据字典准备的一块缓冲池,供ORACLE 内部使用,没有什么可以说的。
2.2.2.2块缓冲区高速缓存(Database Buffer Cache)这些缓冲是对应所有数据文件中的一些被使用到的数据块。
让他们能够在内存中进行操作。
在这个级别里没有系统文件,,户数据文件,临时数据文件,回滚段文件之分。
也就是任何文件的数据块都有可能被缓冲。
数据库的任何修改都在该缓冲里完成,并由DBWR进程将修改后的数据写入磁盘。
这个缓冲区的块基本上在两个不同的列表中管理。
一个是块的“脏”表(Dirty List),需要用数据库块的书写器(DBWR)来写入,另外一个是不脏的块的列表(LRU List),一般的情况下,是使用最近最少使用(Least Recently Used,LRU)算法来管理。
块缓冲区高速缓存又可以细分为以下三个部分(Default pool,Keep pool,Recycle pool)。
如果不是人为设置初始化参数(Init.ora),ORACLE将默认为Default pool。
由于操作系统寻址能力的限制,不通过特殊设置,在32位的系统上,块缓冲区高速缓存最大可以达到1.7G,在64位系统上,块缓冲区高速缓存最大可以达到10G。
2.2.2.3重做日志缓冲区(Redo log buffer)重做日志文件的缓冲区,对数据库的任何修改都按顺序被记录在该缓冲,然后由LGWR 进程将它写入磁盘。
这些修改信息可能是DML语句,如(Insert,Update,Delete),或DDL语句,如(Create,Alter,Drop等)。
重做日志缓冲区的存在是因为内存到内存的操作比较内存到硬盘的速度快很多,所以重作日志缓冲区可以加快数据库的操作速度,但是考虑的数据库的一致性与可恢复性,数据在重做日志缓冲区中的滞留时间不会很长。
所以重作日志缓冲区一般都很小,大于3M之后的重作日志缓冲区已经没有太大的实际意义。
2.2.2.4 Java程序缓冲区(Java Pool)Java 的程序区,Oracle 8I 以后,Oracle 在内核中加入了对Java的支持。
该程序缓冲区就是为Java 程序保留的。
如果不用Java程序没有必要改变该缓冲区的默认大小。
2.2.2.5大池(Large Pool)大池的得名不是因为大,而是因为它用来分配大块的内存,处理比共享池更大的内存,在8.0开始引入。
下面对象使用大池:1、MTS——在SGA的Large Pool中分配UGA2、语句的并行查询(Parallel Executeion of Statements)——允许进程间消息缓冲区的分配,用来协调并行查询服务器3、备份(Backup)——用于RMAN磁盘I/O缓存2.2.3程序共享区Program Global Area(PGA)Program Global Area(PGA)是用来保存与用户进程相关的内存段,PGA总是由进程或线程在本地分配,其它进程与线程无法访问。
User Global Area(UGA)实际上是会话的状态,它是会话必须始终能够得到的内存。
对于专用服务器进程,UGA在PGA中分配。
对于多线程进程,UGA在Large pool中分配。
PGA/UGA一般保存了用户的变量、权限、堆栈、排序(Sort)空间等信息。
影响PGA/UGA 最大的也就是Sort信息,由初始化参数sort_area_size决定,由于Sort信息分配在UGA中,所以在共享服务器中能更好的利用内存。
2.3 后台进程(Background process)后台进程是Oracle的程序,用来管理数据库的读写,恢复和监视等工作。
Server Process 主要是通过他和user process进行联系和沟通,并由他和user process进行数据的交换。
在Unix机器上,Oracle后台进程相对于操作系统进程,也就是说,一个Oracle后台进程将启动一个操作系统进程;在Windows机器上,Oracle后台进程相对于操作系统线程,打开任务管理器,我们只能看到一个ORACLE.EXE的进程,但是通过另外的工具,就可以看到包含在这里进程中的线程。
后台进程与其它结构的关系如图所示:图三ORACLE BACKGROUP PROCESS在Unix上可以通过如下方法查看后台进程:ps –ef | grep ora_# ps -ef | grep ora_ | grep XCLUA Toracle 29431 1 0 Sep 02 ? 2:02 ora_dbwr_SIDoracle 29444 1 0 Sep 02 ? 0:03 ora_ckpt_SIDoracle 29448 1 0 Sep 02 ? 2:42 ora_smon_SIDoracle 29442 1 0 Sep 02 ? 3:25 ora_lgwr_SIDoracle 29427 1 0 Sep 02 ? 0:01 ora_pmon_SIDOracle系统有5 个基本进程他们是DBWR(数据文件写入进程)LGWR(日志文件写入进程)SMON(系统监护进程)PMON(用户进程监护进程)CKPT(检查点进程,同步数据文件, 日志文件,控制文件)2.3.1 数据写进程DBWR将修改过的数据缓冲区的数据写入对应数据文件维护系统内的空缓冲区这里指出几个容易错误的概念:·当一个更新提交后,DBWR把数据写到磁盘并返回给用户提交完成。