用户加入多级组织时系统如何设计

用户加入多级组织时系统如何设计,第1张

主要从几个不同方面设计ORACLE数据库优化方案:一、数据库优化自由结构OFA(OptimalflexibleArchitecture)。二、充分利用系统全局区域SGA(SYSTEMGLOBALAREA)。三、数据库设计中的优化策略数据应当按两种类别进行组织:频繁访问的数据和频繁修改的数据。对于频繁访问但是不频繁修改的数据,内部设计应当物理不规范化。对于频繁修改但并不频繁访问的数据,内部设计应当物理规范化。四、合理设计和管理表。1、利用表分区分区将数据在物理上分隔开,不同分区的数据可以制定保存在处于不同磁盘上的数据文件里。2、避免出现行连接和行迁移。3、控制碎片。4、别名的使用别名是大型数据库的应用技巧,就是表名、列名在查询中以一个字母为别名,查询速度要比建连接表快15倍。5、回滚段的交替使用。五、索引Index的优化设计1、管理组织索引索引可以大大加快数据库的查询速度,索引把表中的逻辑值映射到安全的RowID,因此索引能进行快速定位数据的物理地址。六、多CPU和并行查询PQO(ParallelQueryOption)方式的利用。七、实施系统资源管理分配计划ORACLE提供了DatabaseResourceManager(DRM,数据库资源管理器)来控制用户的资源分配,DBA可以用它分配用户类和作业类的系统资源百分比。在一个OLDP系统中,可给联机用户分配75%的CPU资源,剩下的25%留给批用户。另外,还可以进行CPU的多级分配。除了进行CPU资源分配外,DRM还可以对资源用户组执行并行 *** 作的限制。八、使用最优的数据库连接和SQL优化方案九、充分利用数据的后台处理方案减少网络流量。1、合理创建临时表或视图。2、数据库打包技术的充分利用利用数据库描述语言编写数据库的过程或函数,然后把过程或函数打成包在数据库后台统一运行包即可。3、数据复制、快照、视图,远程过程调用技术的运用

在微软的大数据解决方案中,数据管理是最底层和最基础的一环。

灵活的数据管理层,可以支持所有数据类型,包括结构化、半结构化和非结构化的静态或动态数据。

在数据管理层中主要包括三款产品:SQL Server、SQL Server并行数据仓库和

Hadoop on Windows。

针对不同的数据类型,微软提供了不同的解决方案。

具体来说,针对结构化数据可以使用SQL Server和SQL Server并行数据仓库处理。

非结构化数据可以使用Windows Azure和WindowsServer上基于Hadoop的发行版本处理;而流数据可以使用SQL Server StreamInsight管理,并提供接近实时的分析。

1、SQL Server。去年发布的SQL Server 2012针对大数据做了很多改进,其中最重要的就是全面支持Hadoop,这也是SQL Server 2012与SQL Server 2008最重要的区别之一。今年年底即将正式发布的SQL Server 2014中,SQL Server进一步针对大数据加入内存数据库功能,从硬件角度加速数据的处理,也被看为是针对大数据的改进。

2、SQL Server并行数据仓库。并行数据仓库(Parallel Data Warehouse Appliance,简称PDW)是在SQL Server 2008 R2中推出的新产品,目前已经成为微软主要的数据仓库产品,并将于今年发布基于SQL Server 2012的新款并行数据仓库一体机。SQL Server并行数据仓库采取的是大规模并行处理(MPP)架构,与传统的单机版SQL Server存在着根本上的不同,它将多种先进的数据存储与处理技术结合为一体,是微软大数据战略的重要组成部分。

3、Hadoop on Windows。微软同时在Windows Azure平台和Windows Server上提供Hadoop,把Hadoop的高性能、高可扩展与微软产品易用、易部署的传统优势融合到一起,形成完整的大数据解决方案。微软大数据解决方案还通过简单的部署以及与Active Directory和System Center等组件的集成,为Hadoop提供了Windows的易用性和可管理性。凭借Windows Azure上基于Hadoop的服务,微软为其大数据解决方案在云端提供了灵活性。

这个简单的查询来说,SQL语句是没有办法优化的。

你真的要优化,还真的只有对物理表进行 *** 作:

1:性别使用位字段,反正也有三态(null:未填或不可识别,1:男,0:女),也基本满足了需求,如果你一定要考虑到人妖之类的,那就定义为字节类型,性能也要高。如果定义字节类型最好索引。千万别定义为字符类型,那可就惨了。

2:年龄字段理所当然的应该是整数类型,一般来说也就是int吧,最好是字节(毕竟年龄百岁以内,字节可以表示255岁了)。如果你把年龄定义位字符类型,那就该哭就哭吧。此外,年龄一定要索引。

你要求不考虑索引,只优化SQL,那么,没门!除非你人为的把这个查询语句复杂化了。假如你一定要这样,可以把要查询的字段在select后一个一个的写出来。这样一来可以忽略不必要的字段,二来在指明字段的情况下查询效率比使用通配符要高。

此外,我没用过oracle,between效率如何不知道,想来应该比同时使用大于等于和小于等于要好,你可以比较下它们之间的性能,如果between对性能影响大,则可以考虑放弃。另外,between是否同时包含23和28?这个你也要斟酌下。至于条件编写的顺序,我想应该是有影响的,只是我也没有研究过,从我们人为的思维理解,应该是有,所以写条件的时候,把易识别易判断的放前面,如:

select from 表名 where 性别=1 and 年龄 between 23 and 28

数据库物理模型设计的目标是根据选定的Oracle数据库系统特点和航空物探数据管理与服务的业务处理需求,确定航空物探数据库最优的物理环境、存取方法和存储结构。即通过数据库物理设计,以便达到物理数据库结构的优化,使得在数据库上运行的各种事务响应时间少、存储空间利用率高、事务吞吐率大。

一、数据库布局

航空物探信息系统的维护数据(部门、岗位、人员、人员权限、数据入库检查规则及数据字典等)相对比较稳定。入库前数据需经过各种检查校对,确认数据正确后才能归档,存入航空物探资料数据库,所以存入资料库前的数据可能经常需要修改和删除,相对变化较大;而存入资料数据库中的数据一般不允许修改和删除,以免误 *** 作破坏资料库数据造成损失。

图2-12 航空物探数据库逻辑模型

图2-13 航空物探数据库布局与数据采集流程图

据此,我们采用图2-13所示的数据库数据采集流程,并将航空物探数据库分为资料采集数据库、资料数据库、系统维护数据库分别进行存储和管理,实现数据的统一管理和统一使用,便于数据入库和易于维护等。

航空物探资料数据库是航空物探所有数据最终存储的场所。资料采集数据库是数据归档存入资料数据库前的临时“集散地”,在此接收各项检查,在确认数据无误后归档到资料数据库,然后删除资料采集数据库中已归档的数据。此外,资料采集数据库中还保存数据入库、维护、检查日志及归档记录。

系统维护数据库,存储系统维护信息(如系统功能、数据库表清单等)、安全信息(如信息系统用户的角色、权限、授权的系统功能等),数据字典、入库数据检查规则等。将其与航空物探数据分开,有利于系统维护和管理。

二、数据库空间设置

数据库空间设置包括磁盘空间设置、应用系统表空间设置、撤销表空间、临时表空间、日志空间和索引空间设置。

(一)磁盘空间设置

磁盘空间设置的目标:磁盘性能不能阻碍实现数据库性能,数据库磁盘必须专用于数据库文件,否则非数据库将会影响到数据库性能,且磁盘空间必须满足恢复和性能的要求。

航空物探数据库服务器为IBMP620小型机,8块硬盘,每块硬盘36GB空间,每块物理磁盘建立一个文件系统。为了提高磁盘的反应时间和寻道时间,提高I/O的存取效率,除了一块硬盘用于UNIX *** 作系统外,其余7块磁盘分别存放资料采集数据库、系统维护数据库-日志文件,资料数据库及资料数据库的大字段数据、索引、回滚段和数据日志文件。

(二)应用系统表空间设置

信息系统数据采集过程对数据的事务 *** 作比较频繁,经常进行数据插入(新数据入库)、修改(入库数据有误)和删除 *** 作(数据重新导入或归档入库),因此航空物探资料采集数据库所在的表空间会很活跃。为了不影响其他I/O的竞争,同时也可以提高数据入库的 *** 作效率(50多年的历史数据需要集中入库),分配一个磁盘空间(36GB)为采集库的表空间。由于采集数据归档入资料库后被删除,同时进行数据入库的项目也不是很多,虽仍保留所有的采集日志数据,一个磁盘空间也足够使用。

