Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
nemu
HV vaatleja

liitunud: 22.01.2002
|
04.10.2010 15:49:43
|
|
|
Buffer cache saab muud jura täis?
Võid cache hinti proovida:
select /*+ CACHE(table_name) */ * from table_name |
|
|
Kommentaarid: 12 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
11 |
|
tagasi üles |
|
 |
serk
HV kasutaja
liitunud: 24.05.2003
|
04.10.2010 16:09:04
|
|
|
Le Inc kirjutas: |
Pole küll MySQL aga Oracle (sarnased ).
Miks peale oracle service restarti suurest tabelist lugemise kiirus (select * from) langeb ~11 sekilt ~2 sekile? See on muidugi tore, aga küss selles miks ta päeva jooksul jälle 11 sekile maandub? Kas asi on mingites indeksites vms? Kuidas saaks asja "jäädavaks" teha. Ehk mõni spets teab. |
Küsimus millele baasi nägemata suhteliselt võimatu vastata.
Aga üldiselt näen kahte võimalust:
1) Päring loetakse mälust
2) Kogu tabel tõmmatu mällu ja tänu sellele kiire fetch.
Mis vahendiga sa päringuid teed? Kas fetchid alati kõik read või ainult top rows? Kas peale restarti esimene päring, full fetch, toimub 2 sekiga ja teine 11 sekiga, või käib esimene kord kauem ja teine siis välgukiirusel, kas WHERE tingimus muutub päringutes? Kirjelda rohkem olukorda.
|
|
Kommentaarid: 8 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
2korda2
HV kasutaja
liitunud: 19.07.2003
|
04.10.2010 16:19:05
|
|
|
serk,
kui suuri süsteeme oled teinud? Niikaua, kui ülesandeks on Kalle Kusta pagaritöökoja 10 kuklit kolmele hulgimüüjale müüa, on kõik ilus ja lihtne. Ükspäev aga satud ülesande otsa, kus tabelites on miljoneid kirjeid ja klient ootab süsteemilt regeerimist sekundi jooksul. Siis võid ennast halliks optimeerida aga denormaliseerimisest ei pääse.
"ligipääs baasile" - on päris erineval tasemel ja meetodil ligipääsu võimaldamist. Üldjuhul välistele pooltele kuvatakse andmeid läbi view - selle definitsiooni saab muuta jooksvalt vastavalt vajadusele ilma, et teine pool peaks andmemudeli muudatuste tõttu andmevahetust muutma hakkama (lisaks on õiguste probleem sellega lihtsalt lahendatav). Kui teisel poolel on vaja andmeid lisada, siis selleks tehakse eraldi tabel või protseduur. Jällegi selleks, et väljast tulevad andmed oleksid võimalikult eraldatud muust andmemudelist ja liides ei sõltuks andmemudeli muudatustest. Ma olen näinud ka lahendust, kus sisuliselt kogu salvestus baasi käis läbi protseduuride (ma ei ütle, et see mõistlik oleks aga ka nii saab ja seal oli isegi vaieldav põhjus).
Le Inc,
Oracle (ja ka muud "suured" serverid) optimeerivad oma tööd jooksvalt. Üks päring võib seetõttu tõesti võtta erinevalt aega sõltuvalt sellest, millise plaani alusel server selle lahendab. Nii umbes 8 aastat tagasi olin ise tunnistajaks, kus Oracle baas vajas iga paari nädala tagant sunniviisilist statistika ümberarvutamist, sest suutis ennast jooksvalt "lolliks optimeerida". Mis siis lahendus oli, ei mäleta kahjuks.
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
serk
HV kasutaja
liitunud: 24.05.2003
|
04.10.2010 16:28:13
|
|
|
2korda2 kirjutas: |
serk,
kui suuri süsteeme oled teinud? Niikaua, kui ülesandeks on Kalle Kusta pagaritöökoja 10 kuklit kolmele hulgimüüjale müüa, on kõik ilus ja lihtne. Ükspäev aga satud ülesande otsa, kus tabelites on miljoneid kirjeid ja klient ootab süsteemilt regeerimist sekundi jooksul. Siis võid ennast halliks optimeerida aga denormaliseerimisest ei pääse.
"ligipääs baasile" - on päris erineval tasemel ja meetodil ligipääsu võimaldamist. Üldjuhul välistele pooltele kuvatakse andmeid läbi view - selle definitsiooni saab muuta jooksvalt vastavalt vajadusele ilma, et teine pool peaks andmemudeli muudatuste tõttu andmevahetust muutma hakkama (lisaks on õiguste probleem sellega lihtsalt lahendatav). Kui teisel poolel on vaja andmeid lisada, siis selleks tehakse eraldi tabel või protseduur. Jällegi selleks, et väljast tulevad andmed oleksid võimalikult eraldatud muust andmemudelist ja liides ei sõltuks andmemudeli muudatustest. Ma olen näinud ka lahendust, kus sisuliselt kogu salvestus baasi käis läbi protseduuride (ma ei ütle, et see mõistlik oleks aga ka nii saab ja seal oli isegi vaieldav põhjus).
Le Inc,
Oracle (ja ka muud "suured" serverid) optimeerivad oma tööd jooksvalt. Üks päring võib seetõttu tõesti võtta erinevalt aega sõltuvalt sellest, millise plaani alusel server selle lahendab. Nii umbes 8 aastat tagasi olin ise tunnistajaks, kus Oracle baas vajas iga paari nädala tagant sunniviisilist statistika ümberarvutamist, sest suutis ennast jooksvalt "lolliks optimeerida". Mis siis lahendus oli, ei mäleta kahjuks. |
Täiesti arusaamatu postitus. Aga vastus sinu küsimusele: väga suuri, hetkel suurim tabel millega töötan ca 50 miljonit kirjet.
Jah, Oracle ise optimeeribki oma käivitusplaane vastavalt statistikale. 8a tagasi oli Oracle midagi muud kui ta praegu on... Seletad ehk mida sa ikkagi öelda tahtsid?
|
|
Kommentaarid: 8 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
2korda2
HV kasutaja
liitunud: 19.07.2003
|
04.10.2010 16:31:38
|
|
|
Kui aru ei saanud, ju pole piisavalt keerulisi süsteeme teinud. Väide, et andmete dubleerimine on IGAL JUHUL paha ei päde lihtsalt.
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
serk
HV kasutaja
liitunud: 24.05.2003
|
04.10.2010 16:38:40
|
|
|
2korda2 kirjutas: |
Kui aru ei saanud, ju pole piisavalt keerulisi süsteeme teinud. Väide, et andmete dubleerimine on IGAL JUHUL paha ei päde lihtsalt. |
Selge, nüüd sain topicust ka aru ja saan sulle vastata.
Kui me räägime mat. viewdest ja viewdest, siis sinna andmete tekitamine ja perioodiline refresh ei ole andmete dubleerimine andmemudeli mõistes, see on täiesti erinev asi. Väga paha on töötabelites andmete dubleerimine, see on asi millest rääkisime ja mida kellelegi ei soovitaks.
Ka endal jooksevad peamised ja suured aruanded mat viewdel, sest töötabelitest päringu tegemine käiks mitmeid tunde.
Ma ei saa aru miks HinnaVaatluses osad inimesed nii agressiivsed on ...
Cache hint üldjuhul aitab väga hästi, kui sa teed järjestikuselt full scanne samale tabelile, kuna aga sinu täpset probleemi siiski ei tea, siis proovida ju võib, aga kui ei funka, pane kirja täpsemalt ja detailsemalt - saame siis aidata.
|
|
Kommentaarid: 8 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
2korda2
HV kasutaja
liitunud: 19.07.2003
|
04.10.2010 17:12:45
|
|
|
EI! Ma ei pidanud silmas mat. viewsid vaid justnimelt andmemudeli denormaliseerimist! Küsimus ei ole aruandes - küsimus on töökuvade kiires toimimises. Kui suur aruanne sekundiga ei avane, siis see üldjuhul kedagi ei morjenda, kui aga tavaline töökuva 2 sekundit avaneb, siis on kasutaja õigustatult kuri. Kui korraga on kuval andmeid 5-7 tabelist ja igaühes on miljoneid kirjeid, siis kasulikum on paar veergu dubleerida ja saada tabelite hulk <=3 peale.
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
serk
HV kasutaja
liitunud: 24.05.2003
|
04.10.2010 20:57:43
|
|
|
Olgu, teeme rahu, kuna me ei tea üksteise tööstussektoreid, siis vaielda raske, ühele sobib üks, teisele teine.
Aga arvestades sellega, et käesolevas foorumis, ka käesolev topic, tehakse üldjuhul tavalisi veebilahendusi, siis nendel juhtudel ei küündi nende andmemaht eales tasemeni, mil tuleks hakata denormaliseerima
Aga nagu ennist öeldud, denormaliseerimist mina isiklikult ei poolda ja väldiks igal võimalikul viisil, kuna see tekitab siiski probleeme:
1) Andmete up-to-date hoidmine
2) Lisa kettaruum
3) Andmemudeli lisa keerukus ja insert, update, delete aeglustumine(FK;PM;Constraindid)
4) Arenduskulu tunduvalt kallim, nii baasi kui UI seisukohast.
Andmete kuvamise kiirus on tegelt lõputu probleem ning lähenemisviise on erinevaid, kes soovitab osta kõvemat rauda, kes süsteemi ümber kirjutada jne ... Ainuõiget teed polegi.
Aga oli tore vaielda Edu.
|
|
Kommentaarid: 8 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
Le Inc
HV Guru

