seminář: Administrace Oracle (NDBI013) LS2017/18 RNDr. Michal Kopecký, Ph.D. Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague
Zvyšuje výkon databáze Rychlejší vykonání dotazů nad velkým objemem dat Lepší využití dostupných zdrojů CPU Sekundární paměť I/O kanály Stupeň paralelizace kolik procesů pracuje souběžně Oracle Parallel Execution
Větší režie při vykonávaní Jednoduché dotazy při paralelním zpracovaní mohou být pomalejší Pravidlo 10 sekund Pokud dotaz trvá více než 10 sekund, je potenciálním kandidátem na paralelní zpracování.
Vyžaduje statické rozdělení dat Každý proces pracuje na svých pevně stanovených datech Obvyklé v ne-oracle databázích
Dynamické rozdělování dat mezi procesy Náročnější na provoz, ale nezávislejší na datech
Query SELECT, JOIN Podmienky: Alespoň k jedné tabulce se přistupuje jako full scan, anebo se k indexu, který je rozdělený do niekolika oddílů (partitions), přistupuje přes range scan V příkazu je hint pro paralelní zpracování, anebo je tabulka nastavená pro paralelní zpracování Pokud prohledáváme přes index, který je rozdělený na několik oddílů, příkaz musí obsahovat hint PARALLEL_INDEX M. Kopecký NDBI013 6
DML (Data Manipulation Language) Podmínky pro UPDATE, DELETE: Pokud se příkaz týká více oddílů tabulky Na nerozdělených tabulkách nemůže být proveden Podmínky pro INSERT: Pouze v případě, že ho používáme se SELECTem, tj. INSERT SELECT FROM INSERT s hodnotami (VALUES) nemůže být paralelizovaný M. Kopecký NDBI013 7
DDL (Data Definition Language) Tabulky, indexy Paralelizmus je možný Pro nerozdělené tabulky a indexy, pokud je příkaz typu: CREATE TABLE AS SELECT.. CREATE INDEX ALTER INDEX REBUILD M. Kopecký NDBI013 8
Query Coordinator rozděluje práci a sbírá dílčí výsledky Parallel Execution Server Processes provádí dílčí operace s daty čekají na coordinatora v parallel execution server process pool EXPLAIN PLAN FOR select * from... SELECT * FROM TABLE(dbms_xplan.display());
M. Kopecký NDBI013 10
Intraoperation parallelism Na zpracování jedné operace se podílí více procesov Interoperation parallelism Paralelní zpracování více dílčích operací M. Kopecký NDBI013 11
M. Kopecký NDBI013 12
Inter-operation parallelism Inter-operation parallelism SELECT /*+ PARALLEL(employees 4) PARALLEL(departments 4) USE_HASH(employees) ORDERED */ MAX(salary), AVG(salary) FROM employees, departments WHERE employees.department_id = departments.department_id GROUP BY employees.department_id; M. Kopecký NDBI013 13
SELECT jmeno, MAX(plat), AVG(plat) FROM zamestnanec zam, oddeleni odd WHERE zam.idodd = odd.idodd ORDER BY jmeno;
minimální část zpracovávaná odděleně dělení na granule je závislé na: konkrétních datech operaci stanoveném stupni paralelizace bloky (logicky) x partitions (fyzicky) dělení nelze ovlivnit
Stanovena automaticky (Auto DOP) Pokud chci přistupovat k objektu paralelně: ALTER TABLE zamestnanec PARALLEL 4; Pokud chci vynutit paralelizaci své session: ALTER SESSION FORCE PARALLEL QUERY ; hint v SQL: SELECT /*+ PARALLEL(z 4) /* jmeno FROM zamestnanec z...
Počet použitých parallel execution serverů Dynamicky určený podle: Aktuálního zatížení HW konfigurace Atributů objektu Priority Manuálně Nastavené jako atribut objektu Vynucením minimálního počtu serverů
SHOW PARAMETER PARALLEL nebo přes V$PARAMETER parallel_min_servers... počet serverů při spuštění parallel_max_servers... maximální počet serverů parallel_adaptive_multi_user... dynamické dělení mezi uživatele parallel_degree_policy... MANUAL/AUTO/LIMITED
SESSION ALTER SESSION {ENABLE DISABLE FORCE} PARALLEL {QUERY DDL DML} Zjištění nastavení pro aktuální session: SELECT PDML_ENABLED, PDML_STATUS, PDDL_STATUS, PQ_STATUS, SID FROM V$SESSION WHERE SID = ( SELECT SID FROM V$MYSTAT WHERE ROWNUM = 1); M. Kopecký NDBI013 19
CREATE TABLE: CREATE TABLE big_emp PARALLEL (degree 4) AS SELECT * FROM emp; INSERT: ALTER SESSION ENABLE PARALLEL dml; INSERT /*+ parallel (emp_big,4,1) */ INTO emp_big SELECT * FROM emp; COMMIT; ALTER SESSION DISABLE PARALLEL dml; M. Kopecký NDBI013 20
CREATE INDEX CREATE INDEX emp_ix ON emp (emp_id) TABLESPACE ind STORAGE ( INITIAL 1M NEXT 1M PCTINCREASE 0 MAXEXTENTS 20) PARALLEL (DEGREE 4) M. Kopecký NDBI013 21
DoP = Degree of Parallelism M. Kopecký NDBI013 22
Umožňuje fyzické rozdělení databázových objektů Dělení na základě hodnot zadaného sloupce (pomocí intervalu, seznamů hodnot, hešování...)
create table prodej (rok number(4),...) partition by range(rok) partition p1 values less than (1992) tablespace t1 partition p2 values less than (1993) tablespace t2 partition p3 values less than (2000) tablespace t3
create table prodej (rok number(4),...) partition by hash(rok) partitions 4 store in (tab1, tab2, tab3, tab4)
create table prodej (rok number(4),...) partition by list(rok) partition p1 values('2016', '2017') tablespace t1 partition p2 values('2018') tablespace t2;
Lokální index index uložen u každého oddílu Globální index index dělen samostatně Globální nedělený index