航空物探资料数据库的二维表和Oracle大字段(BLOB)分别存放在不同的物理磁盘(每个磁盘36GB)上,对同时存在有表格数据和大字段数据的数据库表(如航迹线数据)时,可以提高磁盘I/O效率。随着数据入库的项目越来越多,需要增加相应的物理磁盘或磁盘阵列。

系统维护数据库相对稳定,占用磁盘空间约500M左右。由于系统磁盘有限,把日志文件存放该磁盘中。

(三)撤销表和临时表空间的设置

在Oracle数据库中,撤销的目的是确保事务的回退和恢复。撤销参数有UNDO_MANAGEMENT、UNDO_TABLESPACE和UNDO_RETENTION。

UNDO_MANAGEMENT参数用于数据库中管理撤销数据的方式,航空物探数据库设置为自动模式(auto)。

UNDO_TABLESPACE参数用于指定数据库中保存撤销数据的撤销表空间名称,航空物探数据库撤销表空间名称为UNDO_ARGS_TBSPACE,空间大小设置为20GB,以确保在保留时间内进行恢复。

UNDO_RETENTION参数用于指定已经提交事务的撤销数据在能够覆盖之前应该保留多长时间,本数据库系统设置为60min。

临时表空间是用以存储大量的排序,与撤销表空间存放在一个物理磁盘上,本数据库系统临时表空间设置为500M。

(四)日志空间设置

日志的主要功能是记录对数据库已做过的全部 *** 作。在系统出现故障时,如果不能将修改数据永久地写入数据文件,则可利用日志得到该修改,所以不会丢失已有 *** 作结果。

日志文件主要是保护数据库以防止故障。为了防止日志文件本身的故障,航空物探数据库系统分别在一个独立磁盘和系统维护库磁盘中存放日志文件。若系统出现故障,在下次打开数据库时Oracle数据库系统自动用日志文件中的信息来恢复数据库文件。

根据航空物探数据库信息系统同时登录的用户数及使用的功能,将日志文件大小设置为10GB。

(五)索引表空间设置

为了提高航空物探信息系统的查询和统计速度,把所有索引空间与应用表空间完全分开,从而提高I/O存取效率。航空物探索引表空间大小设置为10GB。

聚集是表的一种存储方法,一般每个基本表是单独组织的,但对逻辑上经常在一起查询的表,在物理上也邻近存放,这样可减少数据的搜索时间,提高性能。

当几个关系(表)以聚集方式组织时,是通过公共属性的值为表聚集的依据。航空物探数据库系统是以项目标识(PROJ_ID)建立聚集的,所有涉及项目标识的数据库表直接引用项目标识聚集。航空物探聚集表空间与索引表空间相同。

三、数据库参数设置

在数据库创建前需要对如下数据库参数进行设置,航空物探参数文件名为Inito-raargsora,各种参数设置如下:

DB_block_size=16384

DB_name=oraagrs

DB_domain=oraargscom

Compatible=910

Nls_characterset=ZHS16GBK

Open_Cursors=100

DB_files=100

DB_file_mutliblock_read_count=16

Log_checkpoint_interval=256000

Processes=200

四、内存设置

航空物探数据库服务器物理内存为4GB,除部分用于系统开销外,其余全部用于数据库。

Oracle使用共享系统全局区(System Globla Area,SGA)内存来管理内存和文件结构,包含DB_block_Bufers、DB_cache_size、Shared_pool_size、Log_Buffer参数。航空物探数据库系统的全局区内存参数设置如下。

DB_block_Buffers参数为SGA中存储区高速缓存的缓冲区数目,每个缓冲区的大小等于参数DB_block_size的大小,DB_block_Buffers=19200(约300MB)。

Shared_pool_size参数为分配给共享SQL区的字节数,是SGA大小的主要影响者,Shared_pool_size=1228800000(12GB)。

DB_cache_size参数是SGA大小和数据库性能的最重要的决定因素。该值较高,可以提高系统的命中率,减少I/O,DB_cache_size=1024000000(1GB)。