liitunud: 06.09.2002
|
05.10.2010 08:23:04
|
|
|
serk kirjutas: |
Mis vahendiga sa päringuid teed? Kas fetchid alati kõik read või ainult top rows? Kas peale restarti esimene päring, full fetch, toimub 2 sekiga ja teine 11 sekiga, või käib esimene kord kauem ja teine siis välgukiirusel, kas WHERE tingimus muutub päringutes? Kirjelda rohkem olukorda. |
Oli tabel ca. 650 000 kirjega, keskmine select käis ~15 sekki (veebilehele, mis kuvas esimesed 15 rida. Mul on stopper php's peale pandud). Tegin tabeli kaheks, jätsin uude tabelisse 1 kuu andmed (otseselt pole juurdepääsu kasutajal vaja, käiks tegelt ka paaripäevane ajalugu), nüüd käib sama päring 11 sekki. Seda on ikkagi palju.
Suurt listi vaatame sisevõrgust, seda kasutaja nii või naa ei näe, aga sisse logimisel kasutatakse sama tabelit kõige värskemate andmete näitamiseks. Sealt tuleb ka pikk laadimise aeg. Võimalik et saaks kuidagi kuupäevaga vms vahendiga Oracle "täistabelit" mitte pärima.
Lühidalt öeldes on ehk nippe kuidas asja optimeerida ... ?
Raud on ka kehva, 5a. vana server. Järgmine aasta hangiks SSD raid'i siis ehk hakkaks looma.
PS! Vastused su küsimustele:
- Mis vahendiga sa päringuid teed? Kas fetchid alati kõik read või ainult top rows?
Select ikka pärin? palju on ka in klausleid, see ka annab palju juurde
- Kas peale restarti esimene päring, full fetch, toimub 2 sekiga ja teine 11 sekiga, või käib esimene kord kauem ja teine siis välgukiirusel, kas WHERE tingimus muutub päringutes? Kirjelda rohkem olukorda.
Peale restarti esimene täis päring (175 000 rida) käis 5,3 sekki, teine juba 1,7 sekki ja nii jääbki mõneks tunniks, siis jälle 11 seki peal. Peale restarti need veebilehe päringud mis võtavad ~3,5 sekki tehakse 1 sekiga (kaks select in jms. alampäringuid).
viimati muutis Le Inc 05.10.2010 08:39:06, muudetud 1 kord |
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
54 |
|
tagasi üles |
|
 |
2korda2
HV kasutaja
liitunud: 19.07.2003
|
05.10.2010 08:35:43
|
|
|
Plaan vaja üle vaadata. Kas päring kasutab indekseid või laseb full scan? Kui indekseid ei kasuta, siis muuda kas päringut või lisa indeks, kuhu vaja. Kui group by vms sees pole, siis 4 sekundit sellise hulga juures on hiiglama palju (tingimusel, et sa ei lae üles mingit suurt "pildiinfot" vms).
Veel 1 asi mida kindlasti tähele panna - tarkvaraliselt (ehk päringuid optimeerides, mudelit kohendades) võid teinekord võita kiiruses tuhandeid kordi, riistvara annab ka väga heal juhul tubli suurusjärgu võrra vähem tagasi. Samas riistvara on tihtipeale odavam ja seetõttu ka lihtsama vastupanu tee Mul on endal jälle kogemus, kus üks üsna suur protseduur töötas esimeses "ah peaasi et töötab" versioonis ca 30 minutit. Pärast kahte päeva optimeerimist sai selle alla 20 sekundi peale. Seejuures andmemudelit ei muudetud (kui mitte arvestada protseduuri töö käigus juurde tekkinud ajutisi tabeleid). Riistvaraliselt poleks sellise tulemuseni lihtsalt jõudnud.
serk,
sry, ma olen hellaks tehtud igasugu "hiilgavate" lahendustega ja seetõttu kipun järsult reageerima. Mõte on ikkagi selles, et andmete dubleerimine suurte süsteemide korral on paratamatus. Jah, on kallim arendada ja hallata aga kui alternatiiviks on tatina veniv rakendus, siis lihtsalt pole muud võimalust. Samas tõsi ta on - siit foorumist abi otsiv tegelane tõenäoliselt sellist süsteemi ei tee. Peace!
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
serk
HV kasutaja
liitunud: 24.05.2003
|
05.10.2010 12:06:49
|
|
|
Hei
Esimene full scan käib sul 5.3 sekki, järgmine päring mis sul käib 1.7 sekki käib mälust. Paari tunni pärast on mälust päring minema lükatud ja tehakse järjekordselt full scan.
Tuunimise aitamiseks oleks hea kui saaksid postitada create tabel scriptid koos veergude kommentidega - data võin ise insertida. Ning peamine, päring mis seal peal käib - on vaja äriliseslt aru saada mida tahetakse näidata. Peale seda saab mõelda kuidas seda kõike tuunida. Explain plan ei teeks samuti paha.
Aga nagu eelmine postitaja ütles, siis tõenäoliselt korrektsed indeksid aitaks.
Näiteks:
1) Teha ta mat. view'ks kuhu esmalt täitagi ainult need 15 rida mida tahad näidata ning edaspidi kasutada fast refreshi
2) Indekseerida tabel
3) Tõmmatagi tabel jõuga mällu
4) jne ... väga palju erinevaid võimalusi
Aga ennem kui postitad tableite struktuure või datat, ole kindel et sa võid seda teha!
|
|
Kommentaarid: 8 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
kiiver
HV vaatleja
liitunud: 03.04.2003
|
05.10.2010 13:13:05
|
|
|
Le Inc kirjutas: |
Tegin tabeli kaheks, jätsin uude tabelisse 1 kuu andmed (otseselt pole juurdepääsu kasutajal vaja, käiks tegelt ka paaripäevane ajalugu), nüüd käib sama päring 11 sekki. Seda on ikkagi palju.
Suurt listi vaatame sisevõrgust, seda kasutaja nii või naa ei näe, aga sisse logimisel kasutatakse sama tabelit kõige värskemate andmete näitamiseks. Sealt tuleb ka pikk laadimise aeg. Võimalik et saaks kuidagi kuupäevaga vms vahendiga Oracle "täistabelit" mitte pärima. |
Ilma andmestruktuuri ja päringuta on raske midagi soovitada aga eelneva kirjelduse järgi jääb küll mulje, et indekseid pole üldse kasutusel. 650k reaga tabeli poolitamine kuupäeva järgi ei näi kuidagi õigustatud kuna üks indeks kuupäeva peale ja päringus näiteks tingimus KUUPAEV > trunc(sysdate)-30 ja rownum <= 15 peaks andma esimesed 15 rida 30 päeva seast hetkeliselt (alla 10 ms).
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
 |
