




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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”?;蛘邫z查?;蛘邫z查“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壓縮,其本質都是去重,只是其算法上有些差壓縮,其本質都是去重,只是其算法上有些差異。因而異。因而如果在數據加載時,對數據預先排序,那么可帶來明顯的壓如果在數據加載時,對數據預先排序,那么可帶來明顯的壓縮比率的提升??s比率的提升。一般來說,一般來說,壓縮級別壓
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)進行數據加載,這樣可以最?。┻M行數據加載,這樣可以最小化的對業務影響情況下進行快速數據加載?;膶I務影響情況下進行快速數據加載。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年西方政治制度的可持續性試題及答案
- 公共政策實施中的多方利益平衡試題及答案
- 機電工程項目風險考試題
- 深化機電工程社會服務體系建設及試題與答案
- 市場導向的公共政策分析試題及答案
- 軟件設計師考試技巧與經驗試題及答案
- 軟考網絡工程師重要知識點試題及答案
- HY/T 0460.5-2024海岸帶生態系統現狀調查與評估技術導則第5部分:珊瑚礁
- 2025年中考歷史押題模擬試卷(含答案)
- 《基于杜邦分析法的蔚來汽車財務報表分析》13000字(論文)
- 四川省綿陽市2025屆高三下學期第三次診斷性測試數學試卷(含答案)
- 醫療臨床試驗患者篩選
- 2025年安徽宣城郎溪開創控股集團有限公司招聘筆試參考題庫附帶答案詳解
- 中醫針灸推拿操作規范
- 冷卻塔維修施工方案及報價清單
- 物聯網設備接入技術規范手冊
- 余秋雨散文《西湖夢》
- 服務售后方案及保障措施
評論
0/150
提交評論