




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、娄恒娄恒: APAC Exadata specialist 数据库空间管理数据库空间管理 数据仓库物理表设计(表压缩、表分区)数据仓库物理表设计(表压缩、表分区) 数据加载数据加载 并行执行并行执行 开发注意事项(集合、关联操作)开发注意事项(集合、关联操作) 索引管理索引管理 统计信息收集统计信息收集2Tips 1:设置合适的设置合适的DB_Block_Size对Exadata而言,MAX_IO_SIZE缺省为1MB所以推荐DB_BLOCK_SIZE设置为8192同时推荐DB_FILE_MULTI_BLOCK_READ_COUNT设置为128因为_ MAX_IO_SIZE = DB_FILE
2、_MULTI_BLOCK_READ_COUNT * DB_block_size。Tips:采用采用locally managed, Bigfile创建表空间创建表空间Tips:选择表空间选择表空间合适的合适的Extent管理方法管理方法采用Auto-Allocate方式,Oracle自动管理表的Extent的大小,开始时初始的Extent大小为64KB(除Partition表外),当表或索引的段(Segment)大小超过1MB,Extent以1MB为单位增长段空间,一旦段大小超过64MB,Extent以8MB为单位增长段空间。采用Uniform方式,所有段的Extent大小都是统一大小。对于A
3、uto-Allocate方式和Uniform方式的选择,Oracle推荐采用推荐采用Auto-Allocate作为作为Extent的管理方式。的管理方式。Uniform Extent:数据并行加载特点:数据并行加载特点假设有4个并行进程进行数据加载,Uniform extend 大小为8MB当多块加载后,将会有很多未被填满的Extent存在,也就是说Extent中可能会有很多空间空洞在表扫描时,每个空间空洞会被扫描到,造成IO的浪费Auto-Allocate Extent:数据并行加载特点:数据并行加载特点假设有4个并行进程进行数据加载,initial & next extend 大小
4、为8MB当加载完成后,最后一些Extent大小会比其他Extent小,但是所有Extent都会被填满每个表或分区扫描将至扫描数据,而没有空闲空间被扫描采用Auto-allocate的优点在于大数据加载时,有最少的空间浪费,因为最后加载的Extent会被Trim到64KB的整数倍的大小,所以几乎没有太大的空间浪费,同时表扫描时也可以提高IO效率采用Auto-Allocate方式时,在创建分区表时,可以自动支持Large Extent(8MB Extent),而对于uniform方式,则无法支持Tips:创建多个创建多个Bigfile表空间存储不同的分区表空间存储不同的分区在对大的在对大的Part
5、ition表进行并行数据加载时,应该尽可能避免文件头块争用(表进行并行数据加载时,应该尽可能避免文件头块争用(File Header Blocker contention)情况出现。文件头块争用()情况出现。文件头块争用(File Header Blocker contention)可以在)可以在AWR报告中检查报告中检查“gc buffer busy enqueue wait event”。或者检查。或者检查“buffer busy waits”的的统计信息,以判断是否存在统计信息,以判断是否存在File Header Blocker contention,可以使用如下,可以使用如下SQL:
6、CREATE TABLE sales_composite(salesman_id NUMBER(5),salesman_name VARCHAR2(30),sales_amount NUMBER(10),sales_date DATE)PARTITION BY RANGE(sales_date)SUBPARTITION BY HASH(salesman_id) subpartitions 128store in (ts1, ts2, ts3, ts4)(PARTITION sales_jan2000 VALUES LESS THAN(TO_DATE(02/01/2000,MM/DD/YYYY)
7、,PARTITION sales_feb2000 VALUES LESS THAN(TO_DATE(03/01/2000,MM/DD/YYYY),PARTITION sales_mar2000 VALUES LESS THAN(TO_DATE(04/01/2000,MM/DD/YYYY),PARTITION sales_apr2000 VALUES LESS THAN(TO_DATE(05/01/2000,MM/DD/YYYY),PARTITION sales_may2000 VALUES LESS THAN(TO_DATE(06/01/2000,MM/DD/YYYY);select p1 F
8、ile #, p2 Block #, p3 Reason Code from v$session_wait where event = buffer busy waits;为了避免文件头争用情况,可以采用多个为了避免文件头争用情况,可以采用多个Big file tablespace来均匀存放来均匀存放Partition table。例如:下面语句使用例如:下面语句使用4个表空间来均匀存放个表空间来均匀存放128个个Subpartition表:表:Tips:对于分区表(对于分区表(Partition)加载,启用)加载,启用Large Extent推荐大的对象使用推荐大的对象使用Large Ext
9、ent方式,以便减少方式,以便减少Extent的数量。当设置的数量。当设置CELL_PARTITION_LARGE_EXTENTS=TRUE时,所有分区表在创建时,将自动启时,所有分区表在创建时,将自动启动动Large Extent模式(模式(8MB),即创建时即创建时Initial Extent大小为大小为8MB。限制条件:限制条件:-CELL_PARTITION_LARGE_EXTENTS仅适用于:分区表、locally managed和AUTO-ALLOCATE的表空间。-不适合于:非分区表、Uniform的表空间的对象。Tips:针对非分区表(针对非分区表(Non-Partition)
10、加载,使用)加载,使用Large Extent如果对于非分区表,想使用Large Extent(8MB)。需要在Create table的DDL中设置INITIAL和NEXT子句。当对非分区表进行并行数据加载时,数据在Temp段中被生成,然后再合并到要加载的数据表的Extent中,缺省按照64KB Extent大小进行数据增长。但从11.1.0.7开始,在加载数据时(Load),NEXT用来控制新的Extent的大小。所以对于大的非分区表加载,可以直接将INITIAL和NEXT都设置为8MB。SQL如下:Create Table sales(.) parallel storage (INITI
11、AL 8M NEXT 8M)(.)Tips:关闭关闭deferred_segment_creation(段延迟创建)功能(段延迟创建)功能从从11g R2开始,当在开始,当在Locally Managed Tablespace上,创建一个非分区表上,创建一个非分区表时,缺省情况表的空间分配会启用延迟分配方式,即当首行被时,缺省情况表的空间分配会启用延迟分配方式,即当首行被Insert到表中时,表的到表中时,表的Extent才会被逐渐分配。建议关闭延迟空间空间分配才会被逐渐分配。建议关闭延迟空间空间分配,可以通过如下,可以通过如下SQL关闭:关闭:Alter system set deferre
12、d_segment_creation = FALSE scope=bothTips : 空间回收空间回收Shrinking SegmentsHWMHWMHWMALTER TABLE employees SHRINK SPACE COMPACT;1ALTER TABLE employees SHRINK SPACE;2DML operations and queries can be issued during compaction.DML operations are blocked when the HWM is adjusted. Shrinking Segments by Using S
13、QLALTER SHRINK SPACE CASCADETABLE OVERFLOWINDEXMATERIALIZED VIEWMATERIALIZED VIEW LOGMODIFY PARTITIONMODIFY SUBPARTITIONMODIFY LOBALTER TABLE employees SHRINK SPACE CASCADE;ALTER TABLE employees ENABLE ROW MOVEMENT;12ALTER TABLE employees MODIFY LOB(resume) (SHRINK SPACE);3ALTER TABLE employees OVER
14、FLOW SHRINK SPACE;4 数据库空间管理数据库空间管理 数据仓库物理表设计(表压缩、表分区)数据仓库物理表设计(表压缩、表分区) 数据加载数据加载 并行执行并行执行 开发注意事项(集合、关联操作)开发注意事项(集合、关联操作) 索引管理索引管理 统计信息收集统计信息收集14Tips:数据仓库设计:数据仓库设计一个典型的数据仓库是一个一个典型的数据仓库是一个Many Rows System ,但经常会但经常会被用被用Few Rows System的方式来开发的方式来开发(Row By Row)在大多数情况下,在大多数情况下,Many Rows System还是还是Few Rows
15、System可以通过可以通过SQL语句的执行频度决定:语句的执行频度决定:- 1/Sec 代表 many rows - 1000/Sec代表 few rows - 备注:在Many Rows System中,可能存在一种误导:批量集合操作(Set Based Operation)通过Row By Row的操作方式开发效率更高Tips:数据仓库物理模型设计原则:数据仓库物理模型设计原则Many Rows- 并行(Parallelism) - 分区(Partitioning)- 压缩(Compression) - 集合批量操作(Set-based techniques) - 通过数据转换代替实现数
16、据更新(Data modified by transformation) Few Rows - 索引(Index design) - 物化视图(Materialized views and aggregates) Tips:数据压缩考虑:数据压缩考虑压缩技术是数据仓库物理设计最重要的因素之一压缩技术是数据仓库物理设计最重要的因素之一压缩的影响压缩的影响: -极大加速表扫描速度、减少磁盘空间占用、加速数据备份-但是,压缩对大大降低UPDATE和DELETE的效率一个好的数据仓库模型,对于压缩表而言,将只采用一个好的数据仓库模型,对于压缩表而言,将只采用Append方式操作方式操作,避免采用修改(
17、,避免采用修改(Update、Delete、Merge)方式对数据的操作,以保)方式对数据的操作,以保证对压缩表操作的效率证对压缩表操作的效率但是如果一些经常更新的大表确实有压缩的需求,可以考虑使用但是如果一些经常更新的大表确实有压缩的需求,可以考虑使用OLTPOLTP压缩技术。压缩技术。无论无论HCCHCC压缩还是压缩还是OLTPOLTP压缩,其本质都是去重,只是其算法上有些差压缩,其本质都是去重,只是其算法上有些差异。因而异。因而如果在数据加载时,对数据预先排序,那么可带来明显的压如果在数据加载时,对数据预先排序,那么可带来明显的压缩比率的提升。缩比率的提升。一般来说,一般来说,压缩级别压
18、缩级别QUERY HIGHQUERY HIGH既可以得到一个理想的压缩比率,也既可以得到一个理想的压缩比率,也能提供很好的查询性能,可以考虑作为初始测试的压缩级别能提供很好的查询性能,可以考虑作为初始测试的压缩级别. .Tips:EHCC 混合列压缩混合列压缩EHCC (Exadata Hybrid Columnar Compression) 不是完全的列压缩,而是混不是完全的列压缩,而是混合列存储合列存储EHCC具备多种压缩类型具备多种压缩类型-Query low-Query high-Archive low-Archive high设计用于不频繁修改的数据设计用于不频繁修改的数据设计用于低
19、并发的场景设计用于低并发的场景支持数据库各种功能支持数据库各种功能-DMLs/DDLs, Partitioning, PQ, PDML, Online redefinition, CTAS, IAS, SQL Loader, External tables, Context, MVs etc.支持索引支持索引只有在数据批量加载时被压缩只有在数据批量加载时被压缩Tips:如何创建:如何创建EHCC表表l CTAS (create table as select)- create table foo compress for query as select * from bar1;l IDL (i
20、nsert direct load)- create table foo compress for archive low;- insert /*+APPEND*/ into foo select * from bar2;l 压缩可以在压缩可以在Segment一级指定:一级指定:- 每个分区可以有不同的压缩类型- 例如: create table orders (cid, pid, sid, price, discount, odate) partition by range (cid) (partition p1 values less than (100000) nocompress, p
21、artition p2 values less than (200000) compress for archive low, partition p3 values less than (300000) compress for query high, partition p4 values less than (maxvalue) compress for query low) enable row movement as select * from prev_orders;Tips:动态启用或停用表的:动态启用或停用表的EHCC- Existing tables/partitions c
22、an be converted to use EHCC- alter table bar move compress for query high- alter table orders modify partition p1 move compress for archive low- New data loaded in existing tables/partitions can go to EHCC blocks, keeping the existing data as is- alter table bar compress for query high- alter table
23、orders modify partition p3 compress for query low- EHCC can be disabled - alter table bar nocompress- alter table bar move nocompress- Online redefinition package can be used for enabling/disabling EHCCTips:分区:分区(Partition)设计目的设计目的 数据管理数据管理- Exchange data in/out - Break down operations into smaller
24、pieces 查询优化查询优化- Partition pruning - Hash based joins and sorts Tips :数据仓库分区(:数据仓库分区(Partition)策略)策略一级分区:首先按日期对大表进行分区一级分区:首先按日期对大表进行分区-主要目标是启动分区修剪(Partition Pruning),简化数据管理-主要对于日期字段进行Range 或interval分区-选择大部分查询查询用到的日期字段作为分区列-这个日期字段(用于分区列)应该是不易变(不被更新)二级子分区(二级子分区(Subpartition)可以按照:)可以按照: -Hash分区,更好地支持jo
25、in和Sort-RANGE或LIST分区,更好的支持分区修剪( Partition Pruning) Tips:Tips:定义合理的定义合理的HashHash分区数量分区数量Oracle推荐大的分区表使用推荐大的分区表使用Hash分区作为分区方法,为了保证数据在分区作为分区方法,为了保证数据在Hash Partition间均匀分布,间均匀分布,Hash分区的数量建议是分区的数量建议是2的指数幂,或者设置的指数幂,或者设置Partition数量为数量为CPU数量的数量的2倍。倍。然而每个然而每个hash Partition应该至少不小于应该至少不小于16MB。小于。小于16MB将在并行执行下不会
26、有较好的扫描效率将在并行执行下不会有较好的扫描效率。首先考虑分区数是首先考虑分区数是2的整数幂的情况:当的整数幂的情况:当Oracle的分区数从的分区数从2个变为个变为4个,个,Oracle并不需要将所有数据重新打乱,而是将原有的并不需要将所有数据重新打乱,而是将原有的2个分区每个都一分个分区每个都一分为二。同样的道理,如果将分区数设置为为二。同样的道理,如果将分区数设置为8,Oracle会将原有的会将原有的4个分区个分区一分为二。一分为二。Oracle的的HASH分区就像是一棵大的二叉树。每个分区就相当于二叉树的分区就像是一棵大的二叉树。每个分区就相当于二叉树的一个叶节点。二叉树的第一层,只
27、有一个根节点,对应只有一个叶节点。二叉树的第一层,只有一个根节点,对应只有1个分区的个分区的情况。二叉树的第二层,两个叶节点,对应情况。二叉树的第二层,两个叶节点,对应2个分区的情况。二叉树的个分区的情况。二叉树的第三层,第三层,4个叶节点,对应个叶节点,对应4个分区的情况。二叉树的第个分区的情况。二叉树的第n层,层,2(n-1)个叶个叶节点,对应节点,对应2(n-1)个分区情况。个分区情况。Tips:使用使用Partition-wise joins对于两个大表关联操作,推荐使用partiton-wise joins来减少并行进程间数据交换,减少查询的执行时间。对于使用对于使用full par
28、tition-wise join,两个关联的表必须是,两个关联的表必须是相同的相同的Partition键值(即两个表必须有相同的键值(即两个表必须有相同的Partition列、相同的列、相同的Partition方法方法、相同的、相同的Partition数量)数量)。如下是采用partiton-wise joins的两个表关联的执行计划,Sales表和Customers表具有相同的并行度、Hash Partition方法(Cust_id列作为Hash Partition Key)、Join列是Partition Key。SELECT sum(amount_sold) FROM sales s,
29、customer cWHERE s.cust_id=c.cust_id;Both tables have the same degree of parallelism and are partitioned the same way on the join column (cust_id)Range partition May 18th 2008Hash PartitionedSub part 1A large join is divided into multiple smaller joins, each joins a pair of partitions in parallelPart
30、 1Sub part 2Sub part 3Sub part 4Part 2Part 3Part 4Sub part 2Sub part 3Sub part 4Sub part 1Part 1Part 2Part 3Part 4Partition Wise join对于partition-wise join而言,查询的并行度必须是等于或成倍于表分区的数量SELECT sum(s.amount_sold)FROM sales sWHERE s.time_id BETWEENto_date(01-JAN-1999,DD-MON-YYYY)ANDto_date(31-DEC-1999,DD-MON-
31、YYYY);Q: What was the total sales for the year 1999?Tips:分区裁剪(:分区裁剪(Partition Pruning)Tips:如何检查分区修剪是否生效:如何检查分区修剪是否生效 Sample planOnly 4 partitions are touched 9, 10, 11, & 12, , Partition 1Partition 5Partition 10:129101920Tips:如何检查分区修剪是否生效:如何检查分区修剪是否生效Simple Query : SELECT COUNT(*)FROM RHP_TABWHE
32、RE CUST_ID = 9255AND TIME_ID = 2008-01-01;Overall partition #range partition #Sub-partition # 数据库空间管理数据库空间管理 数据仓库物理表设计(表压缩、表分区)数据仓库物理表设计(表压缩、表分区) 数据加载数据加载 并行执行并行执行 开发注意事项(集合、关联操作)开发注意事项(集合、关联操作) 索引管理索引管理 统计信息收集统计信息收集29Tips:使用使用External Table进行数据加载进行数据加载Oracle推荐使用推荐使用External Table方式加载数据,而不第一推荐方式加载数据
33、,而不第一推荐SQL*Loader,因为,因为SQL*Loader做并行数据加载时,数据首先被加载到做并行数据加载时,数据首先被加载到TEMP Extent中,只有在中,只有在transaction 被被Commit时,时,Temp Extent会被合并到实体表的会被合并到实体表的段(段(Segment)中,而在原来表中的部分满的)中,而在原来表中的部分满的Extent(partially full extents)会被跳过,所以到导致空间浪费和性能浪费。所以对于大量)会被跳过,所以到导致空间浪费和性能浪费。所以对于大量加载的加载的Partition表,这样可能会导致较大的空间浪费情况。表,这
34、样可能会导致较大的空间浪费情况。采用采用External Table方式加载时,会有如下好处:方式加载时,会有如下好处:-Full usage of SQL capabilities directly on the data- Automatic use of parallel capabilities - No need to stage the data again in the database-Better allocation of space when storing data- High watermark brokering- Autoallocate tablespace w
35、ill trim extents after the load-Additional capabilities like -The usage of data pump files-The usage of pre-processingExternal Table Tips:External Table预处理预处理允许文件在加载过程中被自动化预处理允许文件在加载过程中被自动化预处理-例如:对压缩文件进行解压缩、排序等预处理不支持对文件的自动的小颗粒化预处理不支持对文件的自动的小颗粒化-需要提供多份文件,文件的数量决定了处理的并行度需要授权对目录的读和执行的权限(需要授权对目录的读和执行的权限(
36、Grant read, execute privileges directories)CREATE TABLE sales_external()ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY data_dir1 ACCESS PARAMETERS (RECORDS DELIMITED BY NEWLINE PREPROCESSOR exec_dir: gunzip OPTIONS -c FIELDS TERMINATED BY |) LOCATION ();Tips:直接路径加载(:直接路径加载(Direct Path
37、Load)在每次在每次IO异步请求时,数据被直接写入数据库存储异步请求时,数据被直接写入数据库存储CTAS 语句总是使用语句总是使用 Direct Path 在在Insert As Select 语句中使用语句中使用 APPEND暗示方法也是暗示方法也是Direct PathInsert /*+ APPEND */ into Sales partition(p2) Select * From ext_tab_for_sales_data;在一个对象上,只有一个在一个对象上,只有一个direct path 操作能够起作用操作能够起作用-通过指定一个表的分区表的名字方法,可以同时将多个Direct
38、 Pach加载操作到一个表Tips:并行加载(:并行加载(Parallel Load)为了确保为了确保Direct Path加载成为并行操作,需要通过如下加载成为并行操作,需要通过如下方式:方式:- 在Hint中指定并行度、或者在表上指定并行度- 通过Alter Session语句启动会话级并行当并行度被指定后,当并行度被指定后,CTAS 会自动并行化加载会自动并行化加载IAS 不会自动并行化,他需要不会自动并行化,他需要parallel DML的支持:的支持:ALTER SESSION ENABLE PARALLEL DML;Tips:使用使用Parallel direct path 数据加
39、载数据加载使用使用“direct path load”可以带来很好的数据加载性能,因为数据会绕过可以带来很好的数据加载性能,因为数据会绕过Buffer Cache,直接写入数据库存储。,直接写入数据库存储。CTAS总会使用总会使用“direct path load”,但是,但是Insert As Select (IAS)并不是总会使用并不是总会使用“direct path load”,为了使,为了使IAS使用使用“direct path load”,需要在,需要在IAS中加入中加入APPEND hint,SQL如下:如下:Insert /*+ APPEND */ into Sales part
40、ition(p2) Select * From ext_tab_for_sales_data; ALTER SESSION ENABLE PARALLEL DML;Insert /*+ APPEND */ into Sales partition(p2)Select * from ext_tab_for_sales_data; 为了让为了让“direct path load”以并行方式运行,可以以下两种方式设置并行度:以并行方式运行,可以以下两种方式设置并行度:1)在)在CTAS和和IAS中加入中加入PARALLEL hint;2)在)在External table和目标加载和目标加载Tabl
41、e上,上,设置设置PARALLEL子句。一旦设置了并行度,子句。一旦设置了并行度,CTAS将自动执行并行化的将自动执行并行化的“direct path load”,而,而IAS将不会。为了让将不会。为了让IAS能够并行化执行能够并行化执行“direct path load”,出,出了设置并行度外,还必须通过了设置并行度外,还必须通过alter the session to enable parallel DML。SQL如下:如下:Tips:在数据加载时,对于常访问的字段,可以进行排序,以在数据加载时,对于常访问的字段,可以进行排序,以便增加便增加Storage index的效率的效率对在使用对
42、在使用 INSERT /*+ APPEND */ 做数据加载时,可以对查询中做数据加载时,可以对查询中Where条条件中使用较多的列进行件中使用较多的列进行Order By排序,以便增加数据压缩率和排序,以便增加数据压缩率和Storage index查询效率。查询效率。Select name,value/1024/1024 as stat_value from v$mystat s,v$statname n Where S.Statistic#=n.statistic# and name like %cell physical%Insert into tablea select * from
43、ext_tablea order by col1,col2可以通过查询可以通过查询v$mystat,v$statname视图,通过看视图,通过看cell physical I0 bytes saved by storage index统计值,来检查多少统计值,来检查多少I/O被减少。被减少。SQL如下:如下:Tips:通过表分区交换做数据加载通过表分区交换做数据加载(Partition exchange load)Oracle建议对大的数据表采用分区表,分区表的好处之一就是可以通建议对大的数据表采用分区表,分区表的好处之一就是可以通过分区交换方式(过分区交换方式(Partition Excha
44、nge)进行数据加载,这样可以最小)进行数据加载,这样可以最小化的对业务影响情况下进行快速数据加载。化的对业务影响情况下进行快速数据加载。Partition Exchange可以允可以允许用户交换非分区表数据到一个表的分区中。分区交换命令并不真正许用户交换非分区表数据到一个表的分区中。分区交换命令并不真正移动两个表的数据,而是简单的移动两个表的数据,而是简单的Update数据字典信息。由于没有进行数据字典信息。由于没有进行数据移动,所以数据非分区表需要与分区表有相同的存储结构(存储数据移动,所以数据非分区表需要与分区表有相同的存储结构(存储在合适的表空间、相同的在合适的表空间、相同的Exten
45、t Size)。)。SQL如下:如下:Create Table tmp_sales2(.)parallel storage (INITIAL 8M NEXT 8M) tablespace main_fact_tbs . Alter table Sales exchange partition p2 with table tmp_sales2 including indexes without validation;DBA1. Create external table for flat files5. Alter table Sales exchange partition May_24_20
46、08 with table tmp_sales2. Use CTAS command to create non-partitioned table TMP_SALESSales table now has all the data3. Create indexes4. Gather StatisticsTips:Partition Exchange loading操作过程操作过程 数据库空间管理数据库空间管理 数据仓库物理表设计(表压缩、表分区)数据仓库物理表设计(表压缩、表分区) 数据加载数据加载 并行执行并行执行 开发注意事项(集合、关联操作)开发注意事项(集合、关联操作) 索引管理索引
47、管理 统计信息收集统计信息收集39Tips:并行执行的适用情况并行执行的适用情况并行执行是并行执行是Exadata最强大的能力之一,充分利用最强大的能力之一,充分利用Exadata的并行计算的并行计算能力可以极大提高系统利用率。但是我们必须要确认并行使用的时机能力可以极大提高系统利用率。但是我们必须要确认并行使用的时机,以及并行使用的程度。,以及并行使用的程度。 并行并行适用场景:适用场景:-并行执行应该在所有的资源密集型操作中被使用,例如:复杂查询、大量数据处理DML、大表建索引、收集统计信息、大量数据加载等。只有在表数据小于只有在表数据小于64MB或者同时有上百个并发用户执行操或者同时有上
48、百个并发用户执行操作时,不建议使用并行执行操作作时,不建议使用并行执行操作。并行不适用场景:并行不适用场景:-短交易(几秒钟或更少)。在这些环境中并行执行是没有什么用处,因为协调并行执行服务器会增加相关的成本,这种协调的成本可能超过并行带来的好处。-已经大量使用CPU、内存或I / O资源的环境。并行执行旨在利用其它可用的硬件资源,如果没有这样的资源可用,那么并行执行不产生任何效益,并且可能损害性能。Tips:并行执行工作过程:并行执行工作过程用户连接到数据库User后台进程被派生当用户发出一个并行SQL,后台进程就变成为QC(Query Coordinator)QC从并行进程组中获得Para
49、llel servers ,然后QC分配任务给Parallel servers进程Parallel servers 是一个独立的Session,从并行进程组中分配,并完成指定的具体任务Parallel servers通过Shared Pool的内存传递通信消息,与QC进程和并行进程进行互相通信ProducersConsumersQuery coordinatorP1P2P3P4Hash join 会首先选择小表作为驱动表,进行扫描,在这个例子中Customers表示小表,4个Producer 并行进程并行扫描,并且返回就过给Consumers进程P8P7P6P5SALESTableCUSTOM
50、ERSTableSELECT c.cust_last_name, s.time_id, s.amount_soldFROM sales s, customers cWHERE s.cust_id = c.cust_id;并行执行的工作机制并行执行的工作机制ProducersConsumersQuery coordinatorP1P2P3P4一旦4个Producer进程完成了小表的扫描,他们开始对大表(Sales表)进行并行扫描,并返回结果给Consumer进程P8P7P6P5SALESTableCUSTOMERSTableSELECT c.cust_last_name, s.time_id,
51、s.amount_soldFROM sales s, customers cWHERE s.cust_id = c.cust_id;并行执行的工作机制并行执行的工作机制ProducersConsumersP1P2P3P4P8P7P6P5一旦Consumer进程收到了两个表的数据,他们开始做并行的Join操作,一旦完成join操作,就将结果返回给QC进程Query coordinatorSALESTableCUSTOMERSTableSELECT c.cust_last_name, s.time_id, s.amount_soldFROM sales s, customers cWHERE s.
52、cust_id = c.cust_id;并行执行的工作机制并行执行的工作机制SELECT c.cust_last_name, s.time_id, s.amount_soldFROM sales s, customers cWHERE s.cust_id = c.cust_id;Query CoordinatorTips:检查并行执行情况:检查并行执行情况select sum(revenue), storefrom line_itemsWhere profit(price,units) 0.2order by storeData on DiskQuery ServersProducers or
53、 scannersConsumersOr Aggregators)Coordinator并行进程的任务并行进程的任务Tips:不:不同操作并行方式同操作并行方式Group by,Order by进程1进程2进程3进程4进程5进程6进程1进程2进程3进程4进程5进程6Hash分布Hash key 1Hash key 2Hash key 3Hash key 4Hash key 5Hash key 6进程1进程2进程3进程4进程5进程6进程1进程2进程3进程4进程5进程6Range分布A-HI-MN-RS-UV-XY-ZGroup ByOrder ByHash分区效率最高Range分区效率最高Tip
54、s:数据分布的例子数据分布的例子select count(*) from yellow y, green g where y.deptno = g.deptno TipsTips:并:并行进程中不同的数据分布方式行进程中不同的数据分布方式分布方式说明Hash, Hash使用Hash函数映射Join字段,映射完成后,每个查询引擎执行Join,建议Join表size相近,使用hash-join或者sort merge joinBroadcast,None外表的行广播到每个查询进程,内表随机分区,建议外表size大大小于内表。通用规则:inner table size * number of que
55、ry servers outer table sizeNone,Broadcase内表的行广播到每个查询进程,建议内表的size大大小于外表。通用规则:inner table size * number of query servers 0 1-Jan-0 9 / commit / create table tx_log_new nologging parallel compress for all operations as select .,case sales_date0 1-Jan-0 9 and tax_rate=9.3 then 9.9 else tax_rate end, . f
56、rom sales_ledger / alter table tx_log rename to tx_log_old / alter table tx_log_new to tx_log /Tips:对:对Merge的改写的改写TipsTips:多表:多表InsertInsertUnconditional Unconditional INSERT ALLINSERT ALL INTO sal_history VALUES(EMPID,HIREDATE,SAL) INTO mgr_history VALUES(EMPID,MGR,SAL) SELECT employee_id EMPID, hi
57、re_date HIREDATE, salary SAL, manager_id MGR FROM employees WHERE employee_id 200;8 rows created. TipsTips:多表:多表Insert Insert Conditional Conditional INSERT ALLINSERT ALL WHEN SAL 10000 THEN INTO sal_history VALUES(EMPID,HIREDATE,SAL) WHEN MGR 200 THEN INTO mgr_history VALUES(EMPID,MGR,SAL) SELECT e
58、mployee_id EMPID,hire_date HIREDATE, salary SAL, manager_id MGR FROM employees WHERE employee_id 200;4 rows created. TipsTips:多表:多表Insert Insert Conditional Conditional INSERT FIRST INSERT FIRST WHEN SAL 25000 THEN INTO special_sal VALUES(DEPTID, SAL) WHEN HIREDATE like (%00%) THEN INTO hiredate_his
59、tory_00 VALUES(DEPTID,HIREDATE) WHEN HIREDATE like (%99%) THEN INTO hiredate_history_99 VALUES(DEPTID, HIREDATE) ELSE INTO hiredate_history VALUES(DEPTID, HIREDATE) SELECT department_id DEPTID, SUM(salary) SAL, MAX(hire_date) HIREDATE FROM employees GROUP BY department_id;8 rows created.TipsTips:多表:
60、多表Insert Insert Pivoting Pivoting INSERT INSERT ALL INTO sales_info VALUES (employee_id,week_id,sales_MON) INTO sales_info VALUES (employee_id,week_id,sales_TUE) INTO sales_info VALUES (employee_id,week_id,sales_WED) INTO sales_info VALUES (employee_id,week_id,sales_THUR) INTO sales_info VALUES (employee_id
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025观看公共安全教育开学第一课观后感16篇
- 三年级语文培优补差考评方案计划
- 高三年级部学风建设提升计划
- 给排水防洪排涝工程师论文范文
- 六年级上册道德与法治教案设计计划
- 2025年酒店销售部跨部门协作计划
- 律师办理股权纠纷民事流程
- 江苏高考11年数学试卷
- 湖北麻城高考数学试卷
- 考研一类数学试卷
- 2025年新高考1卷(新课标Ⅰ卷)英语试卷
- CJ/T 508-2016污泥脱水用带式压滤机
- 融媒体笔试试题及答案
- 法律退款合同协议书怎么写
- DB62T 3161-2019 高原旱区园林绿化养护及验收标准
- 山东省淄博沂源县联考2025年七下数学期末达标检测试题含解析
- 初级净水工试题及答案
- 钢结构网架工程施工方案
- 卤味学员合同协议书
- 2024年度山西省二级造价工程师之土建建设工程计量与计价实务能力检测试卷A卷附答案
- 2025-2030年食用梅酒项目商业计划书
评论
0/150
提交评论