Le Inc
HV Guru

liitunud: 06.09.2002
|
05.10.2010 13:45:36
|
|
|
Nõus. Indekseid pole, nüüd tegin. Võtsin ID (unikaalne nr igas reas) indeksi aluseks. Ilmselt on mul jah sql päring optimeerimata. Proovin ümber kõpitseda .. asi sai tehtud kunagi ammu, kui veel sql suurt midagi ei jaganud.
Kahjuks vist veebilehe põhised ~3 sekised vist jäävad. Seal on väga palju mitme tabeli vahelist suhtlemist, aga ehk annab midagi teha.
|
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
54 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
05.10.2010 13:58:37
|
|
|
Le Inc kirjutas: |
Nõus. Indekseid pole, nüüd tegin. Võtsin ID (unikaalne nr igas reas) indeksi aluseks. Ilmselt on mul jah sql päring optimeerimata. Proovin ümber kõpitseda .. asi sai tehtud kunagi ammu, kui veel sql suurt midagi ei jaganud.
Kahjuks vist veebilehe põhised ~3 sekised vist jäävad. Seal on väga palju mitme tabeli vahelist suhtlemist, aga ehk annab midagi teha. |
Targemad nüüd parandavad mind kohe, aga minu primitiivne pea ütleb, et ID peale indeksi tegemine on hea, sest tõenäoliselt selle järgi päritakse asju tihti. Lisaks peaksid vaatama oma päringud üle ja tegema indeksid ka muudele veergudele, mida kasutad päringutes WHERE osas. Hetkel, kui sul on indeks ID peale, kuid pärid mingi kuupäeva järgi, siis on sellest indeksist selle päringu kiirendamiseks null kasu.
Eksperdid nüüd materdagu ja täpsustagu, kui ma midagi väga ämbrisse panin.
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
mirko28
Aeg maha 1p

