Tippek (oracle tippeket), oracle mechanika
SQL Tippek Oracle dokumentáció
- „A szintaxis: / * + TIPP TIPP ... * / PL / SQL szóközt a” + „és az első betű a tippeket értéke hiányában tér tip lehet figyelmen kívül hagyni, azaz a / * + * All_rows / megfelelő felhasználását és / * + all_rows * / - rossz
- Tippek mindig „boost” használni költség alapú optimalizálás (költség alapú optimalizáló) - kivéve utasításokat SZABÁLY
- Ha a lekérdezés használja álnevek (alias táblázat), a tippeket is fel kell használnia álneveket helyett tábla nevek:
- A poskazkah ne adja a nevét a program:
- Hibás tippek (érvénytelen tanácsok) nem veszi figyelembe figyelmeztetés nélkül ... helytelen tip talán nem nyilvánvaló, mint például:
- jelzés FIRST_ROWS kártyák (az első sorban) egy lekérdezés ORDER BY (mivel az adatokat meg kell válogatni, mielőtt az első lekérdezés húrok visszatért, a használat first_rows nem adja a kívánt eredményt)
- tüntetni a tooltip adatműveletei (elérési út) számára elérhetővé kell tenni, például: INDEX csipetnyi jelezve a nem létező index figyelmen kívül fogja hagyni hiba nélkül ... "
- általános célú optimalizáló
- hogyan lehet hozzáférni
- csatlakozási módszerek
- módszerek végrehajtása [alatt] Query
- Statisztika
- az átalakulás [a] kérelem
- használata kurzorok
- párhuzamos végrehajtás
Az optimalizálás céljai és megközelítései tanácsok
Tippek meghatározó közös célok és módszerek optimalizálására lekérdezés végrehajtási tervet, beleértve a szabályokat és az adatokhoz való hozzáférés módszereit. Megfelelnek az (majdnem) az értékeket a paraméterek leírását OPTIMIZER_MODE
/ * + Szabály * /
Ez hivatalosan nem támogatja, kezdve az Oracle 10, optimalizálásához használják pontosan oredelonnym szabályok (az eljárási szabályzat alapján Optimization) anélkül, hogy figyelembe véve a statisztikai adatbázis objektumokat. Leírása a szabályok beállítására inilizatsionnogo optimizer_mode = szabály
Különösen alkalmazása ellenére tippeket URALKODSZ Oracle fogja használni a költség alapú optimalizálás. ha:
- Szabály mellett más csúcsokat használják a lekérdezés
- partitsirovannye vagy lekérdezést használ táblázat szervezett indexként (IOT), vagy materializált nézetek (MNÉZET)
- A lekérdezés használt rágalmazás MINTA, táblázatkezelő, design készleteinek csoportosításával
- A lekérdezés használ ANSI left | teljes külső összekapcsolás
- lekérdezés fut párhuzamosan
- Használt Flashback kurzor (például a [SCN | timestamp])
- ...
11,2 ha RBO optimalizáló nyomkövetési lehet konfigurálni és használni néhány átváltási kérelmek kivételével költség alapú lekérdezési Transformation (ami logikus :) - lásd megjegyzések állapotát mutató használhatatlanná INDEX azonnali és RBO frissített Oracle 11.2.
/ * + All_rows * /
«All_rows Tip meghatározza a célja a mielőbbi végrehajtását az egész kérést a minimális erőforrás-fogyasztása (a legjobb teljesítményt, ha eltávolítja az egész eredményhalmaz). Az egyidejűleg vagy all_rows FIRST_ROWS tippeket meghatározó adathozzáférési módszerek (NO_INDEX_SS, INDEX_COMBINE.) Or jelző módszerekkel egyesület adatbázis-objektumok (VEZETŐ, USE_NL_WITH_INDEX.) Az optimalizáló előnyben kéri elérési módok és egyesület "
/ * + FIRST_ROWS * /
Due Oracle 8 dokumentáció: „Tip FIRST_ROWS megközelítés határozza meg az értékét (költség-alapú megközelítés), hogy optimalizálja lekérdezési blokkok (nyilatkozat blokk), azzal a céllal, hogy jobban válaszidő (válaszidő minimális átfolyási források, hogy visszatérjen az első sorban a kérelmet.). Ennek megfelelően a tip-optimalizáló, a következő elsőbbségi [a választott adathozzáférés műveletek és csatlakozási módok]
- Jelenlétében az optimalizáló a leolvasó index (index scan) helyett egy teljes táblázat vizsgálat (teljes táblázat scan)
- Ha a vizsgálat elérhető a index (index scan), az optimalizáló kiválasztja beágyazott hurok csatlakozzon helyett sort-merge csatlakozzon, amikor beolvasott indexelt táblázat is használható, mint egy tábla meghajtott (belső táblázatot) műveletek beágyazott hurok
- Ha az index alkalmazása (index scan) lehet használni, így az adatok rendezve (sorrendben, egy bizonyos mondat ORDER BY), az optimalizáló kiválasztja az index, hogy segítsen elkerülni a további válogatás "
Mivel az Oracle 9i: «FIRST_ROWS Tip mondta, nem az érvek célja, hogy optimalizálja a végrehajtási tervet a korai visszatérés az első query string tároljuk csak kompatibilitási (visszafelé kompatibilitás) és a stabilitás kiviteli tervek (terv stabilitás)»
A paraméter értéke inilizatsionnogo OPTIMIZER_MODE = FIRST_ROWS (amely megegyezik a használata FIRST_ROWS tipp az összes kérelem) annonsiruetsya dokumentációt verzió Oracle 11.2
/ * + FIRST_ROWS (n) * /
Optimalizációja alapján költség (Cost alapján Optimization) + használat szabályai (preferencia a választott terv) annak érdekében, hogy a legjobb válasz ideje az első n sort. A terv figyelembe véve számítják ki az n értéke, mint a kívánt mennyiségű kiválasztott sorok lekérdezés (lekérdezés számosságú).
Nem egészen értem ezt a kifejezést a dokumentumban. „Fokozott mellőzések ezt a célzást mondatokat SQL DELETE és UPDATE és SELECT lekérdezés beleértve a blokkoló műveleteket, mint a rendezés és csoportosítás. Ezek az SQL utasítások nem lehet optimalizálni, hogy a legkisebb válaszidő (legjobb válasz idő), mert az Oracle kell feldolgoznia a query string visszatérés előtt az első eredmény sort. Amikor megadja a prompt az ilyen jellegű kéréseket vannak optimalizálva, azzal a céllal, hogy megszerezze a jobb időt minden lekérdezés húrok minimális erőforrás-fogyasztása (a legjobb teljesítményt. All_rows mint amikor kártyát használó) "
Oracle mindig használ all_rows mód belsőleg DML nyilatkozatot - van egy jó példa a 10.2 Dion Cho blog
Az Oracle 11,2, semmi sem változott - függetlenül attól, hogy a frissített sorok száma (sor), telepített rownum funkció vagy tervek (kivéve a további műtét COUNT STOPKEY), nincs költség, nem várható semmilyen idő (Time) nem változik:
- amikor megpróbálja frissíteni csak egy sor Oracle kiválasztja ugyanazt a tervet egy drága művelet hash REGISZTRÁCIÓ SEMI (használt keresett építőipari van) - alkalmasabb az összes sort a táblázat frissítve (all_rows mód)
Egy egyszerű teszt megmutatni, hogy a különböző all_rows módokat. FIRST_ROWS és FIRST_ROWS (n) befolyásolja a viselkedését az optimalizáló: valójában, a végrehajtási tervek és eljárásokat, amelyek adatok + költség + sorokban :) Példák válogató vagy csoportosítása értelmetlen körülmények alkalmazásával object_id> 1 -, amelyek megfelelnek az összes sort a táblázat T1 - azzal a feltétellel, tábla létrehozása min (object_id) = 2) *:
*) Statisztika az asztalra T1 releváns és jól optimalizáló „tudja” a minimális és maximális értékek T1.Object_id:
vagy úgy könnyebb:
Access Path Tippek
Tippek meghatározó egyedi módon hozzáférhet az adatokhoz, az eljárás és az alkalmazott módszerek kombinálásával közbenső adatsor (eredmény készletek) *
Tom Kite hívja ezeket a nyomokat rossz (rossz tanácsok):
„Rossz nyomokat jelzi, hogyan kell eljárni optimalizáló [bekérésénél] mely indexet használni, milyen sorrendben feldolgozni egy asztal, amelyen keresztül működés (csatlakozni technika) vegyület előállítása [adatforrás]”
*) Előtt kérelmet kell figyelembe venni a változások valószínűségét a statisztikai rendszer és objektumok (táblák és indexek), amit egy lekérdezést a korral, és ennek következtében a lehetséges nem optimális mutató működés jövőbeni adathalmazok. A kivitelezési terv, optimalizált segítségével az ilyen típusú ötletek egy fejlesztői környezetben, akkor lehet kevesebb, mint az optimális harci bd (termelési rendszer), mert a különböző adatállományokat és a rendszer jellemzőinek ( „vas”)
/ * + VEZETŐ ([@query_block] [tablespec], [tablespec].) * /
«VEZETŐ hint meghatározza az optimalizáló, hogy használja a fenti lépéseket a táblákat az építési kivitelezési terv ... rugalmasabb, mint MEGRENDELT ... teljesen figyelmen kívül hagyja, amikor két vagy több egymásnak ellentmondó VEZETŐ tippeket. RENDELHETŐ célzást az optimalizáló az az előnye, szemben VEZETŐ »
A verzió 11.2 lehet figyelmen kívül hagyni optimalizáló által végzésekor konverziók alapján költség (Cost-alapú lekérdezés Transformation), például táblázat Expansion
/ * + ORDERED * /
«MEGRENDELT csipetnyi meghatározza Oracle [bekérésénél] végezzen kapcsolat asztal ugyanabban a sorrendben, ahogy a táblázat szerkezetét. Az Oracle azt ajánlja, hogy ahelyett, hogy a megrendelt VEZETŐ hint rugalmasabb ...”, azaz ad az optimalizáló több lehetőséget választotta a végrehajtási tervet
/ * + USE_HASH ([@query_block] [tablespec] [tablespec] ...) * /
/ * + NO_USE_HASH ([@query_block] [tablespec] [tablespec] ...) * /
... jelzi az optimalizáló használata / nem használja a hash csatlakozik művelet csatlakoztatására mindegyik táblázatok más adatforrások Operation CBO: Hash be
/ * + USE_NL ([@query_block] [inner_table]) * /
/ * + NO_USE_NL ([@query_block] [inner_table]) * /
/ * + USE_NL_WITH_INDEX ([@query_block] inner_table [indexspec]) * /
Igor, köszönöm szépen az anyag, akkor jó munkát végzett!
Van egy kérdésem. Kérjük, töltse ki a cikket, ha tudja, hogyan kell eljárni az ilyen helyzetekben.
Azt írják:
«DRIVING_SITE magában a kezelési feladatokat (mapping) az összes kurzor (nem pedig az egyes subqueries) ... [de akkor elhalasztja a végrehajtását a kurzor / allekérdezés a távoli felülvizsgálat]”
Ez tény. Nem kap küldeni allekérdezés teljes egészében a távoli szerveren. NO_MERGE nem segít, elkülönült és GROUP BY egy allekérdezés hiányzik. Ennek eredményeként minden egyes lépését segédlekérdezés teljesen kihúzták a távoli a helyi, és csak a helyi kiszolgálón történik nyírás hozzáférés predikátumok.
Jó napot, Dmitry
jó lenne, persze, hogy a kérés / testkeys teljesen)