Log_Bufer参数为重做日志高速缓存大小,主要进行插入、删除和修改回退 *** 作,Log_buffer=5120000(5MB)。

五、优化设置

由于航空物探信息系统的采集软件和应用软件是采用MSNETC#进行开发的,应用程序与数据库之间的连接有传统的ODBC和OLEDB两种方式。为了支持ODBC在OLEDB技术上建立了相应的OLEDB到ODBC的调用转换,而使用直接的OLEDB方式则不需转换,从而提高处理速度。

在建立数据库表时,参数Pctfree和Pctused设置不正确可能会导致数据出现行链接和行迁移现象,即同一行的数据被保存在不同的数据块中。在进行数据查询时,为了读出这些数据,磁头必须重新定位,这样势必会大大降低数据库的执行速度。因此,在创建表时应充分估计到将来可能出现的数据变化,正确地设置这两个参数,尽量减少数据库中出现的行链接和行迁移现象。

航空物探资料采集数据库表的插入、修改和删除的频率较高,Pctfree设置为20,Pctused设置为40;系统维护数据库表相对稳定,Pctfree设置为10,Pctused设置为15;资料数据库表除了增加数据外基本不进行修改和删除 *** 作,Pctfree设置为10,Pctused设置为5。

六、扩展性设置

多CPU和并行查询PQO(Parallel Query Option)方式的利用:CPU的快速发展使得Oracle越来越重视对多CPU的并行技术的应用,一个数据库的访问工作可以用多个CPU相互配合来完成。对于多CPU系统尽量采用并行查询选项方式进行数据库 *** 作。航空物探数据库服务器为2个CPU,在程序查询中采用了并行查询的方式。

在航空物探工作量统计、飞行小时统计、测量面积统计和岩石物性统计中,为了加快统计效率,在相应的查询语句中增加了并行查询语句。

随着航空物探高精度测量程度的不断提高,测量数据将越来越大。为了满足航空物探查询效率及发展,将航磁测量数据与校正后航磁测量数据按比例尺分1:20万以下、20万~50万、1:50万以上分别存放3张不同的数据库表。

七、创建数据库

在完成数据库布局、空间设置、内存设置、数据库参数设置、扩展性设置和优化设置后,进行航空物探数据库物理模型设计,即航空物探数据库实体创建。由于航空物探空间数据库逻辑模型是采用ESRI提供的ArcGIS UML构建的Geodatabase模型,因此,使用ESRI公司提供的CaseTools将航空物探数据UML模型图转成空间数据库(Geodatabase)实体(图2-14)。

航空物探属性数据库表(二维表)是采用Power Designer数据库设计平台直接把数据库关系模型生成数据库脚本来创建的。

经过数据库的概念设计、逻辑设计和物理设计,最终生成航空物探数据库。

图2-14 航空物探数据库物理模型实现

八、空间数据的索引机制

对于海量的空间数据库而言,数据库的 *** 作效率是关系到数据库成败的关键问题。为了提高数据的访问、检索和显示速度,数据在加载到数据库时,要素类数据建立了空间索引,栅格数据构建了金字塔结构,对象类数据采用与数据库直接联接的访问机制。

(一)空间索引

为了提高要素类数据的查询性能,在建立航空物探空间数据库时,创建了空间索引机制。常用的空间索引有格网索引、R树索引、四叉树索引等。Geodatabase采用格网索引方式。所谓格网索引是将空间区域划分成适合大小的正方形格网,记录每一个格网内所包含的空间实体(对象)以及每一个实体的封装边界范围,即包围空间实体的左下角和右上角坐标。当用户进行空间查询时,首先计算出用户查询对象所在格网,然后通过格网编号,就可以快速检索到所需的空间实体。

确定适合的格网级数、单元大小是建立空间格网索引的关键。格网太大,在一个格网内有多个空间实体,查询检索的准确度降低。格网太小,则索引数据量成倍增长和冗余,检索的速度和效率较低。数据库的每一数据层采用不同大小、不同级数的空间索引格网单元,但每层最多级数不能超过三级。格网单元的大小不是一个确定性的值,需要根据对象的大小确定。空间索引格网的大小与检索准确度之间的关系如图2-15所示。