liitunud: 31.12.2003
|
05.10.2010 14:10:30
|
|
|
tsitaat: |
Targemad... primitiivne pea...materdagu ..ämbrisse |
See materdamise ajastu on ammu läbi juba. Interneti suhtluskultuur on teismelise-east juba välja kasvanud selle mõne aastaga, mil internet laildasemalt kättesaadav on olnud. Keegi ei hakka siin materdama, pole vaja karta, ega ise seda teha.
Vaatan, et päris palju huvitavaid lisakommentaare on siia teemasse tulnud, rõõm näha, loen.
|
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
Le Inc
HV Guru

liitunud: 06.09.2002
|
05.10.2010 14:52:54
|
|
|
Indexitega ID luges 650k rida kokku 0,57 sekki, ilma index'iteta 2,1 sekki. Töötab.
|
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
54 |
|
tagasi üles |
|
 |
2korda2
HV kasutaja
liitunud: 19.07.2003
|
06.10.2010 12:44:29
|
|
|
Fukiku,
tabelis veerg ID peaks oma olemuselt olema PK ja seega automaatselt indekseeritud. Ilma PK-ta tabel on saadanast, nagu siin ühes teises teemas sai nenditud.
Aasta oli siis umbes 2002, kui huvi pärast sai testitud indekseerimata Sybase IQ baasi: 4M kirjega tabelist "group by" jms koledate tingimusega 100 rida tuli ~12 sekundiga (serveriks tavaline tolle aja lauaarvuti). Korralikult indekseeritult tavalised mootorid (Oracle, Sybase ASE) suutsid sama päringu läbi teha ca 5 sekundiga. Koos indeksitega oli IQ kordi kiirem aga need hinnad.... $15000 ainult ühe protsessoriga serveri litsentsi eest (kasutajad tulid veel juurde) oli vähestele tollal jõukohane. Kui tuli veel selgitada, et see ei ole mitte töökeskkonna vaid ainult andmelao jaoks, siis... Praeguseks peaks Eesti pinnal olema päris mitu IQ kasutajat (Elisa ja SEB tulevad nagu meelde).
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
06.10.2010 12:53:01
|
|
|
2korda2 kirjutas: |
Fukiku,
tabelis veerg ID peaks oma olemuselt olema PK ja seega automaatselt indekseeritud. Ilma PK-ta tabel on saadanast, nagu siin ühes teises teemas sai nenditud.
Aasta oli siis umbes 2002, kui huvi pärast sai testitud indekseerimata Sybase IQ baasi: 4M kirjega tabelist "group by" jms koledate tingimusega 100 rida tuli ~12 sekundiga (serveriks tavaline tolle aja lauaarvuti). Korralikult indekseeritult tavalised mootorid (Oracle, Sybase ASE) suutsid sama päringu läbi teha ca 5 sekundiga. Koos indeksitega oli IQ kordi kiirem aga need hinnad.... $15000 ainult ühe protsessoriga serveri litsentsi eest (kasutajad tulid veel juurde) oli vähestele tollal jõukohane. Kui tuli veel selgitada, et see ei ole mitte töökeskkonna vaid ainult andmelao jaoks, siis... Praeguseks peaks Eesti pinnal olema päris mitu IQ kasutajat (Elisa ja SEB tulevad nagu meelde). |
Seda ma mõistan, et PK on automaatselt indekseeritud ja ilma PK'ta tabel on saatanast. Kas mul aga selles osas oli õigus eelmises postituses, et indeksid peaksid olema tehtud ka neile veergudele, mille järgi tabelist andmeid päritakse? Indekseeritud PK ei aita meid ju, kui me mingi suvalise tekstilise veeru järgi reaalselt päringu teeme - ilma indeksita toimub ju vist sel juhul ikkagi full scan?
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
2korda2
HV kasutaja
liitunud: 19.07.2003
|
06.10.2010 13:15:22
|
|
|
Jah, said õigesti aru. Päringus peab üldiselt kasutama indekseeritud veergu(sid). Samas kui mul on näiteks isikute tabel ja ma tahan kõiki meessoost isikuid, siis veerg SUGU, mis omab väärtusi M,N ei ole hea indekseerida - ei anna suurt midagi juurde. Üldiselt on mõtet indekseerida veergusid, kus on piisavalt palju erinevaid väärtusi ja ühtlasi selle veeru väärtusi kasutatakse päringute tegemisel. Kuupäev on tüüpiline näide.
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
Le Inc
HV Guru

