470 likes | 602 Views
SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen. SAS Technical Clubin kokoontuminen 17.9.2009 Virpi Virtanen Tieto-Tapiola Oy. Kokemuksia Koodin toiminta Resurssimittareita CPU käytön vähentäminen I/O. Levytila Muistin käytön optimointia
E N D
SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen SAS Technical Clubin kokoontuminen 17.9.2009 Virpi Virtanen Tieto-Tapiola Oy
Kokemuksia Koodin toiminta Resurssimittareita CPU käytön vähentäminen I/O Levytila Muistin käytön optimointia Verkkoliikenteen vähentäminen Sisältö
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 Bufferi PDV Nimi Tyyppi koko Data uusi; Set vanha; A = B; X = 3 * y; Run; Bufferi
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
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 Indeksin plussat ja miinukset
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-lause • libname 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.
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; Antaa DB2:n tehdä se työ
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 resurssit • Aineiston 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.