选择格网单元的大小遵循下列基本原则:

1)对于简单要素的数据层,尽可能选择单级索引格网。减少RDBMS搜索格网单元索引的级数,缩短空间索引搜索的过程,例如航迹线要素类。

图2-15 索引格网大小与检索准确度的关系

2)如果数据层中的要素封装边界大小变化比较大,应选择2或3级索引格网。Geodata-base最多提供三级格网单元。每一要素封装边界在适合的级内,减少了每一封装边界有多个格网的可能性。在空间索引搜索过程中,RDBMS则必须搜索所有3个格网单元级,这将消耗大量的时间。

3)若用户经常对图层执行相同的查询,最佳格网的大小应是平均查寻空间范围的15倍。

4)格网的大小不能小于要素封装边界的平均大小,为了减少每个格网单元有多个要素封装边界的可能性,格网单元的大小应取平均格网单元的3倍。最佳格网单元的大小可能受图层平均查询的影响。

空间域是按照要素数据集定义的,空间索引格网是按照要素类设置的。它们都是在创建Geodatabase数据库时设置,并一经设置,中间不许改变;所以一定要在充分分析数据的情况下确定它们的值。航空物探数据主要是简单要素类,空间跨度为70°。根据上述原则,航空物探数据选择单级索引格网,格网大小为20°。

(二)金字塔结构

金字塔结构的核心是将栅格数据逐级进行抽稀,形成多级分辨率的重采样数据,并将其分割成块,按一定的文件格式(金字塔文件格式)存储成磁盘文件;在以后进行图像显示处理时,只需将要显示的部分所覆盖的块从磁盘文件直接读进内存缓冲区显示即可。从金字塔的所有层中寻找与所要求显示的比例相近或匹配的一层,并将该层的从某一点起的一定范围的图像所覆盖的所有块加载到内存缓冲区,提取所需部分并形成图像。

金字塔算法(图2-16)是通过获取显示时所需要的一定分辨率的数据来提高显示速度。使用金字塔数据格式后,在显示全图时仅需要显示一个较低分辨率的数据,这样既能加快显示速度,又不会影响显示效果。放大图像,尽管显示图像分辨率提高,由于显示区域减小,所以显示速度不会下降。如果没有为栅格数据建立金字塔数据,则每次显示都会读取整个数据,然后进行重采样得到显示所需要的分辨率,明显地降低了显示速度。

图2-16 金字塔压缩示意图

金字塔数据重采样方式有:最近邻法、双线性内插和立方卷积。其中最近邻法适用于离散数据,而双线性内插法和立方卷积法适合于连续数据。

在ArcGISEngine中提供了IRasterPyramid和IRasterPyramid2接口来实现金字塔数据的建立,而建立的数据保存在rrd格式的文件中。

(三)空间域定义

空间域是指数据的有效空间范围,即Geodatabase数据库的最大等效坐标的值域范围,其定义主要是指比例系数和MinX、MinY的计算。

因为使用整数比浮点数有更高的压缩率,并且对整数进行二进制搜索比较快,所以多用户Geodatabase以4字节正整数存储坐标,其最大值为32位正整数所能表示的范围是214亿(2147483647),整数的范围称为空间域。在创建Geodatabase数据库时需要定义合适的比例系数。大的整数值将消耗大量的计算机物理内存,所以选定的比例系数最好不要大于必须的比例系数。空间域随坐标系的单位变化而变化。

比例系数和空间域之间成反比例关系,比例系数越大(存储单位越小),表达的空间域也越小。为了使目标数据都存储在系统中,需要谨慎地设置比例系数。将目标数据的宽度和高度较适中的数值乘以比例系数,如果结果小于214亿,则比例系数是合适的。

航空物探数据模型是为我国的航空物探行业数据建库设计的,它支持的空间数据的坐标范围为我国领土覆盖的海陆空间,最低纬度为赤道。根据概念设计的分析,航空物探数据模型采用的是地理坐标系,坐标系单位是度,基准是Beijing_1954,要求存储的坐标数据精度达到001m。在赤道处,赤道圆周长为400756946m,则每度弧长=400756946×100/360cm=11132137389cm,即1cm对应8983000883E-8°。所以,航空物探数据模型的比例系数取为898E-8,即存储单位为898E-8°,可满足1cm精度要求。