liitunud: 06.09.2002
|
06.10.2010 15:44:41
|
|
|
Tundus et minu puhul oli kala tabelis endas. Nimelt 650k veeruga tabelist tegin lahjema 170k veeruga tabeli (enne kopeerimine, siis delete), aga lugemise kiirus langes paarkümmend %. Tegin uue tabeli vana põhjal ja kopeerisin info 1:1 üle. Nüüd loeb ~5..6x kiiremini. Ka veebileht on 3..4x kiirem.
Ilmselt oli oracle tabeli suurema hulga peale ära optimeerinud, seega ei tulnud ka 4x andmete vähendamine erilist kiiruse võitu. Muide hetkel ei oli ühtegi indeksit, töötab kenasti.
|
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
54 |
|
tagasi üles |
|
 |
serk
HV kasutaja
liitunud: 24.05.2003
|
06.10.2010 16:57:54
|
|
|
Indeks on efektiivne siis kui sa pärid vastavalt indeksile suhteliselt väikest osa tabeli andmetest - ei mäleta peast enam seda rule of thumb % määra.
Üldiselt oleks tark peale indeksi loomist vaadata päring uuesti explain planiga üle.
Sinu tabeli probleemi kohta:
Oracle soovitab uuesti statistika arvutada kui 10% andmetest muutub ja kui selle peale query pange paneb. Defauldis peaks Oracle iga 24h tagant seda anyway ise tegema - võin siin muidugi hetkel eksida, pean järgi vaatama manualist.
Mälu järgi oli käsk selleks: DBMS_STATS.gather_table_stats -viitsimist on siis, proovi.
See 10% on muidugi "pseudo" väärtus ja pole kuldne reegel, kõik sõltub paljudest muudest teguritest. Mõnikord võib isegi väiksem data change käivitusplaani jumala metsa keerata ja vastupidi... Muudad, testid, muudad, testid, muudad, testid .... ja toodangus võib ikka asi pekkis olla
|
|
Kommentaarid: 8 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
nemu
HV vaatleja

