Transcript
Page 1: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

SAS Technical Clubin kokoontuminen 17.9.2009

Virpi Virtanen

Tieto-Tapiola Oy

Page 2: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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

Page 3: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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?

Page 4: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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.

Page 5: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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.

Page 6: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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.

Page 7: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

Kaaviokuva Data-vaiheesta

Nimi

Tyyppi

koko

PDV

Bufferi

Bufferi

Data uusi;

Set vanha;

A = B;

X = 3 * y;

Run;

Page 8: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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

Page 9: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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.

Page 10: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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.

Page 11: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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.

Page 12: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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!

Page 13: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

Windows-maailma

Windowsin task manager kertoo, kuinka paljon resursseja tarvitaan ohjelman suorituksen aikana.

Resurssien tarpeen arviointi on summittaista.

Page 14: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

Mainframe

Rsubmit

Portaali

Koodin ajaminen mainframen SASilla

Miten mitata PDF tiedoston luomiseen kuluva aika??! Seinäkellolla?

Page 15: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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ää!

Page 16: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

Proc Sql

Proc Sql stimer;

Saadaan käyttöön resurssimittari jokaiselle proc sql:n lauseelle.

Page 17: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

ARM

SAS versiosta 8.2 lähtien on ollut käytössä ARM makrot.

ARM=Application Performance Measurement

Erilliseen lokitiedostoon kerätään suoritusaikoja.

Page 18: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

9.2 Code Analyzer?

9.2 SAS tuo mukanaan koodi analysjoijan, SCAPROC-proseduurin, joka tarjoaa lisätietoja

• Lukemisesta ja kirjoittamisesta

• Makromuuttujista

• Stepeistä

• Suoritusajasta

Page 19: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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

Page 20: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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.

Page 21: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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

Page 22: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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?!

Page 23: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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.

Page 24: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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ä.

Page 25: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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.

Page 26: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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

Page 27: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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

Page 28: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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

Page 29: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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.

Page 30: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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.

Page 31: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

Useamman bufferin käyttö

Dataa käytettäessä on mahdollista määrittää useampi bufferi käyttöön.

Systeemioptioissa voidaan määritellä bufferien lukumäärä.

Page 32: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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.

Page 33: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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;

Page 34: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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.

Page 35: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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;

Page 36: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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.

Page 37: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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ä.

Page 38: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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

Page 39: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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.

Page 40: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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.

Page 41: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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

Page 42: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

Tiivistelmä

Teesit naulattavaksi työhuoneen oveen

Page 43: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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

Page 44: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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ä

Page 45: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

Levytilan vähentäminen

Käytä vain tarvittavia muuttujia.

Lyhennä numeeristen muuttujien vaatimaa tilaa (ei ensisijainen menetelmä).

Kompressoi data.

Page 46: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

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.

Page 47: SAS ohjelman suoritusajan mittaaminen ja koodin tehokkuuden parantaminen

Verkkoliikenne

Muokkaa data mahdollisimman lähellä sen alkuperäistä sijoituspaikkaa.

Siirrä osajoukkoa tai summattua dataa.


Top Related