将空间域移动到目标数据范围之前,首先找到空间域在存储单位的中心位置,目的是在必要时向各个方向扩展。4字节正整数可表示的坐标范围:2147483647×898E-8=19284。我国的领土范围是东经70°~140°,北纬0°~60°。所以,选取的比例系数是合适的。把空间域坐标系中心定为90°,然后,计算空间域的MinX、MinY。

MinX=((70+140)÷2)-90=15

MinY=((0+60)÷2)-90=-60

所以坐标的存储数据是:

X_Storage=(X-MinX)/898E-8

Y_Storage=(Y-MinY)/898E-8

什么是OPS OPS(Oracle Parallel Server)可以让位于不同系统的多个实例同时访问同一个数据库 并行服务器可以有效地提高系统的可用性和对多系统的访问性能 但是 如果你的数据没有做很好的分割 性能可能还会下降 安装OPS时 多个实例mount同一数据库文件 实例间的通讯由分布式锁管理器(DLM)来管理 需要注意的是分布式锁管理器与你所使用的硬件和 *** 作系统有着密切的关系 为了确定多个企图同时修改同一数据的实例 Oracle使用了十个后台进程 LCK LCK 来锁定某一实例所使用的资源 OPS主要用于UNIX/LINUX集群环境中 OPS的优点 )高可用性 )加快事务响应时间 可用于决策支持系统 )增大交易连接数 可用于联机事务处理系统 所有的应用都是适合OPS吗? 可以根据功能或数据进行分割的应用最适合OPS 那些有 热数据 (经常被多实例同时访问的数据)的应用并不适合使用OPS OPS需要特殊的硬件吗? OPS要求服务器之间互连并共享磁盘子系统 所有可以做成集群的系统都可以 常用的有UNIX/LINUX和NT等 如何设置OPS? )关闭数据库 )启用OPS选项 在UNIX中通过重新连接Oracle软件的方式来完成 )使Oracle软件在所有节点上都有效 可以通过复制软件到其他节点或共享磁盘的方式来完成 )每个实例要有自己的Redo log file 所以要增加必要的log文件 ALTER DATABASE ADD LOGFILE THREAD GROUP G ( RAW_FILE ) SIZE k GROUP G ( RAW_FILE ) SIZE k GROUP G ( RAW_FILE ) SIZE k;ALTER DATABASE ENABLE PUBLIC THREAD ; )每个实例要有自己的回滚段 所以要增加必要的回滚段 CREATE ROLLBACK SEGMENT RB TABLESPACE RBS; )编辑初始化参数文件initSID ora文件 添加如下几项 PARALLEL_SERVER = TRUEINSTANCE_NUMBER = THREAD = ROLLBACK_SEGMENTS = (r r r r ) )创建OPS所需的数据字典 即运行CATPARR SQL )在所有的节点上启动实例 如何确定一个数据库是运行在并行状态? show parameter parallel_server 如何跟踪活动的实例? SELECT FROM SYS V_$ACTIVE_INSTANCES;SELECT FROM SYS V_$THREAD; 如何确定每个实例使用了多少个PCM锁? select count() Number of hashed PCM locks from v$lock_element where bitand(flags ) != /select count() Number of fine grain PCM locks from v$lock_element where bitand(flags ) = / 如何查看每个数据文件分配了多少个PCM锁以及ping率? col file_name format a col tablespace format a col blocking format col nlocks format col start_lk format select l file_id || || l file_name file_name l ts_name TABLESPACE start_lk nlocks blocking frequency PING COUNT from sys file_ping p sys file_lock lwhere l file_id = p file_idorder by l file_id/ 什么是pinging? Pinging是进程 用于协调多实例对同一数据块的读写 *** 作 OPS性能优化的一个挑战就是要最小化pinging 如何监控PCM锁的活动情况? 查看当前实例活动PCM锁的总数 select from sys v$lock_activity;查看每个数据库对象的PCM锁活动状况 col table format a select file# kind|| ||username|| ||name TABLE sum(xnc) pingsfrom sys v$false_ping p sys dba_users uwhere u user_id = p owner#group by file# kind|| ||username|| ||name xncorder by xnc desc/ 如何设置一个对所有OPS实例通用的SQLNet连接串? )首先要求所有节点上的SID相同 如果不相同可以按如下 *** 作进行更改 关闭数据库的所有实例将ORACLE_SID环境变量设成一致复制原来的初始化文件initOLDSID ora为initMON ora重起所有实例 )编辑本地TNSNAMES ora 如下例 PHOENIX =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = ))(ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = )))(CONNECT_DATA =(SERVICE_NAME = ora ))) lishixinzhi/Article/program/Oracle/201311/17315