liitunud: 22.01.2002
|
06.10.2010 20:53:07
|
|
|
DBMS_STATS.gather_table_stats "deprecated", kuid lihtsamini meeles püsiv alternatiiv on:
ANALYZE TABLE <table_name> <COMPUTE | DELETE | ESTIMATE> STATISTICS; |
Väikeste tabelite jaoks siis compute (kogu andmete pealt), suurtele estimate.
* Statsita tabelite testimiseks võib kasutada DYNAMIC_SAMPLING hinti.
* Tabeli statistika saab lukku lükata kui andmete muutmine päringuplaanid sassi ajab.
* 11g versioonis peaks olema virtuaalsed indeksid, mida reaalselt valmis ei tehta, aga päringuplaani muutusi saab testida.
|
|
Kommentaarid: 12 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
11 |
|
tagasi üles |
|
 |
serk
HV kasutaja
liitunud: 24.05.2003
|
06.10.2010 22:28:25
|
|
|
nemu kirjutas: |
DBMS_STATS.gather_table_stats "deprecated", kuid lihtsamini meeles püsiv alternatiiv on:
ANALYZE TABLE <table_name> <COMPUTE | DELETE | ESTIMATE> STATISTICS; |
|
Ei saa küll nõustuda sinu poolse vastusega - hardly keegi enam analyze'i tänapäeval kasutab, võibolla kiireteks testideks ainult - analyze käib kiiremini. CBO jaoks on dbms_stats alati olnud parem valik, sellekohta ka palju detailset infot väljas miks see just nii on.
11.1:
Compute Statistics
Deprecated: Use DBMS_STATS
Note: Do not use the COMPUTE and ESTIMATE clauses of ANALYZE to collect optimizer statistics. These clauses are supported for backward compatibility. Instead, use the DBMS_STATS package, which lets you collect statistics in parallel, collect global statistics for partitioned objects, and fine tune your statistics collection in other ways. The cost-based optimizer, which depends upon statistics, will eventually use only statistics that have been collected by DBMS_STATS.
viimati muutis serk 06.10.2010 22:44:01, muudetud 2 korda |
|
Kommentaarid: 8 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
nemu
HV vaatleja

