- Oracle je evoluirao od jednostavnih LRU-ova do pametnijih algoritama keširanja i kolonskih formata u memoriji kako bi ubrzao skeniranje, spajanje i agregaciju.
- Potpuno keširanje baze podataka mijenja način na koji se tretiraju male, srednje i velike tabele, te najbolje funkcionira samo kada cijela logička baza podataka stane u memoriju.
- Široke tabele zahtijevaju pažljivo dizajniranje, indeksiranje, particioniranje i strategije kompresije, posebno za analitiku, AI opterećenja i operacije.
- Kada su privilegije ograničene, brisanja velikih razmjera na masivnim tablicama moraju se izvršavati u upravljivim serijama kako bi se izbjeglo iscrpljivanje poništavanja.

Rad sa širokim tabelama koje su u potpunosti keširane u Oracle memoriji može se osjećati kao vožnja bolida Formule 1: nevjerovatno brz kada je sve podešeno, bolno neumoljiv kada nešto nije u redu. Kako se baze podataka razvijaju prema shemama sa stotinama ili čak hiljadama kolona, naš pristup modeliranju, keširanju i upitima podataka mora se promijeniti. Oracle nudi moćne funkcije keširanja u memoriji i međuspremnika, ali one zablistaju samo ako razumijemo kako tretiraju male, srednje i velike tabele i kako to interaguje sa dizajnom širokih tabela.
Ovaj vodič objašnjava kako Oracle rukuje formatima u memoriji, potpunim keširanjem baze podataka i praktičnim implikacijama vrlo širokih tabela za analitiku, OLTP opterećenja i operacije. Usput ćete vidjeti kako su se algoritmi keširanja razvili izvan jednostavnog LRU-a, zašto Oracle drugačije tretira velike tabele, kada potpuno keširanje baze podataka ima smisla i kako sve ovo utiče na strategiju indeksiranja, particioniranje, opterećenja umjetne inteligencije/analitike, pa čak i brisanja velikih razmjera pod strogim sigurnosnim ograničenjima.
Kolumnarni format u memoriji i SIMD skeniranje u Oracle-u
Oracle Database In-Memory uvodi kolonski prikaz dizajniran posebno za izuzetno brzo skeniranje, spajanje i agregaciju u memoriji. Umjesto čitanja punih redova iz blokova orijentisanih na disku, Oracle može pohraniti odabrane objekte u skladište kolona u memoriji gdje je svaka kolona komprimirana i optimizirana za analitičke upite koji se dotiču mnogo redova, ali relativno malo kolona.
Osim toga, Oracle koristi SIMD (jedna instrukcija, više podataka) vektorsku obradu na nivou CPU-a kako bi obradio milijarde redova u sekundi po jezgru za odgovarajuća radna opterećenja. Kada su upiti uglavnom samo za čitanje i uključuju filtere raspona, agregacije i analitičke funkcije, baza podataka može paralelno procijeniti više vrijednosti unutar jedne CPU instrukcije, dramatično povećavajući propusnost u poređenju s konvencionalnim izvršavanjem red po red.
Za široke tabele ovo je veoma važno, jer tradicionalni format zasnovan na redovima omogućava da svako čitanje obuhvata sve kolone u bloku, čak i kada upit dotakne samo nekoliko njih. Kada su određene široke tabele ili particije omogućene za skladištenje kolona u memoriji, Oracle može u potpunosti preskočiti nebitne kolone, smanjujući korištenje propusnog opsega memorije i opterećenje CPU-a, što je ključno za analitiku i nadzorne ploče u realnom vremenu.
U praksi, to znači da se analitika koja je ranije trajala satima često može svesti na sekunde, omogućavajući donošenje odluka o operativnim podacima gotovo u realnom vremenu. Izvještaji o masovnim tabelama činjenica, ad-hoc istraživanja telemetrije i upiti poslovne inteligencije imaju koristi od kombinacije kompresije, kolonskog pristupa i vektorske obrade kada su ispravno konfigurisani.

