Download presentation
Presentation is loading. Please wait.
Published byMagdalena Vanes Modified over 9 years ago
2
Overview Smart Scan Predicate Filtering Column Projection Join Filtering Storage Indexes Hybrid Columnar Compression Flash Cache
5
Predicate Filtering Column Projection Function Offload Simple Joins Filtering Storage Indexes Данные приходят в PGA не в привычном формате Oracle блока, а в виде пакетов, содержащих только необходимые данные. Всегда осуществляется параллельными процессами на storage cell layer. Как следствие степень (degree) of parallelism уменьшена для запросов использующих параллелизм по сравнению с не-Exadata environments.
6
Full Scan Full Table Scan Full MatView Scan Index [Bitmap] Fast Full Scan Direct Path Read Происходит при parallel processing влияют: св-во CACHE объекта, parallel_degree=AUTO serial Direct Path Reads влияют: _small_table_trashold, cache_size, кол-во блоков объекта в кеше и т.д. Stored on the Exadata Storage Function performed Smart scan executed from function performed Direct Path Read, performed from Full Scans. Может быть отключен на system/session/statement levels: Пример: alter session set cell_offload_processing=FALSE, select --+ opt_param(‘cell_offload_processing’, ‘false’)
7
Возвращаются только необходимые столбцы Бенефит в уменьшении объема передаваемых данных со Storage Cells на DB tier
8
Позволяет проталкивать предикаты на уровень Storage Cells. Возвращаются строки удовлетворяющие предикатам SQL функции могут быть offloaded. Почти все одно строчные и почти никакие аггрегатные и аналитические. select * from v$sqlfn_metadata where offloadable = 'YES' Бенефит в уменьшении объема передаваемых данных со Storage Cells на DB tier
9
Query: select * from T where id = 'A10000000'; Plan: ----------------------------------------------- | Id | Operation | Name | ----------------------------------------------- | 0 | SELECT STATEMENT | | |* 1 | TABLE ACCESS STORAGE FULL| T | ----------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - storage(“ID"='A10000000') filter(“ID"='A10000000') “STORAGE” в операции TABLE ACCESS STORAGE FULL говорит о том, что объект будет читаться со storage cell. storage(“ID"='A10000000') в секции Predicate Information говорит о том, что Smart Scan с predicate filtering возможен Note: Перед миграцией на Exadata планы запросов можно смотреть установив CELL_OFFLOAD_PLAN_DISPLAY = ALWAYS (default AUTO, включается только когда работает на Exadata)
10
SQL> alter session set "_serial_direct_read"=always; Session altered SQL> alter session set cell_offload_processing=false; Session altered SQL> select count(*) 2 from t; COUNT(*) ---------- 613858416 Executed in 36,375 seconds
11
SQL> alter session set "_serial_direct_read"=always; Session altered SQL> alter session set cell_offload_processing=false; Session altered SQL> select count(*) 2 from t; COUNT(*) ---------- 613858416 Executed in 36,375 seconds SESSION EVENTS EVENT TOTAL_WAITS ------------------------------ ----------- direct path read 3002 SESSION STATS NAME VALUE ------------------------------------------------------------ --------------- cell physical IO interconnect bytes 7 971 905 536 cell physical IO bytes eligible for predicate offload 0 cell physical IO interconnect bytes returned by smart scan 0 cell scans 0
12
SQL> alter session set "_serial_direct_read"=always; Session altered SQL> alter session set cell_offload_processing=true; Session altered SQL> select count(*) 2 from t; COUNT(*) ---------- 613858416 Executed in 10,297 seconds
13
SQL> alter session set "_serial_direct_read"=always; Session altered SQL> alter session set cell_offload_processing=true; Session altered SQL> select count(*) 2 from t; COUNT(*) ---------- 613858416 Executed in 10,297 seconds SESSION EVENTS: EVENT TOTAL_WAITS ------------------------------ ----------- cell smart table scan 124 SESSION STATS NAME VALUE ------------------------------------------------------------ --------------- cell physical IO bytes eligible for predicate offload 7 971 905 536 cell physical IO interconnect bytes returned by smart scan 130 279 456 cell physical IO interconnect bytes 130 279 456 cell scans 1
14
SQL> alter session set "_serial_direct_read"=always; Session altered SQL> alter session set "_kcfis_storageidx_disabled"=true; Session altered SQL> select count(*) 2 from t 3 where ACCT_ID = 'A10000000 '; COUNT(*) ---------- 14359963 Executed in 4,703 seconds
15
SQL> alter session set "_serial_direct_read"=always; Session altered SQL> alter session set "_kcfis_storageidx_disabled"=true; Session altered SQL> select count(*) 2 from t 3 where ACCT_ID = 'A10000000 '; COUNT(*) ---------- 14359963 Executed in 4,703 seconds SESSION EVENTS EVENT TOTAL_WAITS ------------------------------ ----------- cell smart table scan 170 SESSION STATS NAME VALUE ------------------------------------------------------------ ------------- cell physical IO bytes eligible for predicate offload 7 971 905 536 cell physical IO interconnect bytes 38 148 952 cell physical IO interconnect bytes returned by smart scan 38 148 952 cell scans 1
16
Bloom Filters используются в Oracle начиная с 10.2 Позволяет проталкивать bloom filters на Storage Cells уровень Бенефит в уменьшении передачи ненужных данных со storage на DB level Отключается параметром “_bloom_predicate_pushdown_to_storage“=false Статистика фильтрации в представлении v$sql_join_filter
17
select --+ parallel(t1 2) parallel(t2 2) count(*) from t1, t2 where t1.id = c.id and t1.col1 = 'A'; ------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | TQ |IN-OUT| PQ Distrib | ------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 3812G| | | | | 1 | PX COORDINATOR | | | | | | | 2 | PX SEND QC (RANDOM) | :TQ10002 | 3812G| Q1,02 | P->S | QC (RAND) | |* 3 | HASH JOIN BUFFERED | | 3812G| Q1,02 | PCWP | | | 4 | JOIN FILTER CREATE | :BF0000 | 6182M| Q1,02 | PCWP | | | 5 | PX RECEIVE | | 6182M| Q1,02 | PCWP | | | 6 | PX SEND HASH | :TQ10000 | 6182M| Q1,00 | P->P | HASH | | 7 | PX BLOCK ITERATOR | | 6182M| Q1,00 | PCWC | | |* 8 | TABLE ACCESS STORAGE FULL| T1 | 6182M| Q1,00 | PCWP | | | 9 | PX RECEIVE | | 13G| Q1,02 | PCWP | | | 10 | PX SEND HASH | :TQ10001 | 13G| Q1,01 | P->P | HASH | | 11 | JOIN FILTER USE | :BF0000 | 13G| Q1,01 | PCWP | | | 12 | PX BLOCK ITERATOR | | 13G| Q1,01 | PCWC | | |* 13 | TABLE ACCESS STORAGE FULL| T2 | 13G| Q1,01 | PCWP | | ------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 3 - access("T1"."ID"="T2"."ID") 8 - storage("T1"."COL1"='A') filter("T1"."COL1"='A') 13 - storage(SYS_OP_BLOOM_FILTER(:BF0000,"T2"."ID")) filter(SYS_OP_BLOOM_FILTER(:BF0000,"T2"."ID"))
18
-------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | TQ |IN-OUT| PQ Distrib | -------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | | | | 1 | SORT AGGREGATE | | 1 | | | | | 2 | PX COORDINATOR | | | | | | | 3 | PX SEND QC (RANDOM) | :TQ10001 | 1 | Q1,01 | P->S | QC (RAND) | | 4 | SORT AGGREGATE | | 1 | Q1,01 | PCWP | | |* 5 | HASH JOIN | | 2132 | Q1,01 | PCWP | | | 6 | PX RECEIVE | | 2132 | Q1,01 | PCWP | | | 7 | PX SEND BROADCAST | :TQ10000 | 2132 | Q1,00 | P->P | BROADCAST | | 8 | PX BLOCK ITERATOR | | 2132 | Q1,00 | PCWC | | |* 9 | TABLE ACCESS STORAGE FULL| T3 | 2132 | Q1,00 | PCWP | | | 10 | PX BLOCK ITERATOR | | 1464M| Q1,01 | PCWC | | |* 11 | TABLE ACCESS STORAGE FULL | T4 | 1464M| Q1,01 | PCWP | | -------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 5 - access(“T3".“ID"="T4".“ID") 9 - storage(“T4"."JRNL_QTY"=(-1360000)) filter("T4"."JRNL_QTY"=(-1360000)) 11 - storage(SYS_OP_BLOOM_FILTER(:BF0000,“T3".“ID")) filter(SYS_OP_BLOOM_FILTER(:BF0000,"T3".“ID")) select --+ full(t3) full(t4) parallel(t3 2) parallel(t4 2) count(*) from t3, t4 where t3.id = t4. id and t4.jrnl_qty = -1360000;
19
SQL> alter session set "_bloom_predicate_pushdown_to_storage"=false; Session altered SQL> select --+ full(t3) full(t4) parallel(t3 2) parallel(t4 2) 2 count(*) 3 from t3, t4 4 where t3.id = t4.id and t4.jrnl_qty = -1360000; COUNT(*) ---------- 0 Executed in 101,141 seconds SQL> alter session set "_bloom_predicate_pushdown_to_storage"=true; Session altered SQL> select --+ full(t3) full(t4) parallel(t3 2) parallel(t4 2) 2 count(*) 3 from t3, t4 4 where t3.actg_trn_id = t4.ant_hold_jrnl_id and t4.jrnl_qty = -1360000; COUNT(*) ---------- 0 Executed in 13,61 seconds
20
SQL> select decode(qc_session_id, 793, 1, 2) execution, filtered, probed, probed - filtered as sent from v$sql_join_filter where qc_session_id in (793, 886); EXECUTION FILTERED PROBED SENT ---------- ---------- 1 1417311837 1493485510 76173673 2 41564 44024 2460
21
Бенефит в уменьшении читаемого объема данных Строится для сегмента (например, партиция таблицы) Во время SmartScan, при условии, что есть Единственное средство мониторинга : статистика “ cell physical IO bytes saved by storage index” Лучший эффект достигается на хорошо кластеризованных данных или около минимумов/максимумов любой кластеризации Работает с простыми операторами сравнения =,, =, BETWEEN, IN, IS NULL, IS NOT NULL. Работает с bind variables Не работает с != и % Хранится только в памяти, а не на диске Поддерживаются автоматически Можно отключить alter session set "_kcfis_storageidx_disabled"=true;
22
SALES (TABLE) SALE_IDTYPESHIP_DATE 300DVD04.03.2011 301GIFT12.03.2011 302BOOK08.03.2011 ……… 790BOOK02.05.2011 791DVD18.06.2011 792BOOK21.06.2011 Storage index on the column SHIP_DATE region Idx MinMaxNull 104.03.201112.03.2011N ……….. 602.05.201121.06.2011Y ……….. 1 Mb region 1 Mb region
23
SALES (TABLE) SALE_IDTYPESHIP_DATE 300DVD04.03.2011 301GIFT12.03.2011 302BOOK08.03.2011 ……… 790BOOK02.05.2011 791DVD18.06.2011 792BOOK21.06.2011 Storage index on the column SHIP_DATE region Idx MinMaxNull 104.03.201112.03.2011N ……….. 602.05.201121.06.2011Y ……….. 1 Mb region 1 Mb region select * from sales where ship_date = ‘15.06.2011’ Сканироваться будет регион 6, регион 1 будет пропущен
24
Доступ только к необходимым партициям блягодаря partition pruning С помощью Full Scan В режиме direct path read (либо parallel processing, либо serial direct path read) Соединение таблиц с помощью HJ, чтобы способствовать проталкиванию bloom filters
25
Compression always performed on DB tier Decompression could be offloaded only if Smart Хранится в Compression Units (обычно 32К или 64К). CU может занимать несколько Oracle блоков Compression Unit Block Header CU header Column 1 Column 2 Block Header Column 2Column 3 Column 4 Column 5 Block Header Column 6Column 7 Column 8 Column 9
26
Призван уменьшать время одно/мульти-блочных чтений Может быть использован для SmartScan тех объектов, для которых CELL_FLASH_CACHE = KEEP alter table test storage (cell_flash_cache keep)
27
1.Запрос на чтение блока 2.Одновременно посылается запрос на чтение с диска и с FlashCache 3.Тот ответ, который быстрее пришел выдается в DB Имеет возможность одновременно посылать запрос на чтение с диска и с FlashCache
28
1.Запрос на запись блока 2.Запись блока на диск 3.Подтверждение успешной записи 4.Помещение блока в кеш при условии, что данные оцениваются как необходимые для кеширования Запись происходит на диск, минуя FlashCache
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.