liitunud: 22.01.2002
|
06.10.2010 22:41:13
|
|
|
Kogu eelmine postitus viitab ju kiirele testile kui segaseks jäi.
|
|
Kommentaarid: 12 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
11 |
|
tagasi üles |
|
 |
morgoth
HV kasutaja

liitunud: 14.01.2004
|
08.10.2010 17:46:00
|
|
|
2korda2 kirjutas: |
Fukiku,
tabelis veerg ID peaks oma olemuselt olema PK ja seega automaatselt indekseeritud. Ilma PK-ta tabel on saadanast, nagu siin ühes teises teemas sai nenditud.
Aasta oli siis umbes 2002, kui huvi pärast sai testitud indekseerimata Sybase IQ baasi: 4M kirjega tabelist "group by" jms koledate tingimusega 100 rida tuli ~12 sekundiga (serveriks tavaline tolle aja lauaarvuti). Korralikult indekseeritult tavalised mootorid (Oracle, Sybase ASE) suutsid sama päringu läbi teha ca 5 sekundiga. Koos indeksitega oli IQ kordi kiirem aga need hinnad.... $15000 ainult ühe protsessoriga serveri litsentsi eest (kasutajad tulid veel juurde) oli vähestele tollal jõukohane. Kui tuli veel selgitada, et see ei ole mitte töökeskkonna vaid ainult andmelao jaoks, siis... Praeguseks peaks Eesti pinnal olema päris mitu IQ kasutajat (Elisa ja SEB tulevad nagu meelde). |
Tabelil ei pea ju ilmtingimata mingit autoincrement PK välja olema... Näiteks, kui tegemist on miski seoste tabeliga.
|
|
Kommentaarid: 11 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
10 |
|
tagasi üles |
|
 |
|