SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen
SAS Technical Clubin kokoontuminen 17.9.2009
Virpi Virtanen
Tieto-Tapiola Oy
Sisältö
Kokemuksia
Koodin toiminta
Resurssimittareita
CPU käytön vähentäminen
I/O
Levytila
Muistin käytön optimointia
Verkkoliikenteen vähentäminen
Kokemuksia?
Mikä on omassa kokemuspiirissäsi kriittisin tekijä?
• Suoritukseen kulunut aika? (seinäkello)
• CPU?
• Muistin määrä?
• Levytilan määrä?
• I/O operaatioiden määrä?
• SAS taidot?
Tehokkuuden vaihtokaupat
Datamäärän pienentäminen esimerkiksi compressoimalla yleensä lisää CPU:n käyttöä.
I/O:n vähentäminen kasvattaa muistin käyttöä.
Tehokas ohjelma on hidas kirjoittaa ja se pitää testata paremmin, kuin MUTU-tehokas ohjelma.
Koodin oikeellisuus ja toiminta
SQL-optio noexec määrittää, että koodi käännetään, muttei suoriteta
Validate-select-lauseen kanssa SQL:ssä.
Kun määritellään options obs=1 käsitellään vain yksi rivi dataa.
Options obs=max palauttaa alkutilanteen.
Data-vaiheen käyttäminen
Koodi käännetään ja suoritetaan. Testaus voidaan tehdä obs=0 arvolla.
Debuggeri!
Bufferillinen aineistoa ladataan taulusta, where-ehtoa sovelletaan bufferiin.
PDV:ssä sovelletaan if-ehtoa.
PDV:ssä oleva havainto käy läpi jokaisen lauseen.
Kaaviokuva Data-vaiheesta
Nimi
Tyyppi
koko
PDV
Bufferi
Bufferi
Data uusi;
Set vanha;
A = B;
X = 3 * y;
Run;
Vaihtoehtoja SQL:lle data yhdistyksessä
Formaattien käyttäminen
Data-vaiheessa point-option käyttäminen (Muista STOP-lause)
Makromuuttujien käyttäminen
Hash-tablet
Array
SASTRACE
OPTION SASTRACE=’,,,d’|’,,t,’|’,,t,s’;
Näyttää mitä ACCESS enginen kautta suoritetaan tietokannassa hakuja.
’,,,d’ – kaikki SQL lauseet lokiin
’,,t,’ – kaikki säikeistystiedot lokiin
’,,t,s’ – säikeistystiedot ja ajankäytön tiedot lokiin.
db2dbug
Options db2dbug;
Saadaan listattua lokiin se, mitä ’oikeasti’ tapahtuu kun ollaan yhteydessä db2:een.
Options obs=1; on pienin arvo, jota voidaan käyttää db2dbug-option kanssa testitilanteessa koodin todellista luonnetta arvioitaessa.
Resurssimittareita
Resursseja kannattaa mitata käyttämällä lokiin kirjautuvia tietoja.
Options Fullstimer; antaa enemmän tietoja lokiin.
SAS lokin kertoma tieto ei aina kerro kaikkia tarvittavia resursseja.
Keinoja mitata resursseja
Numeerinen mittaus koodin tehokkuudelle vaatii hieman sorminäppäryyttä.
Hehtaarille osuvan arvion tehokkaasta tekniikasta voi tehdä helposti, mutta oikeaan osuvan ratkaisun löytämien ja ongelmakohtien syiden karsiminen voi olla työlästä.
Lähde liikkeelle MUTU periaatteesta!
Windows-maailma
Windowsin task manager kertoo, kuinka paljon resursseja tarvitaan ohjelman suorituksen aikana.
Resurssien tarpeen arviointi on summittaista.
Mainframe
Rsubmit
Portaali
Koodin ajaminen mainframen SASilla
Miten mitata PDF tiedoston luomiseen kuluva aika??! Seinäkellolla?
Miten optimoida pdf-tiedoston luontia
PDF tiedosto vaatii enemmän resursseja, kuin HTML-tiedostoon kirjoittaminen.
Asettelullinen ODS LAYOUT-tekniikka vaatii enemmän resursseja, kuin asettelematon tekniikka.
Muisti voi loppua kesken dokumentin kirjoituksen, varsinkin kun käytetään sisällysluetteloa.
Optioiden käyttöä kannattaa välttää!
Proc Sql
Proc Sql stimer;
Saadaan käyttöön resurssimittari jokaiselle proc sql:n lauseelle.
ARM
SAS versiosta 8.2 lähtien on ollut käytössä ARM makrot.
ARM=Application Performance Measurement
Erilliseen lokitiedostoon kerätään suoritusaikoja.
9.2 Code Analyzer?
9.2 SAS tuo mukanaan koodi analysjoijan, SCAPROC-proseduurin, joka tarjoaa lisätietoja
• Lukemisesta ja kirjoittamisesta
• Makromuuttujista
• Stepeistä
• Suoritusajasta
CPU
CPU:n käyttöä on helppo ohjelmassa optimoida.
Proseduurit on optimoitu CPU:n käytön suhteen.
CPU:ta kuluu PDV:n arvojen käsittelyyn:
• Numeeriset arvot puretaan aina 8 merkin mittaisiksi
• Kompressoidut tiedot puretaan auki
CPU
Hiperspace:n käyttö on mahdollista.
Hiperspace tarkoittaa High Performance Dataspacea.
Hiperspace on prosessorin sisäinen väliaikainen alue, ei kuitenkaan muistissa.
Hiperspace voi säästää runsaasti pienten tai keskikokoisten datojen käsittelyn vaatimia resursseja.
CPU
Suorita vain tarvittavat lauseet.
Data-vaiheessa kannattaa sijoittaa poissulkevat if-ehdot mahdollisimman aikaiseen vaiheeseen.
Ehtolauseita kannattaa käyttää:
• Tyypillisin havainto ensimmäiseen ehtoon
• Jos ehdossa funktio, käytetään sitä kerran
• If –then –else
• Select –when –otherwise –end
CPU
Vältä datan useaa läpikäyntiä:
• Tee kaikki mahdollinen yhden data-vaiheen aikana.
• Poista tuplat sort-proseduurissa.
• Proc SQL voi huomaamatta käydä datan läpi useampaan kertaan.
• Käytä data-vaihetta SQL:n sijaan (voi muuttua tulevaisuudessa).
• Hash table?!
Useampi CPU
Säikeistys on käytössä mainframella.
PC:llä säikeistys on käytettävissä, jos on useampia CPU:ita.
Säikeistyksen käytöstä näkyy tieto mm. siinä, että CPU aika on suurempi, kuin todellinen aika.
I/O:n vähentäminen
Käsittele vain tarvittavat muuttujat ja havainnot:
• Keep- ja Drop- optioita kannattaa käyttää lähdedatan määrittämisen yhteydessä.
• Käytä Where-ehtoa.
• Käytä indeksejä.
Indeksien käyttö
On mahdollista lisätä tehokkuutta käyttämällä indeksejä.
Indeksien käytön kustannuksena on indeksitaulujen vaatima tila levyltä ja indeksien ylläpidon vaatimat resurssit.
Proc SQL ja Datasets ovat käytössä indeksien ylläpidossa.
Indeksin käyttömahdollisuudet
Indeksejä käytetään silloin, kun niiden käyttö on tehokasta.
Where-ehdossa
• viitattaessa yksinkertaisen indeksin arvoon
• komposiitti-indekseissä viitattaessa ensimmäiseen avainarvoon
Suosituksia Indekseille
Vähän indeksejä
Ei alle 3 sivuisille datoille
Indeksitaulun ylläpitokustannukset pitää ottaa huomioon
Valitse where-ehtoon sopivia indeksejä
Indeksi ei saa olla liian yleinen
Indeksin plussat ja miinukset
HYÖDYT
• Nopea pääsy pieniin osajoukkoihin
• Arvot palautuvat järjestyksessä
• Voi pakottaa yksikäsitteisyyteen
• Yhdistyskriteeri
HAITAT
• Lisää CPU:n ja I/O:n tarvetta luotaessa ja ylläpidettäessä
• Kasvattaa CPU:ta dataa luettaessa
• Vie enemmän levytilaa
• Vie enemmän muistia indeksitauluille ja SAS C koodille käytön aikana
Muistin käytön optimointia
SAS lataa tiedon yksi sivu kerrallaan bufferiin.
Bufferista tieto ladataan PDV:hen muistiin.
Muistissa pitää olla tilaa ohjelmalle, sorttaamiselle ja makromuuttujille.
Suorituksen aikana tarvitaan tila PDV:lle eli muuttujille ja mahdollisille array-rakenteille.
Bufferin koon määrittäminen
Bufferin koko kannattaa määrittää aineiston kokoon suhteutettuna.
Liian suuri bufferin koko vie ylimääräisiä resursseja.
Liian pieni bufferi aiheuttaa sivutusta.
Normaalitilanteessa SAS haarukoi bufferin koon kohtuulliselle tasolle.
Useamman bufferin käyttö
Dataa käytettäessä on mahdollista määrittää useampi bufferi käyttöön.
Systeemioptioissa voidaan määritellä bufferien lukumäärä.
SASFILE-lause
Mikäli samaa dataa käytetään useamman proseduurin ja data-vaiheen aikana on järkevää pitää se muistissa buffereissa.
Datan voi avata tällöin SASFILE-lauseella ja pitää avoimena siihen asti, kunnes sen käsitteleminen on lopetettu.
Tekniikka säästää I/O operaatioita ja muistia.
SASFILE-lauselibname mydata 'SAS-data-library';
sasfile mydata.census.data open; data test1; set mydata.census; run; data test2; set mydata.census; run; proc summary data=mydata.census print; run; data mydata.census; modify mydata.census; . . (statements to modify data) . run;
sasfile mydata.census close;
Muokkaus lähellä lähdettä
Datan käsittely voi tapahtua puhtaasti Mainframella tai osin Mainframella ja osin PC:llä.
Tulokset voidaan tuottaa kokonaan tai osittain Mainframella.
Käsittely voi olla interaktiivista, eräajoa tai stored proc suoritusta.
Antaa DB2:n tehdä se työproc sql;
connect to db2 (ssid = testi);
create table vaksopim20 as
select * from connection to db2
(
select vsop, asno, apvm, asyy, ppvm,
paaerakk, mtapa, vstila
from kirjasto.sopim
where ppvm> '01.01.2006'
order by vsop
);
quit;
Sorttaus Mainframella
Mainframella käytetään alle 4M tiedostojen lajittelussa SAS:ia oletusarvoisesti.
Yli 4M tiedostojen lajittelemiseen käytetään Dfsort-ohjelmaa.
PC:llä käytetään SAS sorttausta.
Sorttaus ja vaihtoehdot
Aineiston järjestämisen vaihtoehtona on indeksien käyttäminen.
Aineisto voidaan joissain proseduureissa ottaa käyttöön myös järjestämättömänä.
By-käsittely voi korvata aineiston järjestämisen ryhmitellyn aineiston ollessa kyseessä.
Sorttaus resurssitAineiston järjestäminen vaatii resursseja sen mukaan
• Voidaanko työ säikeistää
• Havaintojen pituus
• By-muuttujien lukumäärä
• By-muuttujien pituudet
• Ympäristö
• Kirjasto, johon aineisto kirjoitetaan
Tilan tarpeen pienentäminen
Tilan tarvetta on mahdollista vähentää compressoimalla aineisto tai vähentämällä numeeristen muuttujien pituutta.
Compressointi on näistä kahdesta tekniikasta suositeltavampi.
Tiivistystekniikoita on kaksi, toinen optimoitu merkkimuotoiselle datalle ja toinen numeeriselle datalle.
Näkymät
Näkymän määritteleminen säästää tilantarvetta, mutta kasvattaa I/O:ta
Näkymä voidaan määritellä data-vaiheella tai luoda SQL:llä.
Näkymän avulla voidaan piilottaa monimutkaista ohjelmointilogiikkaa.
Näkymän luontikoodi voidaan kirjata ulos myös data-vaiheesta.
Muita tekniikoita
Arrayn, Hash-tablen ja makromuuttujien käytöllä voidaan korvata datan lukemista ja yhdistämistä
Point-optio data-vaiheessa antaa mahdollisuuden päästä suoraan kiinni haluttuun havaintoon
Formaattimääritykset voidaan muokata tauluissa ja vähentää koodaustarvetta
Tiivistelmä
Teesit naulattavaksi työhuoneen oveen
CPU:n käytön tehostaminen
Suorita vain tarvittavat lauseet
Vältä datan liian montaa läpikäyntiä
Lue ja kirjoita vain se data, jota tarvitset
Älä kompressoi SAS tauluja
I/O:n vähentäminen
Käsittele vai tarvittavat muuttujat ja havainnot
Vähennä datan läpikäyntiä
Säädä BUFNO= ja BUFSIZE= optiot
Tee datasta SAS taulu, jos käytät sitä useammin kuin kerran
Käytä indeksejä
Levytilan vähentäminen
Käytä vain tarvittavia muuttujia.
Lyhennä numeeristen muuttujien vaatimaa tilaa (ei ensisijainen menetelmä).
Kompressoi data.
Muistin käytön vähentäminen
Käytä KEEP= ja DROP= optioita.
Käytä pientä sivukokoa. Tämä vähentää myös I/O:ta, jos aineistoa käydään läpi satunnaisessa järjestyksessä.
Käytä pientä BUFNO= arvoa kun data käydään läpi satunnaisesti.
Tee aineistosta pieni kopio, jossa on mukana vain tarvittavat muuttujat ja havainnot.
Verkkoliikenne
Muokkaa data mahdollisimman lähellä sen alkuperäistä sijoituspaikkaa.
Siirrä osajoukkoa tai summattua dataa.