ПредишенСледващото

Един от най-лесните начини за ускоряване на заявки - това е тяхната rassparallelivanie.
Това се прави само чрез:
* Съвет
* След инсталацията сесии:
- N брой потоци

На теория това е достатъчно, за да се ускори по искане на няколко пъти.
Но има редица случаи, в които паралелно напротив пречат.

За да започнете, нека да се справят с терминологията - поглед към паралелен план да се присъединят 2 маси:
- Запитване 1

Таблица T2 има сингулярност: fk_id_skew неравномерно попълнено и има пристрастия в полза на един - това се случва много по-често, отколкото други.
- Query 2

Така че, да се подлагам на прост въпрос:
- Запитване 3

* Необходима е Regexp_replace в това искане, така че данните са събрани и не веднага да се види в статистиката на натоварването на процесора.
* Съвети вмъкват да планират запитване изглеждаха както е написано тук.

Времето за изпълнение на заявка = 49sek.

Добави намек паралелно (8) се заменя no_parallel.
Време на цикъл = 8с. което е 6 пъти по-бързо.
Нека за разбирането на плана за заявка:
- план 1

Това съществено фази:
* PX БЛОК итератор - четене маси части в някои потоци
* PX SEND - 1 изпраща потока от данни към друга. Важно е да се знае, че само един производител (PX SEND) може да бъде активна в даден момент, който налага ограничения върху плана за паралелно изпълнение по-подробно: Втората част на разпределението на данните в паралелния заявката
** отглеждане - данни ще бъдат разбити в диапазони (често за сортиране)
** HASH - въз основа на обхвата на данни на хеш (хеш се присъединят, група с)
** СЛУЧАЙНА - случаен изпрати
** ИЗЛЪЧВАНЕ - (. Често на малка маса, заедно с последващо Всеки срещу всеки десен таблицата може да бъде проблем с производителността, ако лявата таблица е много по-голяма от посочената в статистиката, тъй като данните се дублира във всички потоци) изпращане на масата на всички потоци
** кръгов - потоци данни се изпращат в кръг

За методите на разпределение на потоците от данни трябва да говорим отделно:

Заслужава да се отбележи, че те се борят за стойностите в линиите на колоните, а не само в редовете.
Необходимо е да има един и totzhe Range данни от различни таблици влязоха в един поток да се присъединят.
Ако Oracle не го направи, а след това в една нишка може да получите един напълно различен данни и да се присъедини би било невъзможно да се направи.
Заслужава да се обърне внимание, защото това може да бъде причина забавяния на паралелна заявка със силен кос данни (D zamdelenniya причинява едновременни заявки за)

** Р> Р - данни от паралелни групи се прехвърлят в друга паралелно групово
** Р> S - паралелизъм последователно изпълнение (или край пречка искане - втората основна причина за бавно паралелно заявка)
** PCWP - паралелно с родителя: сканиране на масата и не веднага се присъедини към друга
** PCWC - противно филтър на външния поток и се прилагат сканирането
* PX ПОЛУЧИ - получаване на данни от един поток на друг паралелен
* PX SEND QC - изпращане координатор данни
* PX КООРДИНАТОР - приемник на едновременни заявки
* TQ - Брой Flow

1. Наличието по отношение на събития "Р> S - успоредно на сериен изпълнение", но преди "PX КООРДИНАТОР"
Това ни казва, че Oracle е трябвало да се съберат от всички нишки в една единствена последователност (последователност), което даде гърлото на бутилката да се изчака за много дълго поток всички останали.

Ето един пример с ROWNUM. Добави избрана линия номер на всяка таблица:
Планът се е променило,
* За да се изчисли COUNT ROWNUM маса паралелен процес се чете от диска "PX БЛОК итератор" на линия "Р> S", която отрича всичко perimeschustvo разпределени четене.
* Присъединяване не се извършва в отделна нишка (: TQ10002)
защото двата потока са били превърнати в последователен набор от данни и не могат да се използват едновременно.
В резултат на това времето за изпълнение на заявката е още по-голям (51), отколкото не са успоредни версия (49) поради допълнителните разходи за подкрепа на едновременност, които не се използват

2. PX SEND кос - кос данни
образуването варира в данните в един от потоците.

Демонстрира това става просто предварително генериран изкривена колона t_2.fk_id_skew.

Ако изпълните заявката, но за да се присъединят към таблиците за използване на условието: t_2.fk_id_skew = t_1.id
цялостната паралелно Планът за заявка не се променя (вж. Вариант 1), но времето за изпълнение ще се увеличи до 38в.

Причината е, че в колоната лежи t_2.fk_id_skew 1 500 000 стойности = 1 и 3,5 милиона други. А когато "PX SEND HASH" повечето от редовете на таблицата попаднат в един поток за преработка, вместо да бъде равномерно разпределен.

Oracle паралелно заявка за оптимизация, skahin Алекс

Фигура 1 - голямата част от времето е предприета проверка, извършена в една нишка, други теми, които го чакали.

Oracle паралелно заявка за оптимизация, skahin Алекс

Фиг. 2. - Това се потвърждава и в раздела ПАРАЛЕЛНО: 37в от общото време е работил един поток.


Oracle се сбъдва, защото че е невъзможно да се направи присъединят данни от различни диапазони.

За статистика изпълнение сравнение търсим високо паралелизирано поискване (Образец 1), при условие, без основи t_2.fk_id_uniform = t_1.id


Всички извършва в 8 нишки, и всяка нишка е равномерно обработват само им равен дял.

3. Bloom филтри
Без да навлизам в механиката на създаване на разцвет филтърни битови вектори ще опишем предимствата от използването им.
Пример искане:
1. На таблица T1 филтър "филтър (". "" Т1 MOD "= 42)" създава цъфтеж филтър - PX УЧАСТВА ФИЛТЪР CREATE
2. Филтър за цигари съгласно претенция 1 се прилага към Т2 маса - PX УЧАСТВА ФИЛТЪР УПОТРЕБА
По този начин се ограничава размера на дясното масата.
3. Филтриран маса Т2 е свързан с хеш УЧАСТВА буфериран
ПОДРОБНО ОПИСАНИЕ цъфтеж филтър: Блум филтър

цъфтеж филтър са добри от:
* Паралелни въпроси - намаляване на количеството данни, прехвърлени между потоците, дължащи се на предфилтриране дясната таблица
* RAC системи - намалява количеството данни, предавани по мрежата между възлите
* InMemory маси - носещи inmemory предфилтриране маса и inmemory изпълнение не се присъедини към бързо филтрира дясната таблица


4. разпределение Wise
Като цяло, подобно на предходната точка, но филтърът се прилага към таблицата с десен дял, като в същото време намаляване на сканирането.
Dedektiruetsya от гледна точка на фрази за търсене:
* ЧАСТ присъединят към FILTER СЪЗДАВАНЕ (: BF0000) - създаване на филтър в лявата таблица
* Pstart | Pstop =: BF0000 |: BF0000 - приложите филтър, за да прочетете правилната експлоатация на маса PCWC

Подкрепете проекта - споделете линка, благодаря!