《inix常用知识》PPT课件.ppt

上传人:za****8 文档编号:13190611 上传时间:2020-06-07 格式:PPT 页数:55 大小:837.50KB
返回 下载 相关 举报
《inix常用知识》PPT课件.ppt_第1页
第1页 / 共55页
《inix常用知识》PPT课件.ppt_第2页
第2页 / 共55页
《inix常用知识》PPT课件.ppt_第3页
第3页 / 共55页
点击查看更多>>
资源描述
INFORMIX常用知识,软件中心软件开发二科,INFORMIX原理和结构环境变量连接类型和通信协议数据库状态及启停日常中常用的命令工具数据库物理存储关系怎么增加dbspace?Extent分片监控优化复制,INFORMIX原理和结构,INFORMIX-OnLine动态服务器是INFORMIX的强大的多线程数据库服务器,其设计目的在于发挥对称多处理器(SMP)和单处理器结构的能力,以实现在数据库可伸缩性、可管理性和性能等方面的突破。OnLine动态服务提供最有效的并行数据库结构,以在管理日益增大和复杂化的数据库的同时帮助改善整个系统的性能和可伸缩性。OnLine动态服务器提供高级事务处理,通过新的并行数据查询(PDQ)技术而达到最优的决策支持、高可用性、数据完整性、大型主机能力的系统管理、图形化的监控工具、以及多媒体的能力,所有这些都集成在一个器的核心技术基于INFORMIX的动态可伸缩结构,其目的在于客户/服务器就绪的软件包中。OnLine动态服务器支持INFORMIX所有基于SQL的应用开发工具以及许多第三方工具,并可以在许多基于UNIX的单机或网络环境下的计算机系统上运行。,系统结构,INFORMIX动态服务器采用的是一种多线程体系结构动态服务器系统由三个主要组件构成:共享内存、进程和磁盘共享内存:缓存、内存池、会话(session)、消息缓冲区进程:被称为虚处理器(VP,VirtualProcessors),每一个VP隶属于某一虚处理器类。磁盘:由多个原始磁盘空间组成,称为chunk。Chunk以页(page)为基本单位。多个chunk集合逻辑上构成了数据空间(dbspace)。数据空间用于存储数据库、表、根以及物理日志和逻辑日志。一个数据空间至少包括一个chunk。,环境变量,exportINFORMIXDIR=/informix#设置IBMInformix产品的安装目录exportINFORMIXSERVER=online10#设置DBSERVERDBNAME或DBSERVERALIASES配置参数的值exportPATH=$INFORMIXDIR/bin:$PATHexportONCONFIG=onconfig#配置文件,在$INFORMIXDIR/etc/onconfig,连接类型和通信协议,Vi$INFORMIXDIR/etc/sqlhostsdbservernamenettypehostnameservicenameonline10onipcshm220.220.220.296664online10ontlitcp220.220.220.296664online10onsoctcp220.220.220.296664Nettype说明on-DynamicServerse-StandardEngineipc-IPCconnectiontli-TLIconnectionsoc-socketconnectionshm-Sharedmemorystr-Streampipestcp-TCP/IPprotocolspx-IPX/SPXprotocol,配置,数据库状态及启停,一、数据库状态查看onstat-启动状态:IBMInformixDynamicServerVersion11.50.FC6-On-Line-Up17days02:24:38-3700976Kbytes停用状态:sharedmemorynotinitializedforINFORMIXSERVERonline10,二、启动数据库oninitoninit命令只用于启动实例oninit命令只能在实例处于停止(offline)状态时使用。如果实例处于任何其他状态,那么执行oninit命令完全没作用。,三、停止数据库onmode-kyonmode命令用于停止实例和其他许多工作onmode命令可以改变实例的状态、动态地修改onconfig文件中的一些参数、增加和释放内存、配置B-tree扫描器、配置HDR和Mach11特性、实施检查点等。,日常中常用的工具,一、数据的备份恢复(ontape、dbexport、dbimport)这两种方法的区别是1).ontape产生的是二进制流的数据,只能用于本系统的恢复或是二进制兼容的系统上的恢复;dbexport产生的是ASCII数据,可以用于非二进制兼容的系统上的恢复;2).ontape含有IDS的系统信息,而dbexport不含有IDS的系统信息,只含有数据库,表及数据信息;3).在数据量较大的情况下,ontape比dbimport恢复较快;4).dbexport出来的文件的大小受到OS文件的大小的限制ontape-s:对数据的备份按提示输入本次备份的级数(0级,1级,2级)0级备份是整个ONLINE的备份1级备份是在0级基础上所有修改部分的内容的备份2级备份是在0级或1级的基础上所有修改部分的内容的备份ontape-a:对逻辑日志的备份(自动方式)ontape-c:对逻辑日志的备份(连续方式)ontape-r:对备份的恢复按提示依次恢复数据备份(0级,1级,2级)和逻辑日志备份,Dbexport卸载出ascii文件数据库例子:dbexportcbsbg(做这个之前确保没有别的用户在使用数据库。)dbimport用于将一ascii文件装入一个数据库例子:dbimportddatadbscbsbg(做这个之前先要删除原来的库。)注意带ddatadbs,不然默认导入到rootdbs,二、dbschema获取表模式例子:dbschemadcbsbgtaapf10ssaapf10.sql三、导出和导入表数据SQL语句UNLOAD和LOAD例如,要从数据库db1的表t1导出数据,可用使用以下命令:unloadtomy.datselect*fromt1;要将文件中的数据装载到数据库db1的表t1中,仅需在db1中运行以下命令:loadfrommy.datinsertintot1;unloadtomy.datdelimiter$select*fromt1;loadfrommy.datdelimiter$insertintot1;,数据库物理存储关系,dbspace:是一组chunk的逻辑集合chunk:一个单位的物理磁盘空间。一个chunk由path,offset,size三部分组成。因此我们在使用onspaces命令来加chunk的时候这三个参数是必不可少的。page:是一最基本的I/O单位。一个page的大小是由OS来决定的,有2K/4K/8K/16Kextent:是磁盘上连续page的一组集合,onstat-d,怎么增加dbspace?,1、lsvgdatavg#查看PP大小2、smitlvm#增加lvm3、cd/devchowninformix:informix*rdatadbs01*#更改属组3、suinformixcddatalns/dev/rdatadbs01datadbs01#链接dbs4、onmonitor进去增加或者执行命令onspaces-c-ddatadbs-p/informix/data/datadbs01-o0-s100000,extent,extendsize指定的数据大小的大小为创建该表的初始空间的大小(单位为kbyte)nextsize指定的数据大小的大小为当该表的初始空间使用完毕后数据库表需要向数据空间申请空间大小的初始值当创建表没有具体指定extendsize和nextsixe的值时,extendsize和nextsize的缺省值都为16kbyte,即初始空间和初始新增空间的大小为16k。申请空间的大小=初始新增空间的大小*2(申请空间的次数/16),createtablecbsbg.aapf30(aa30dpnoachar(11),aa30dpnokchar(11),aa30acidinteger,aa30datechar(8),aa30seqinteger,aa30briefchar(3),aa30abstchar(52),aa30crdclschar(4),aa30crdnochar(20),aa30dcchar(1),aa30amtdecimal(16,2),aa30baldecimal(16,2),aa30acnochar(32),aa30dpnochar(11),aa30staninteger,aa30trcodchar(4),aa30oprrchar(10),aa30oprcchar(10),aa30attrchar(5),aa30enseqinteger,aa30pageinteger)fragmentbyexpression(MONTH(aa30date)=1)indatadbs01,(MONTH(aa30date)=2)indatadbs02,(MONTH(aa30date)=3)indatadbs03,(MONTH(aa30date)=4)indatadbs04,(MONTH(aa30date)=5)indatadbs05,(MONTH(aa30date)=6)indatadbs06,(MONTH(aa30date)=7)indatadbs07,(MONTH(aa30date)=8)indatadbs08,(MONTH(aa30date)=9)indatadbs09,(MONTH(aa30date)=10)indatadbs10,(MONTH(aa30date)=11)indatadbs11,(MONTH(aa30date)=12)indatadbs12extentsize500000nextsize500000lockmoderow;,分片,“数据分片”允许在表一级对数据存储进行控制。“表分片”是INFORMIX数据库的一个特征。用户可以对表中的记录或索引进行分组,并且存储在不同的位置,这样可以将数据存储到多个磁盘上,从而减少对磁盘I/O的竞争。数据分片有两种基本类型:基于轮转分片“和”基于表达式分片”,对于“基于轮转法分片”,正如其名字一样,数据是根据轮转法方式存入表中的。“基于表达式分片”则根据表中的一个或多个字段对分片的规则进行定义。一般在预知查询条件时采用这种方式,从而避免查询中对某些分片的扫描。,轮转法(PR)所使用的分片规则CREATETABLExyzFRAGMENTBYROUNDROBININdbspace1,dbspace2.dbspaceN基于范围表达式分片方案CREATETABLExyz(aainteger.)FRAGMENTBYEXPRESSIONaa;1000ANDaa4;sql_statement:监控到的语句sql_stmtname:语句类型,如INSERT/SELECT/UPDATE/DELETE等sql_totaltime:语句执行时间3.关闭系统跟踪Dbaccesssysadmin-EXECUTEFUNCTIONtask(setsqltracingoff);注:虽然INFORMIX的数据库的全局监控对于整个系统的影响只有5%,比其他数据库都要小的多,但是还是一定要记得,每次打开监控之后,务必进行关闭操作。,表空间,dbaccesssysmaster;selectnamedbspace,sum(chksize)allocated,sum(nfree)free,round(sum(chksize)-sum(nfree)/sum(chksize)*100,2)pcusedfromsysmaster:sysdbspacesd,sysmaster:syschunkscwhered.dbsnum=c.dbsnumgroupbynameorderby4desc,name;找出超过90%的表空间,表占用空间情况,dbaccesssysmaster;selectrpad(tabname,(selectmax(length(tabname)fromsystables),),npused*2/1024npusedfromsystableswheretabid99andtabnamenotliketmp%orderby2desc,超过50extents的表,selectt.tabnametabname,count(*)extent_num,max(t.nrows)rowsfromsysmaster:sysextentse,systablestwheree.tabname=t.tabnameandt.tabnamenotlikesys%groupby1havingcount(*)50orderby2desc;如果除了大型分段表以外,表的扩展块超过了50个,那么您应该考虑重新构建这些表以合并扩展块。通过指定表的extentsize和nextsize调整重建表来减少extent数量。同时我们还需要根据表的记录数来判断表的extent设置的问题。通过如下SQL获取每个表占用的extent数及空间大小,以便根据表数据量进一步判断extent是否合理:selectdbsname,tabname,count(*)num_of_extents,sum(pe_size)total_sizefromsysmaster:systabnames,sysmaster:sysptnextwherepartnum=pe_partnumanddbsname=demodbandtabnamenotlikesys%groupby1,2,索引层超过4层的表,selectt.tabname,i.idxname,i.levelsfromsysindexesi,systablestwherei.tabid=t.tabidandi.levels=4orderby3desc超过4层的索引需要重建,如果索引超过4层,请分析表是否已经分片另外可以通过8k或者16Kpagesize来减少,顺序扫描的表及扫描次数,语句1selectp.dbsname,t.tabname,sum(p.seqscans)seqscans,max(t.nrows)nrowsfromsysmaster:sysptprofp,systablestwherep.tabname=t.tabnameandt.nrows100andp.seqscans0andp.dbsnamenotlikesys%andp.tabnamenotlikesys%groupby1,2orderby3desc从输出结果找出那些表的顺序扫描数很高。如果它是一个具有几千甚至几百万行的大表,那么您可能需要考虑向该表添加一些索引,或者考虑使用程序伪指令来强制内部查询优化器为访问该表中的数据选择索引而不是顺序扫描。,语句2selectfirst5t.tabname,dbsname,nrows*rowsize*p.seqscanscosts,p.seqscans,nrowsfromsysmaster:sysptprofp,systablest,sysmaster:sysprofileswherep.tabname=t.tabnameandp.seqscanss.value/50ands.name=seqscansandnrows2000orderby3desc,DBSpaceI/O,selectd.namedbspace,fname1,125chunk_name,sum(pagesread)diskreads,sum(pageswritten)diskwrites,sum(pagesread)+sum(pageswritten)disk_rwesfromsysmaster:syschkioc,sysmaster:syschunksk,sysmaster:sysdbspacesdwhered.dbsnum=k.dbsnumandk.chknum=c.chunknum-#c.chknumgroupby1,2orderby5desc;onstat-Donstat-giof我们的目标是要使所有的dbspace都有平衡的磁盘读写操作。在大多数情况下,这是不现实的,但上面的输出至少让您对dbspaceI/O的分配方式有了一个概念,可以帮助您标识“最热门的”dbspace那些磁盘读写最多的dbspace。如果有些dbspace的磁盘读写操作相当繁忙而另外一些的读写操作则相当空闲,那么您可能需要为Informix引擎调整甚至重新安排物理磁盘布局。我们可以使用onstat-D和onstat-gioq获得类似的信息,前者显示各个块的磁盘读和写,而后者显示磁盘I/O等待队列信息。(重启后从新计数)onstat-giof打印异步I/O块(chunk)或文件的统计数据。例如,我们可能会认为demodbchk得到了太多的活动。如果一个繁忙的数据库占用demodbchk块,我们应考虑迁移此数据库中某些表,分散部分表到其他的活动块。如果一个繁忙的表占用demodbchk块,我们应考虑分裂表(Fragmentation)和分散到其他的活动块,I/O最多的表,selectdbsname,tabname,(isreads+pagreads)diskreads,(iswrites+pagwrites)diskwrites,(isreads+pagreads)+(iswrites+pagwrites)disk_rswsfromsysmaster:sysptprofwheretabnamenotlikesys%anddbsnamenotlikesys%orderby5desc可以根据输出得出哪些表有较大的I/O,也是我们需要重点优化的表。根据从这个查询获得的输出,您可能需要在dbspace间移动一些表以使磁盘I/O平衡得更好。(重启后从新计数),MostCPUSQL,捕获消耗CPU最多的SQL语句selectfirst10sqx_estcost,sqx_estrows,sqx_sqlstatementfromsysmaster:syssqexplainorderbysqx_estcostdesc技巧:由于该方法只能捕获到当前活动SQL的CPU消耗情况。我们需要多次捕获不同时间段的SQL。,查找表锁语句,selectdbsname,tabname,sum(pf_rqlock)aslocks,sum(pf_wtlock)aslockwaits,sum(pf_deadlk)asdeadlocksfromsysactptnhdr,systabnameswherepf_wtlock0andsystabnames.partnum=sysactptnhdr.partnum-anddbsname=dbnamegroupbydbsname,tabnameorderbylockwaitsdesc;,Informix数据库锁表处理,综合业务系统柜员在日终或平时出现锁表导致业务不能进行,(比如表外处理时死锁,表名:blankvouchuse),则操作如下:1以informix用户登陆服务器,dbaccess,选择数据库bias_dbs,Select*fromsystableswheretabname=锁表的表名,记录下字段partnum的值,通过计算器,把该值从10进制变成16进制。2.退出dbaccess到$下,输入命令:onstatk,查找显示的tblsnum的值与partnum相符的记录,记下owner的值。3.onstatu,找到usethread与owner的值相符的记录,找到ssessid.4.onmodezssessid,杀掉死锁的进程。,优化,性能规划:深入了解应用与数据库的交互特征,确立良好的设计、开发、测试迭代过程,上线前消除模型上的性能瓶颈。实例调优:建立性能基准,对比调节数据库、操作系统、存储、网络等的配置,主动监控、消除瓶颈。SQL调优:书写高效SQL,优化相关数据库对象,充分借助优化器,确定最佳执行计划。,性能优化流程首先执行下面的初始检查:获取直接用户的使用反馈,确定性能目标和范围。获取性能表现好与坏时的操作系统、数据库、应用统计信息。对数据库做一次全面健康检查。根据收集的信息,以及对应用特性的了解,构建性能概念模型,明确性能瓶颈所在,以及导致性能的根本原因。首先应该排除操作系统、硬件资源造成的瓶颈。然后针对数据库系统性能进行分析必要时,还需要检查应用日志,因为系统性能问题也可能由于应用非SQL部分造成瓶颈。提出一系列针对的优化措施,并根据它们对性能改善的重要程度排序,然后逐一加以实施。不要一次执行所有的优化措施,必须逐条尝试,逐步对比。通过获取直接用户的反馈验证调节是否已经产生预期的效果,否则,需要重新提炼性能概念模型,直到对应用特性了解进一步准确。重复上述,直到性能达到目标或由于客观约束无法进一步优化。,典型性能问题案例,案例1:数据库应用突然变慢问题特征数据库应用突然变慢,查看系统信息,发现CPU空闲突然很低,IO性能没有明显恶化。处理步骤首先,需要排除操作系统上其他应用程序的问题。通过top(HP)/topas(AIX/Linux)命令可以看到当前占用CPU资源最多的进程,确认是oninit进程。Solaris上默认没有top命令,可以通过/usr/ucb/psaux|more的方式来查看,该输出是根据CPU占用情况来排序的。数据库进程占用了大量CPU资源时,往往是在对大表在做全表扫描。通过4.1中的办法初步确认问题SQL后,如果是条件查询SQL,如带WHERE条件的SELECT/UPDATE/DELETE,还可以通过得到具体的SQL查询计划来确认是在进行全表扫描。此时需要对比dbschema得到的建表脚本,看是否建立了相应的索引,如果没有合适的索引,应该创建;如果应用没有合理应用已有索引,应该考虑修改应用SQL。如果表上有合适的索引,应用SQL也没有问题,那么就有可能是由于表中数据已经变化较大而长时间未对表收集统计信息,造成数据库引擎选择了错误的查询计划。此时应该对该表收集统计信息后,通常可以收到良好的效果。有时候问题SQL还会是INSERT语句,此时通常需要查看表的建表脚本,看看表上是否有过多的索引,是否该表上有不适当的外键指向另一个大表,也可以通过适当删除表中的记录来实现优化。,案例2:检查点持续时间突然显著增加问题特征数据库应用突然变慢,查看系统信息,发现CPU空闲突然很低,IO性能明显恶化。和问题1的显著不同在于,此时IO恶化现象非常明显。Vmstat显示b(block)很大,有很多等待IO的进程,sar显示wio明显超过平时值。观察数据库日志,发现数据库检查点持续时间(checkpointdurationtime)显著增加,平时在3秒以内就能完成,此时需要10秒甚至更长时间才能完成。处理步骤首先还是查看数据库日志和操作系统日志,排除数据库内部错误和操作系统IO错误。如果用的是阵列(RAID),最好再查看一下阵列的日志,出现这种情况最常见的原因是阵列出了问题,比如电池没电,cache没有打开等等。排除了操作系统和数据库内部错误,就需要了解一下是否有新的应用在进行大批量的数据操作,如INSERT/DELETE/UPDATE,是否能将这些操作放在系统相对空闲的时候进行。对于大批量的数据导入操作,在INFORMIX9.4中提供了RAW类型的表,由于不记录逻辑日志,插入速度会快很多,导入完成后,再将表修改为正常模式;对普通表应该先导入数据,再创建索引,注意主键、外键默认都会创建索引,应该在数据导入后在创建。不恰当的应用SQL也会导致IO量非常大,可以用案例1中的办法来找到问题SQL,根据实际情况进行处理。,案例3:检查点持续时间逐渐缓慢增加问题特征数据库稳定运行一段时间后,性能开始下降,检查点持续时间(checkpointdurationtime)开始逐渐增加,系统CPU空闲降低,WIO有所增加。这些情况往往出现在新的应用上线后一段时间,由于在开发和测试环境中数据量小,性能问题不会暴露,当生产环境数据量增长到一定程度后,性能问题就会出现。针对这种情况,需要确认定期在对数据库,尤其是对数据库中的大表,在定期做收集统计数据的工作(updatestatistics),避免数据量的增大造成系统性能急剧下降。找到被顺序扫描多次的大表及其上的问题SQL,进行分析,采取相应办法尝试减少其上的顺序扫描:创建相应索引;修改应用SQL;及时删除表中不必要的数据。,常见调优技巧,找到CPU占用最高的SQL1.在sysmaster库中执行selectsqx_estcost,sqx_sqlstatementfromsyssqexplainorderbysqx_estcostdesc注意:此时看到的仅仅是当前正在执行的SQL需要多看几次2.onstat命令onstat-gact得到当前正在执行的SQLRunningthreads:tidtcbrstcbprtystatusvp-classname75a327318a14d6b42condwait(sm_read)1cpusqlexec76a327b40a14d2802yieldlockwait1cpusqlexec根据rstcb列(不要包括前面的C0000等,仅要后面部分)onstat-u|grepa14d6b4从第三列sessid得到sessionidonstat-gsql即可得到当时正在执行的SQL一般多找几个threads后,就基本可以确定问题SQL,3.示例onstatgactThreads:tidtcbrstcbprtystatusvp-classname141904841765388030eab82running1cpusqlexeconstatu|grep8030eab8Userthreadsaddressflagssessiduserttywaittoutlocksnreadsnwrites8030eab8Y-P-131047informix-84022480011167114722onstatgsql131047SessSQLCurrentIsoLockSQLISAMF.E.IdStmttypeDatabaseLvlModeERRERRVers131047DELETE(all)testdbDRWait10009.03CurrentSQLstatement:deletefrommy_tabLastparsedSQLstatement:deletefrommy_tab得到SQL后,利用setexplainon分析其查询路径,看是否未利用索引,在对大表进行全表扫描根据需要创建相应索引,找到全表扫描较多的表及其SQL1.得到全表扫描较多的表catcheck.sql-系统顺序扫描较多时,被多次顺序扫描的大表,如果有,应该考虑增加索引selectfirst5substr(t.tabname,0,20)tabname,substr(dbsname,0,10)dbname,nrows*rowsize*p.seqscanscosts,substr(p.seqscans,0,8)seqscans,substr(nrows,0,8)nrowsfromsysmaster:sysptprofp,systablest,sysmaster:sysprofileswherep.tabname=t.tabnameandp.seqscanss.value/50ands.name=seqscans-ands.value2000000andnrows2000orderby3desc!dbaccesssysmaster!unloadto/tmp/dbdelimiter;selectdbaccess|trim(name)|check.sqlfromsysdatabaseswherenamenotlikesys%!ksh/tmp/db2.利用onstatgses0r5/onstatgstm的输出信息,根据表名,找到可能的SQL语句。由于以上获取SQL的办法是有局限的,如果无法获取,建议通过查看应用日志或联系开发人员查看源代码的方式来找到。3.利用setexplainon分析其查询路径,确认是在对表进行全表扫描,根据需要创建相应索引。,UPDATESTATISTICS,有以下三种级别:1、LOW:缺省为LOW,此时搜集了关于column的最少量信息。只有systables、syscolumns、sysindexes内的内容改变,不影响sysdistrib。为了提高效率,一般对非索引字段执行LOW操作2、HIGH:此时构建的分布信息是准确的,而不是统计意义上的。因为耗费时间和占用CPU资源,可以只对表或字段执行HIGH操作。对于非常大的表,数据库服务器将扫描一次每个字段的所有数据。可以配置DBUPSPACE环境变量来决定可以利用的最大的系统磁盘空间3、MEDIUM:抽样选取数据分布信息,故所需时间比HIGH要少,什么时候应该执行updateststistics?建议在以下情况,执行updatestatistics操作:对数据做了大量修改,大量是针对数据的分布而言,若数据分布没有明显的改变则可以不做改变的数据库表有与之相关的存储过程,避免在运行时存储过程重新优化数据库升级之后完成对索引的转变updateststistics的方法考虑到速度性能因素,执行updatestatistics的推荐方法:对表执行:updatestatisticsmediumfortable#distributionsonly对每个索引的首字段执行:updatestatisticshigh对复合索引执行:updatestatisticslow必要时对非索引字段但在条件中使用到的字段执行Updatestatisticshigh操作,核心现有UPDATESTATISTICS,(1)用户informix登陆主机后台,cdxql到/usr/Informix/xql目录。(2)按顺序执行以下操作:执行shupdtscript2.sql命令,文件自动生成medist.sh,medium.sh和high.sh;a.执行shmedium.sh,使用onstatgsql查看是否更新完毕;b.当a步操作完成后,执行shmedist.sh,使用onstatgsql查看是否更新完毕;c.当b步操作完成后,执行shhigh.sh,使用onstatgsql查看是否更新完毕;,复制,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!