一、 提高DML *** 作的办法:\x0d\简单说来:\x0d\1、暂停索引,更新后恢复避免在更新的过程中涉及到索引的重建\x0d\2、批量更新,每更新一些记录后及时进行提交动作避免大量占用回滚段和或临时表空间\x0d\3、创建一临时的大的表空间用来应对这些更新动作.\x0d\\x0d\4、批量更新,每更新一些记录后及时进行提交动作避免大量占用回滚段和或临时表空间\x0d\\x0d\5、创建一临时的大的表空间用来应对这些更新动作.\x0d\\x0d\6、加大排序缓冲区\x0d\ alter session set sort_area_size=100000000;\x0d\ insert into tableb select from tablea;\x0d\ commit;\x0d\\x0d\如果UPDATE的是索引字段,就会涉及到索引的重建,暂停索引不会提高多少的速度,反而有可能降低UPDATE速度,\x0d\因为在更新是索引可以提高数据的查询速度,重建索引引起的速度降低影响不大。\x0d\\x0d\ORACLE优化修改参数最多也只能把性能提高15%,大部分都是SQL语句的优化!\x0d\\x0d\update总体来说比insert要慢 :\x0d\几点建议: \x0d\ 1、如果更新的数据量接近整个表,就不应该使用index而应该采用全表扫描 \x0d\ 2、减少不必要的index,因为update表通常需要update index \x0d\ 3、如果你的服务器有多个cpu,采用parellel hint,可以大幅度的提高效率\x0d\ 另外,建表的参数非常重要,对于更新非常频繁的表,建议加大PCTFREE的值,以保证数据块中有足够的空间用于UPDATE, 从而降低CHAINED_ROWS。 \x0d\\x0d\二、 各种批量DML *** 作:\x0d\(1)、oracle批量拷贝:\x0d\set arraysize 20\x0d\ set copycommit 5000\x0d\ copy from username/password@oraclename append table_name1\x0d\ using select from table_name2;\x0d\ (2)、常规插入方式:\x0d\ insert into t1 select from t;\x0d\ 为了提高速度可以使用下面方法,来减少插入过程中产生的日志:\x0d\ alter table t1 nologging;\x0d\insert into t1 select from t;\x0d\commit;\x0d\ (3)、CTAS方式:\x0d\ create table t1\x0d\as\x0d\select from t;\x0d\为了提高速度可以使用下面方法,来减少插入过程中产生的日志,并且可以制定并行度:\x0d\create table t1 nologging parallel(degree 2) as select from t;\x0d\ (4)、Direct-Path插入:\x0d\ insert /+append/ into t1 select from t;\x0d\ commit;\x0d\ 为了提高速度可以使用下面方法,来减少插入过程中产生的日志:\x0d\ alter table t1 nologging;\x0d\ insert /+append/ into t1 select from t;\x0d\ \x0d\ Direct-Path插入特点:\x0d\1、 append只在insert select 中起作用,像insert /+ append / into t values()这类的语句是不起作用的。在update、delete *** 作中,append也不起作用。\x0d\2、 Direct-Path会使数据库不记录直接路径导入的数据的重做日志,会对恢复带来麻烦。\x0d\3、 Direct-Path直接在表段的高水位线以上的空白数据块中写数据,不会重用高水位线以下的空间,会对空间的使用造成一定的浪费,对查询的性能也会造成一定的影响。而常规插入会优先考虑使用高水位线之下有空闲空间存在的数据块。因此理论上Direct-Path插入会比常规插入速度更快,因为Direct-Path直接使用新数据块,而常规插入要遍历freelist获取可用空闲数据块,如果同 nologging 配合,这种速度优势会更加明显。\x0d\4、 以append方式插入记录后,要执行commit,才能对表进行查询。否则会出现错误:ORA-12838: 无法在并行模式下修改之后读/修改对象。\x0d\5、 用append导入数据后,如果没有提交或者回滚,在其他会话中任何对该表的DML都会被阻塞(不会报错),但对该表的查询可以正常执行。\x0d\6、 在归档模式下,要把表设置为nologging,然后以append方式批量添加记录,才会显著减少redo数量。在非归档模式下,不必设置表的 nologging属性,即可减少redo数量。如果表上有索引,则append方式批量添加记录,不会减少索引上产生的redo数量,索引上的redo 数量可能比表的redo数量还要大。\x0d\7、 数据直接插入数据文件,绕过buffer cache并且忽略了引用完整性约束。\x0d\8、 不管表是否在nologging 下,只要是 direct insert,就不会对数据内容生成undo。\x0d\9、 Oracle在Direct-Path INSERT *** 作末尾,对具有索引的表执行索引维护,这样就避免了在drop掉索引后,再rebuild。\x0d\10、 Direct-Path INSERT比常规的插入需要更多的空间。因为它将数据插入在高水位之上。并行插入非分区表需要更多的空间,因为它需要为每一个并行线程创建临时段。\x0d\11、 在插入期间,数据库在表上获得排他锁,用户不能在表上执行并行插入、更新或者删除 *** 作,并行的索引创建和build也不被允许。但却可以并行查询,但查询返回的是插入之前的结果集。\x0d\ (5)、并行DML:\x0d\ 如果你的服务器有多个cpu,采用parellel hint,可以大幅度的提高效率\x0d\ ALTER SESSION ENABLE PARALLEL DML;\x0d\\x0d\ INSERT /+ PARALLEL(tableA, 2) /INTO tableA \x0d\ SELECT FROM tableB;\x0d\\x0d\ 为了提高速度可以使用下面方法,来减少插入过程中产生的日志:\x0d\\x0d\ INSERT /+ PARALLEL(tableA, 2) /INTO tableA NOLOGGING\x0d\ SELECT FROM tableB;\x0d\\x0d\oracle默认并不会打开PDML,对DML语句必须手工启用。即需要执行\x0d\alter table enable parallel dml命令。\x0d\ \x0d\并行DML特点:\x0d\1、在并行DML模式中,默认的就是DIRECT-PATH插入,为了运行并行DML模式,必须满足以下条件:\x0d\a、必须是Oracle企业版;\x0d\b、必须在session中使并行DML生效,执行以下sql语句:\x0d\ALTER SESSION { ENABLE | FORCE } PARALLEL DML;\x0d\c、必须指定table的并行属性,在创建的时候或者其他时候,或者在insert *** 作时使用“PARALLEL”提示。\x0d\d、为了使Direct-Path Insert模式失效,在INSERT语句中指定“NOAPPEND”提示,覆盖并行DML模式。\x0d\ 2、并行Direct-Path INSERT到分区表:\x0d\ 类似于serial Direct-Path INSERT,每个并行 *** 作分配给一个或者多个分区,每个并行 *** 作插入数据到各自的分区段的高水位标志之上,commit之后,用户就能看到更新的数据。\x0d\ 3、并行Direct-Path INSERT到非分区表:\x0d\ 每个并行执行分配一个新的临时段,并插入数据到临时段。当commit运行后,并行执行协调者合并新的临时段到主表段,用户就能看到更新的数据。\x0d\ 4、Direct-Path INSERT可以使用Log或者不使用Log。\x0d\ 5、另外不得不说的是,并行不是一个可扩展的特性,只有在数据仓库或作为DBA等少数人的工具在批量数据 *** 作时利于充分利用资源,而在OLTP环境下使用并行需要非常谨慎。事实上PDML还是有比较多的限制的,例如不支持触发器,引用约束,高级复制和分布式事务等特性,同时也会带来额外的空间占用,PDDL同 样是如此。

以上就是关于用户加入多级组织时系统如何设计全部的内容,包括:用户加入多级组织时系统如何设计、SQLSERVER大数据库解决方案、Oracles数据库中有100万条数据,带条件查询,如何优化sql语句等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9546426.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存