1 / 28

Exadata

Exadata. Agenda. Overview Smart Scan Predicate Filtering Column Projection Join Filtering Storage Indexes Hybrid Columnar Compression Flash Cache. Overview. Overview. What is the Smart Scan. Predicate Filtering Column Projection Function Offload Simple Joins Filtering

rashad
Download Presentation

Exadata

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Exadata

  2. Agenda • Overview • Smart Scan • Predicate Filtering • Column Projection • Join Filtering • Storage Indexes • Hybrid Columnar Compression • Flash Cache

  3. Overview

  4. Overview

  5. 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.

  6. Smart Scan conditions • Full Scan • Full Table Scan • Full MatViewScan • 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. Column Projection • Возвращаются только необходимые столбцы • Бенефит в уменьшении объема передаваемых данных со Storage Cells на DB tier

  8. Predicate Filtering • Позволяет проталкивать предикаты на уровень Storage Cells. Возвращаются строки удовлетворяющие предикатам • SQL функции могут быть offloaded. Почти все одно строчные и почти никакие аггрегатные и аналитические. • select * from v$sqlfn_metadata where offloadable = 'YES' • Бенефит в уменьшении объема передаваемых данных со Storage Cells на DB tier

  9. Example 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. Example 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. Example 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. Example 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. Example 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. Example 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. Example 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. Joins offloading • Bloom Filters используются в Oracle начиная с 10.2 • Позволяет проталкивать bloom filters на Storage Cells уровень • Бенефит в уменьшении передачи ненужных данных со storage на DB level • Отключается параметром “_bloom_predicate_pushdown_to_storage“=false • Статистика фильтрации в представлении v$sql_join_filter

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

  18. Joins offloading. Example 2 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; -------------------------------------------------------------------------------------------- | 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"))

  19. 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

  20. 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

  21. Storage Indexes • Бенефит в уменьшении читаемого объема данных • Строится для сегмента (например, партиция таблицы) • Во время SmartScan, при условии, что есть • Единственное средство мониторинга : статистика “cell physical IO bytes saved by storage index” • Лучший эффект достигается на хорошо кластеризованных данных или около минимумов/максимумов любой кластеризации • Работает с простыми операторами сравнения =, <, >, <=, >=, BETWEEN, IN, IS NULL, IS NOT NULL. Работает с bindvariables • Не работает с != и % • Хранится только в памяти, а не на диске • Поддерживаются автоматически • Можно отключить alter session set "_kcfis_storageidx_disabled"=true;

  22. Storage Indexes 1 Mb region 1 Mb region

  23. Storage Indexes 1 Mb region 1 Mb region select * from sales where ship_date= ‘15.06.2011’ Сканироваться будет регион 6, регион 1 будет пропущен

  24. Ideal Execution Plan • Доступ только к необходимым партициям блягодаря partition pruning • С помощью Full Scan • В режиме direct path read (либо parallel processing, либо serial direct path read) • Соединение таблиц с помощью HJ, чтобы способствовать проталкиванию bloom filters

  25. Hybrid Column Compression • Compression always performed on DB tier • Decompression could be offloaded only if Smart • Хранится в Compression Units (обычно 32К или 64К). CU может занимать несколько Oracle блоков Compression Unit

  26. Flash Cache • Призван уменьшать время одно/мульти-блочных чтений • Может быть использован для SmartScanтех объектов, для которых CELL_FLASH_CACHE = KEEP • alter table test storage (cell_flash_cache keep)

  27. FlashCache: read request Имеет возможность одновременно посылать запрос на чтение с диска и с FlashCache Запрос на чтение блока Одновременно посылается запрос на чтение с диска и с FlashCache Тот ответ, который быстрее пришел выдается в DB

  28. FlashCache: write request Запись происходит на диск, минуя FlashCache Запрос на запись блока Запись блока на диск Подтверждение успешной записи Помещение блока в кеш при условии, что данные оцениваются как необходимые для кеширования

More Related