28
Exadata

Overview Smart Scan Predicate Filtering Column Projection Join Filtering Storage Indexes Hybrid Columnar Compression Flash Cache

Embed Size (px)

Citation preview

Page 1: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

Exadata

Page 2: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

Agenda

Overview Smart Scan

Predicate Filtering Column Projection Join Filtering Storage Indexes

Hybrid Columnar Compression Flash Cache

Page 3: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

Overview

Page 4: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

Overview

Page 5: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

What is the Smart Scan

Predicate Filtering Column Projection Function Offload Simple Joins Filtering Storage Indexes

Данные приходят в PGA не в привычном формате Oracle блока, а в виде пакетов, содержащих только необходимые данные.

Всегда осуществляется параллельными процессами на storage cell layer. Как следствие степень (degree) of parallelism уменьшена для запросов использующих параллелизм по сравнению с не-Exadata environments.

Page 6: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

Smart Scan conditions

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’)

Page 7: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

Column Projection Возвращаются только необходимые столбцы Бенефит в уменьшении объема передаваемых данных со Storage Cells на DB tier

Page 8: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

Predicate Filtering Позволяет проталкивать предикаты на уровень Storage Cells. Возвращаются строки

удовлетворяющие предикатам SQL функции могут быть offloaded. Почти все одно строчные и почти никакие

аггрегатные и аналитические. select * from v$sqlfn_metadata where offloadable = 'YES'

Бенефит в уменьшении объема передаваемых данных со Storage Cells на DB tier

Page 9: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

ExampleQuery: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)

Page 10: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

ExampleSQL> 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

Page 11: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

ExampleSQL> 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 EVENTSEVENT TOTAL_WAITS ------------------------------ ----------- direct path read 3002

SESSION STATSNAME VALUE------------------------------------------------------------ ---------------cell physical IO interconnect bytes 7 971 905 536cell physical IO bytes eligible for predicate offload 0cell physical IO interconnect bytes returned by smart scan 0cell scans 0

Page 12: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

ExampleSQL> 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

Page 13: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

ExampleSQL> 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 STATSNAME VALUE------------------------------------------------------------ ---------------cell physical IO bytes eligible for predicate offload 7 971 905 536cell physical IO interconnect bytes returned by smart scan 130 279 456cell physical IO interconnect bytes 130 279 456cell scans 1

Page 14: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

ExampleSQL> 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

Page 15: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

ExampleSQL> 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 EVENTSEVENT TOTAL_WAITS ------------------------------ ----------- cell smart table scan 170

SESSION STATSNAME VALUE------------------------------------------------------------ -------------cell physical IO bytes eligible for predicate offload 7 971 905 536cell physical IO interconnect bytes 38 148 952cell physical IO interconnect bytes returned by smart scan 38 148 952cell scans 1

Page 16: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

Joins offloading Bloom Filters используются в Oracle начиная с 10.2 Позволяет проталкивать bloom filters на Storage Cells уровень Бенефит в уменьшении передачи ненужных данных со

storage на DB level Отключается параметром

“_bloom_predicate_pushdown_to_storage“=false Статистика фильтрации в представлении v$sql_join_filter

Page 17: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

Joins offloading. Example 1

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"))

Page 18: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

Joins offloading. Example 2

--------------------------------------------------------------------------------------------| 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;

Page 19: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

Joins offloading. Example 2 listing

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

Page 20: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

Joins offloading. Example 2 listing

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

Page 21: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

Storage Indexes

Бенефит в уменьшении читаемого объема данных Строится для сегмента (например, партиция таблицы) Во время 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;

Page 22: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

Storage Indexes

SALES (TABLE)

SALE_ID TYPE SHIP_DATE

300 DVD 04.03.2011

301 GIFT 12.03.2011

302 BOOK 08.03.2011

… … …

790 BOOK 02.05.2011

791 DVD 18.06.2011

792 BOOK 21.06.2011

Storage index on the column SHIP_DATE

region Idx

Min Max Null

1 04.03.2011 12.03.2011 N

… … … ..

6 02.05.2011 21.06.2011 Y

… … … ..

1 Mb region

1 Mb region

Page 23: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

Storage Indexes

SALES (TABLE)

SALE_ID TYPE SHIP_DATE

300 DVD 04.03.2011

301 GIFT 12.03.2011

302 BOOK 08.03.2011

… … …

790 BOOK 02.05.2011

791 DVD 18.06.2011

792 BOOK 21.06.2011

Storage index on the column SHIP_DATE

region Idx

Min Max Null

1 04.03.2011 12.03.2011 N

… … … ..

6 02.05.2011 21.06.2011 Y

… … … ..

1 Mb region

1 Mb region

select * from sales where ship_date = ‘15.06.2011’

Сканироваться будет регион 6, регион 1 будет пропущен

Page 24: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

Ideal Execution Plan

Доступ только к необходимым партициям блягодаря partition pruning

С помощью Full Scan В режиме direct path read (либо parallel processing, либо

serial direct path read) Соединение таблиц с помощью HJ, чтобы

способствовать проталкиванию bloom filters

Page 25: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

Hybrid Column Compression

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 2

Column 3

Column 4

Column 5

Block Header

Column 6

Column 7

Column 8

Column 9

Page 26: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

Flash Cache

Призван уменьшать время одно/мульти-блочных чтений Может быть использован для SmartScan тех объектов, для

которых CELL_FLASH_CACHE = KEEP alter table test storage (cell_flash_cache keep)

Page 27: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

FlashCache: read request

1. Запрос на чтение блока2. Одновременно посылается

запрос на чтение с диска и с FlashCache

3. Тот ответ, который быстрее пришел выдается в DB

Имеет возможность одновременно посылать запрос на чтение с диска и с FlashCache

Page 28: Overview  Smart Scan  Predicate Filtering  Column Projection  Join Filtering  Storage Indexes  Hybrid Columnar Compression  Flash Cache

FlashCache: write request

1. Запрос на запись блока2. Запись блока на диск3. Подтверждение успешной

записи4. Помещение блока в кеш при

условии, что данные оцениваются как необходимые для кеширования

Запись происходит на диск, минуя FlashCache