Od osnovnog LRU-a do pametnijih algoritama za keširanje međuspremnika
Prije nego što se upustimo u potpuno keširanje baze podataka, korisno je razumjeti kako je Oracle historijski odlučivao koji blokovi ostaju u kešu bafera, a koji se izbacuju. U ranim izdanjima, Oracle se oslanjao na jednostavnu LRU (Last Recently Used - Poslednje korištene) listu: kada bi se keš memorija bafera napunila, najmanje korišteni blokovi na kraju liste bi se odbacivali kako bi se napravilo mjesta za nove.
Problem s naivnim LRU pristupom je sukobljavanje i nepravednost pod miješanim OLTP opterećenjima. Svaki put kada bi se blok dotaknuo, morao je biti premješten na "vrući" kraj liste. Pod jakim istovremenim pristupom, mnoge sesije koje su se takmičile za promociju blokova pretvorile su tu regiju liste u vruću tačku. Osim toga, potpuno skeniranje velike tabele moglo bi pogurati ogroman talas blokova na vrh liste, brzo izbacujući zaista vruće blokove iz često pristupanih manjih tabela.
Da bi se riješio ovaj problem, Oracle je razvio algoritam za keširanje međuspremnika dodavanjem brojača korištenja i vremenske oznake svakom bloku, umjesto da slijepo premješta svaki dodirnuti blok na sam vrh. Svaki put kada se pristupi bloku, njegov brojač se povećava i ažurira se vrijeme posljednjeg korištenja. Visok brojač sugerira da je blok popularan, ali nedavnost vremenske oznake je i dalje bitna; blok koji je intenzivno korišten prije sat vremena, ali ne od tada, možda nije toliko vrijedan kao nešto što je konstantno pogođeno u posljednjih nekoliko sekundi.
Odluka o deložaciji se stoga zasniva na kombinaciji učestalosti i nedavnog korištenja bloka. Oracle balansira ove dvije dimenzije tako da blokovi koji se intenzivno čitaju u vrlo kratkom periodu ne dominiraju uvijek nad blokovima koji imaju umjereniji, ali održiviji obrazac pristupa. Ova hibridna strategija ublažava patološke slučajeve nastale velikim skeniranjima i smanjuje sukob oko "vrućeg" kraja keša.
Kako Oracle tretira male, srednje i velike tabele u keš memoriji bafera
Budući da memorija nije beskonačna, Oracle primjenjuje različite strategije keširanja ovisno o relativnoj veličini tabele u odnosu na ukupnu keš memoriju bafera. Ovo je ključno kada imate posla sa širokim tabelama ili sa veoma velikim tabelama činjenica koje lako mogu preopteretiti vašu dostupnu memoriju.
Za male tabele, Oracle je veoma prilagođen keširanju. Kada je ukupna veličina tabele manja od otprilike 2% keš memorije bafera, Oracle će obično keširati sve svoje blokove nakon što se pročitaju, čuvajući cijelu tabelu u memoriji. Male tabele za pretraživanje i referentni podaci često spadaju u ovu kategoriju, što je idealno jer im se često pristupa i imaju velike koristi od potpunog keširanja.
Tabele srednje veličine spadaju u nijansiraniju kategoriju, često negdje između 2% i oko 10% keš memorije bafera, iako tačni pragovi mogu varirati. Za ove slučajeve, Oracle uzima u obzir nekoliko signala prije nego što odluči hoće li agresivno keširati blokove: kada je tabela posljednji put u potpunosti skenirana, koliko nedavno su korišteni blokovi koji su već u kešu, koliko slobodnog prostora postoji u kešu bafera i veličinu tabele. Drugim riječima, srednje tabele se obrađuju na osnovu odnosa cijene i koristi na osnovu veličine objekta i obrazaca pristupa.
Velike tabele, posebno one čija veličina daleko prelazi 10% keš memorije bafera, se podrazumevano tretiraju vrlo konzervativno. Oracle će uglavnom izbjegavati popunjavanje keš memorije međuspremnika svim svojim blokovima nakon potpunog skeniranja, jer bi to moglo izbrisati zaista vruće podatke iz manjih, često pristupanih tabela. Možda ćete vidjeti neke metapodatke ili nekoliko blokova podataka u kešu, ali velike tabele nisu u potpunosti keširane osim ako eksplicitno ne naložite Oracleu korištenjem mehanizama poput KEEP buffer poola ili drugih direktiva.
Ova strategija je posebno važna pri radu sa širokim tabelama činjenica koje mogu zauzimati gigabajte ili terabajte. Jedno sedmično ili mjesečno skeniranje takve tabele ne bi trebalo izbaciti sav OLTP radni skup iz memorije. Umjesto toga, Oracle daje prioritet objektima koji pružaju najveću korist za većinu upita.
Potpuno keširanje baze podataka: kada sve stane u memoriju
Potpuno keširanje baze podataka, uvedeno u Oracle Database 12.1.0.2, dizajnirano je za okruženja u kojima je keš memorija bafera dovoljno velika da sadrži logičku veličinu cijele baze podataka. U ovom scenariju, primjena složenih pravila deložacije za velike naspram malih stolova više nema smisla; ako sve odgovara, cilj je da se to tamo i zadrži.
Kada je omogućeno potpuno keširanje baze podataka, Oracle pretpostavlja da svi blokovi čitanja iz korisničkih podataka mogu i trebaju ostati u memoriji. Klasične razlike između malih, srednjih i velikih objekata se uglavnom zanemaruju u pogledu keširanja; svaka tabela koju pročitate, bez obzira na njenu širinu ili veličinu, imat će svoje blokove pohranjene u keš memoriji bafera dok im se pristupa, do fizičkih ograničenja memorije.
Važno je napomenuti da omogućavanje potpunog keširanja baze podataka ne učitava odmah sve blokove svih objekata u memoriju. Umjesto toga, ponaša se oportunistički: dok aplikacije upituju tabele i segmente, pristupljeni blokovi se keširaju, a zatim zadržavaju umjesto da se zamjenjuju na osnovu starijih heuristika. Vremenom, kako radna opterećenja dodiruju sve više baze podataka, keš bafera konvergira u stanje u kojem je cijeli skup podataka rezidentan u memoriji.
U okruženjima s više zakupaca, ako omogućite potpuno keširanje baze podataka na nivou CDB-a, ponašanje se proteže na sve PDB-ove u toj kontejnerskoj bazi podataka. To znači da svaka priključna baza podataka unutar tog kontejnera može imati koristi od ove funkcije i ne možete je selektivno omogućiti ili onemogućiti po instanci unutar RAC konfiguracije; to je svojstvo baze podataka po principu "sve ili ništa".
Još jedan suptilan, ali važan efekat je da čak i segmenti označeni kao NOCACHE, uključujući LOB segmente, na kraju budu keširani kada se prisili potpuno keširanje baze podataka. Baza podataka efektivno poništava uobičajene savjete za keširanje na nivou objekta jer je globalna pretpostavka da je memorije dovoljno za sve.
Pravila dimenzioniranja i provjere za potpuno keširanje baze podataka
Prije nego što uključite potpuno keširanje baze podataka, morate potvrditi da je vaša keš memorija međuspremnika zaista dovoljno velika za opterećenje baze podataka. Oracle pravi razliku između baza podataka s jednom instancom i klastera stvarnih aplikacija (RAC) prilikom provjere izvodljivosti.
Za bazu podataka koja nije RAC, logička veličina baze podataka treba biti manja od ukupne veličine keš memorije međuspremnika. Logička veličina se ovdje odnosi na podatke koje realno treba keširati za vaše radno opterećenje, ne nužno svaki posljednji bajt rijetko korištenih arhivskih informacija. Ipak, u praksi vam je potrebna ugodna margina kako rast i skokovi aktivnosti ne bi iznenada poremetili pretpostavku da „sve odgovara“.
U RAC okruženjima, pravilo je strože i mora se primjenjivati i na nivou instance i na nivou klastera. Veličina logičke baze podataka mora biti manja od veličine keš memorije bafera svake pojedinačne instance, a također i manja od približno 80% zbira keš memorije bafera svih instanci u klasteru. Ovo dvostruko ograničenje osigurava da nijedna pojedinačna instanca ne postane usko grlo, dok klaster u cjelini i dalje ima koristi od ove funkcije.
Trenutnu veličinu keš memorije bafera možete brzo provjeriti upitom prema prikazu V$SGAINFO. Često korišteni upit dijeli veličinu u bajtovima s potencijama broja 1024 kako bi se rezultat prikazao u gigabajtima, što olakšava poređenje s veličinom baze podataka i prognozama rasta. Slični upiti u odnosu na prikaze rječnika podataka omogućavaju vam da procijenite logičku veličinu vaših korisničkih podataka.
Da biste provjerili da li je trenutno aktivno potpuno keširanje baze podataka, možete upitati V$DATABASE i pregledati kolonu FORCE_FULL_DB_CACHING. Vrijednost DA označava da je baza podataka pokrenuta s omogućenom funkcijom, dok NE znači da keš radi pod uobičajenom heuristikom za male, srednje i velike tabele.
Ponašanje bez potpunog keširanja baze podataka: velika skeniranja i obrasci deložiranja
Razmotrite scenario sa tri tabele u istoj shemi: dvije veoma velike tabele i jedna mala. Svaka velika tabela troši oko 1.1 TB, dok mala tabela zauzima samo oko 1 MB. Sama keš memorija bafera zauzima samo nekoliko gigabajta, tako da je svaka velika tabela očigledno znatno iznad 10% keš memorije, dok je mala tabela znatno ispod praga od 2%.
Nakon ponovnog pokretanja ili pražnjenja SGA, obično ne biste vidjeli keširane blokove ni za jednu od ovih tabela prilikom upita zaglavlja blokova iz prikaza poput V$BH spojenog sa DBA_OBJECTS. Nakon što izvršite potpuno skeniranje prve velike tabele, očekivanje kod zadanog algoritma je da će baza podataka izbjeći popunjavanje keša svojim blokovima.
Zaista, nakon tog skeniranja, možete primijetiti da je keširano samo nekoliko blokova za veliku tabelu, često samo nekoliko blokova povezanih s metapodacima. Uprkos obradi miliona ili milijardi redova, Oracle odlučuje da ne zadrži te blokove podataka jer se tabela prepoznaje kao „velika“ u odnosu na keš memoriju, a njihovo čuvanje bi bilo štetno za češće korištene segmente.
Ako zatim skenirate drugu veliku tabelu, pojavljuje se sličan obrazac: samo mali broj njenih blokova ostaje keširan. Baza podataka nastavlja primjenjivati svoja pravila za rukovanje velikim tabelama, sprječavajući da bilo koja velika tabela dominira keš memorijom. Ovo štiti radni skup manjih tabela koje su vjerovatno mnogo kritičnije za svakodnevne OLTP performanse.
Međutim, kada konačno skenirate malu tabelu od 1 MB, ponašanje se dramatično mijenja. Budući da je veličina tabele ispod praga od 2% keš memorije međuspremnika, Oracle rado kešira sve svoje blokove, što svaki budući pristup toj tabeli čini čistim udarom na memoriju. Sa stanovišta performansi, ovo je idealno za male tabele pretraživanja i konfiguracijske podatke koji se dijele između mnogih transakcija.
Ponašanje sa omogućenim potpunim keširanjem baze podataka
Sada zamislite omogućavanje potpunog keširanja baze podataka u istom okruženju montiranjem baze podataka i izdavanjem naredbe FORCE FULL DATABASE CACHING. Nakon otvaranja baze podataka, možete ponovo potvrditi putem V$DATABASE da je funkcija aktivna prije ponavljanja istog niza skeniranja.
Na početku, odmah nakon ponovnog pokretanja, još uvijek nema keširanih blokova za tri tabele, baš kao i prije. Međutim, kada pokrenete potpuno skeniranje prve velike tabele, sada ćete vidjeti gotovo sve njene blokove koji se nalaze u keš memoriji bafera. Umjesto samo prisutnosti tokena, praktično svih 1.1 TB podataka koji su pročitani bit će pohranjeni u memoriji.
Skeniranje druge velike tabele dodaje još 1.1 TB blokova u keš bafera, bez brisanja prethodno keširanih blokova iz prve tabele. Pod potpunim keširanjem baze podataka, sistem efektivno "gomila" svaki blok koji se pročita, radeći pod pretpostavkom da je memorija dimenzionirana za ovo ponašanje i da deložacija ne bi trebala biti potrebna.
Kada konačno skenirate malu tabelu, svi njeni blokovi su također keširani i ponovo, nijedan blok velikih tabela nije odbačen. Vremenom, kako upiti dodiruju više objekata, baza podataka gradi memorijsku sliku cijelog aktivnog skupa podataka. Za opterećenja s velikim brojem čitanja ili mješovita opterećenja gdje memorija zaista premašuje logičku veličinu podataka, ovo može pružiti odlične performanse i vrlo predvidljivo ponašanje keša.
Šta se dešava kada je omogućeno potpuno keširanje baze podataka, ali nema dovoljno memorije
Zanimljiv granični slučaj nastaje kada je potpuno keširanje baze podataka prisilno uključeno, ali je keš međuspremnika zapravo premalen da bi sadržavao cijeli radni skup podataka. Nećete odmah dobiti ORA-600 ili očiglednu grešku; baza podataka i dalje pokušava da poštuje tu funkciju dok se nosi sa ograničenjem memorije.
Pretpostavimo da smanjite keš bafera tako da realno može u potpunosti da sadrži samo jednu od velikih tabela. Nakon omogućavanja potpunog keširanja baze podataka i brisanja postojećih blokova, potpuno skeniranje prve velike tabele će ponovo popuniti keš memoriju sa gotovo svim njenim blokovima. U tom trenutku, memorija je u suštini zasićena tim jednim objektom.
Kada zatim skenirate drugu veliku tabelu, Oracle se i dalje ponaša kao da želi sve keširati, ali sada mora izbaciti blokove iz prve tabele kako bi napravio mjesta. Rezultat je da druga tabela na kraju bude potpuno keširana, dok je prva tabela samo djelimično rezidentna; značajan dio njenih blokova će biti poništen iz keša.
Ako ponovo skenirate prvu tabelu, proces se odvija obrnutim redoslijedom: prva tabela postaje potpuno keširana, a druga tabela gubi dio svojih blokova. Završit ćete u scenariju prenatrpanosti gdje veliki objekti izbacuju jedan drugog iz memorije pri svakom potpunom skeniranju. Ulazno/izlazni podaci s diska naglo rastu i gubite većinu prednosti koje je potpuno keširanje baze podataka trebalo pružiti.
Zbog toga, korištenje potpunog keširanja baze podataka na bazi podataka čija je logička veličina podataka veća od vaše efektivne memorije obično je loša ideja. U takvim slučajevima, obično je bolje da Oracle primijeni svoje provjerene algoritme za upravljanje baferom, koji štite male i često korištene segmente od uništavanja rijetkim velikim skeniranjima.
Čisto onemogućavanje potpunog keširanja baze podataka
Ako odlučite da potpuno keširanje baze podataka nije prikladno za vaše okruženje, njegovo onemogućavanje je jednostavno, ali zahtijeva kontrolirano ponovno pokretanje. Morate isključiti bazu podataka, montirati je i izdati naredbu za zaustavljanje prisilnog potpunog keširanja baze podataka prije nego što je ponovo otvorite.
Nakon što se baza podataka ponovo otvori, brza provjera V$DATABASE će pokazati da je FORCE_FULL_DB_CACHING vraćen na NO. Od tog trenutka nadalje, keš bafera se vraća na svoje zadano ponašanje, gdje se favoriziraju male tabele, srednje tabele se razmatraju od slučaja do slučaja, a velike tabele se uglavnom drže izvan keša osim ako nisu eksplicitno zakačene putem funkcija poput KEEP poola.
Široke tablice: razmatranja dizajna, modeliranja i performansi
Trend ka vrlo širokim tabelama – sa stotinama ili hiljadama kolona – mijenja način na koji dizajniramo sheme i kako se koriste funkcije poput skladištenja kolona u memoriji i keširanja. Ove tabele mogu pojednostaviti određene obrasce koji zahtijevaju mnogo čitanja i olakšati život timovima za izvještavanje, ali dolaze sa ozbiljnim kompromisima u pogledu fleksibilnosti, održavanja i ponašanja ulazno-izlaznih operacija.
Denormalizirane široke tabele mogu biti odlične kada dajete prioritet brzom čitanju i želite izbjeći komplicirana spajanja, posebno za analitiku, telemetriju ili skladišta AI funkcija. Pakovanje mnogih atributa u jedan red može smanjiti dubinu spajanja i učiniti upite jednostavnijim, što je privlačno za BI alate, stručnjake za podatke i batch procese koji žele samo jedan veliki zapis po entitetu ili događaju.
Međutim, ne zaslužuje svaki konceptualni entitet da bude pretvoren u monolitnu široku tabelu. Prekomjerna denormalizacija može dovesti do rijetko popunjenih kolona, prekomjernog NULL prostora za pohranu i složenog DML-a, posebno ako mnoge aplikacije ažuriraju različite dijelove istog mega-reda. Također može sakriti greške u modeliranju gdje se različiti životni ciklusi ili kardinalnosti prisiljavaju u jednu strukturu.
Balansiranje praktičnosti širokih tabela sa dobrim dizajnom obično uključuje kombinaciju kontrolirane denormalizacije, vertikalnog particioniranja i alternativnog skladištenja za polustrukturirane atribute. Na primjer, neki skupovi opcionalnih atributa mogu se premjestiti u JSON kolone, odvojene podtabele ili strukture optimizirane za kolone, prvenstveno iskorištene za analitička opterećenja, dok osnovni transakcijski atributi ostaju u vitkijoj, OLTP-prilagođenijoj shemi.
Indeksiranje širokih tabela predstavlja još jedan izazov: pokušaj indeksiranja desetina ili stotina kolona nije održiv. Idealno je indeksirati samo predikate koji se često pojavljuju u WHERE klauzulama ili JOIN uslovima, a za složenije analitičke pristupne putanje oslanjati se na kolonske funkcije u memoriji, orezivanje particija i materijalizovane prikaze.
Particioniranje, materijalizirani prikazi i kompresija za velike široke tablice
Za široke tabele koje sadrže milijarde redova, particioniranje je gotovo obavezno kako bi se performanse i održavanje održali pod kontrolom. Rasponske, listne ili kompozitne particije vam omogućavaju da ciljate podskupove podataka za upite, prikupljanje statistike i operacije održavanja, smanjujući i I/O operacije i sukobljavanje interesa.
Podparticioniranje može dodatno precizirati način na koji se podaci raspoređuju po pohrani i keš memoriji međuspremnika. Na primjer, kombinacija raspona i heša može ravnomjernije distribuirati vruće podskupove, dok se postavke raspona liste mogu blisko uskladiti s poslovnom semantikom (kao što je regija plus datum). Kada koristite pohrane kolona u memoriji, možete odlučiti na nivou particije ili podparticije koji dijelovi ispunjavaju uvjete za optimizaciju u memoriji.
Materijalizirani prikazi su još jedan moćan način da se široke tabele učine upravljivim za analitiku. Umjesto da svaki put pristupate ogromnoj osnovnoj tabeli, možete unaprijed izračunati agregirane ili projekcije specifične za domenu koje su daleko uže i lakše se keširaju. Ove MV-ove je moguće osvježavati periodično ili na zahtjev, podržavajući BI upite i kontrolne ploče uz mnogo manju upotrebu resursa.
Kompresija također igra ključnu ulogu, kako na disku tako i u memoriji, posebno kada mnoge kolone imaju ponavljajuće ili rijetke vrijednosti. Oracle-ovi napredni algoritmi za kompresiju i kompresiju u memoriji mogu značajno smanjiti zauzeti prostor u memoriji i ubrzati skeniranje smanjenjem količine podataka koje je potrebno pročitati. Kompromis je dodatno opterećenje CPU-a, ali s modernim procesorima i vektoriziranim instrukcijama, ovo može biti neto dobitak za mnoga analitička opterećenja.
Operativne i AI/analitičke implikacije vrlo širokih tabela
Pored samih performansi, široke tabele imaju operativne posljedice koje utiču na prozore za pravljenje sigurnosnih kopija, replikaciju i održavanje. Veliki broj redova povećava troškove masovnih kopija, logičkog izvoza i procesa replikacije nizvodno. Svaka promjena u strukturi, poput dodavanja ili uklanjanja kolona, zahtijeva dublju analizu kako bi se izbjegli neočekivani efekti na alate i cjevovode.
Praćenje i mogućnost posmatranja postaju ključni kada široke tabele predstavljaju srž vaše arhitekture. Potrebno je pratiti ne samo korištenje CPU-a i memorije, već i omjere pogodaka u keš memoriju međuspremnika, poništavanje pritiska u tabličnom prostoru i ponašanje pohrana u memoriji pod realnim opterećenjima. Testiranje opterećenja prije objavljivanja je ključno za otkrivanje vrućih tačaka i mogućnosti podešavanja particioniranja, keširanja i indeksiranja.
Iz perspektive umjetne inteligencije i napredne analitike, široke tabele se često koriste kao skladišta karakteristika ili analitički prikazi koji hrane modele mašinskog učenja i inteligentne agente. Prisustvo mnogih atributa na jednom mjestu pojednostavljuje ekstrakciju vektora karakteristika i smanjuje složenost predobrade, posebno kada se kombinuje sa kolonskim skladištenjem i SIMD-ubrzanim skeniranjem.
Istovremeno, slučajevi upotrebe s velikim udjelom umjetne inteligencije donose dodatne zabrinutosti u vezi s upravljanjem podacima, sigurnošću i usklađenošću. Kada agregirate mnogo osjetljivih atributa u jednu široku strukturu, povećavate radijus eksplozije bilo kakve pogrešne konfiguracije pristupa. Pravilna kontrola pristupa zasnovana na ulogama, maskiranje podataka i revizija postaju neizostavne, posebno u reguliranim industrijama.
Specijalizovane konsultantske kuće i interni timovi za arhitekturu mogu dodati značajnu vrijednost pomažući organizacijama da odluče kada su široke tabele zaista pravi izbor, a kada se alternativni obrasci bolje skaliraju. To uključuje savjetovanje o implementaciji više oblaka u AWS-u i Azureu, integraciju s BI platformama poput Power BI-a i dizajniranje sigurnih, efikasnih podatkovnih kanala koji povezuju operativne baze podataka s analitikom i AI uslugama.
Velika brisanja pod strogim dozvolama: grupne strategije
Jedan često zanemaren aspekt rada s gigantskim tablicama – širokim ili ne – je kako sigurno izbrisati velike dijelove podataka kada ste ograničeni ograničenim privilegijama. U mnogim preduzećima, administratori baza podataka ne mogu slobodno pokretati DDL, kreirati nove particije ili restrukturirati objekte u produkciji; oni mogu izvršavati samo DML operacije kao što su DELETE i, u nekim slučajevima, TRUNCATE.
Izdavanje jedne ogromne DELETE naredbe koja eliminiše trećinu tabele sa više milijardi redova je recept za poništavanje iscrpljivanja tabelarnog prostora i dugotrajne transakcije. Takve operacije mogu satima držati zaključane redove, povećati korištenje UNDO i TEMP komandi i učiniti vrijeme oporavka neprihvatljivim ako nešto krene po zlu na pola puta.
Uobičajena strategija ublažavanja je brisanje u kontroliranim serijama korištenjem PL/SQL-a sa BULK COLLECT i FORALL. Uzor je otvoriti kursor odabirom ROWID-ova koji zadovoljavaju predikat brisanja, dohvatiti ih u dijelovima fiksne veličine (na primjer, 100,000 redova odjednom), izbrisati te redove odjednom, potvrditi (commit), a zatim ponavljati dok se kursor ne iscrpi. Svaka iteracija troši upravljivu količinu poništavanja i održava prozor transakcije malim.
Ovaj inkrementalni pristup smanjuje opterećenje tabelarnog prostora za poništavanje i pruža predvidljiviji napredak, po cijenu višestrukih potvrda (commit-ova). U scenarijima gdje se ne možete osloniti na particioniranje ili online redefiniranje tabele, to je često najpragmatičnija opcija. Veličinu LIMIT-a možete podesiti na osnovu uočene upotrebe poništavanja, I/O mogućnosti i prihvatljivog trajanja transakcije.
Idealno bi bilo da imate opsežnije privilegije i preferirate strategije zasnovane na particijama, kao što je brisanje ili skraćivanje particija kako biste gotovo trenutno izbrisali historijske podatke. Druge opcije mogu uključivati kreiranje nove tabele samo sa redovima koje želite zadržati i zamjenu tih redova. Ali kada se DDL ukloni iz tabele, pažljivo kodirana grupna brisanja ostaju glavni alat u vašem kompletu.
Spajanje svih ovih niti – inteligentnih algoritama za keširanje, potpunog keširanja baze podataka, kolonskih formata u memoriji, dizajna širokih tabela, particioniranja, kompresije i operativnih praksi za održavanje velikih količina – daje vam koherentan mentalni model kako Oracle može podržati izuzetno zahtjevna radna opterećenja. Kada se veličina memorije uskladi s volumenom baze podataka, a dizajn sheme poštuje i OLTP i analitičke potrebe, možete pružiti analitiku za manje od sekunde, stabilne transakcijske performanse i pouzdane AI podatkovne kanale na vrhu vrlo širokih tabela pohranjenih u cijelosti ili uglavnom u memoriji.