SAS-ajojen optimoinnista Asko Kauppinen ja Lauri Mantere Aureolis Oy SUGIF Tech club 09/2012
Aiheet 1. Yleistä 2. BASE-SAS optimointi 2.1 Yleiset käytännöt 2.2 Levyoperaatioiden ja CPU-käytön optimointi 3. SAS DI-Studiolla tehtynä 3.1 Projektin käytännöt 3.2 Compress-optiot 3.3 Hyviä käytäntöjä
1. Yleistä Esityksessä keskitytään hyviin ohjelmointikäytäntöihin (ajojen tai jobien asetukset, toimintatavat) Paremmalla infralla ja/tai rajapinnoilla voidaan toki kasvattaa ajojen tehokkuutta ilman että ohjelmakoodin tehokkuuteen olisi panostettu
2.1 Yleiset käytännöt Käytetään rajausehtoja oikein, käytetään indeksejä, pudotetaan/pidetään tarvittavat muuttujat
2.2 Levyoperaatiot - Compress Tauluja pakkaamalla voidaan pyrkiä vähentämään levyoperaatioiden vaatimaa aikaa, mutta samalla CPU-ajan käyttö lisääntyy Hyödyllistä jos ajon suorituksen kelloajan ja prosessoriajan välillä iso ero kelloajan suhteen Levytilan säästö on ensimmäinen tavoite Esim. SAS-taulu 30GB 9GB
2.2 Levyoperaatiot - jatkoa Jos SAS-taulu sisältää runsaasti sekä merkki että numeerista dataa niin compress=binary on paras pakkausoptio vaikka se on compress=char optiota kalliimpi prosessoriajan mielessä options compress=binary; /* asetus kaikille luoduille tauluille */
3. SAS DI-Studiolla tehtynä BASE-SAS:a käyttäneen on helppo lähteä tekemään projekteja DIS:llä, kyseessä on käyttöliittymä SAS:n toiminnallisuuksiin Joitain käytäntöjä voi olla hyvä muuttaa, varsinkin isommissa projekteissa kun useampia tekijöitä samaan aikaan
3.1 Projektin käytännöt Jaetaan toiminnallisuus loogisiin kokonaisuuksiin, ei tehdä megajobia joka yrittää ratkaista kaiken – ylläpito, tuotannon seuranta ja kehittäminen helpompaa Metadatan hyödyntäminen kuvausten tekemisessä kansiot, kuvaus-kentän käyttö, vastuut
3.1 Jatkoa Määritellään DIS:n käyttämään autoexec.sas tiedostoon automaattinen makrokirjastoviittaus, jonne makrot on SAS-ohjelmina tallennettu Tämän jälkeen jobien Properties/Precode ja postcode kohdassa on mahdollista käyttää näitä makroja Tai precode/postcode kohdissa transformaatiossa
3.2 Compress-optiot Luvun 2 esimerkkeinä esitetyt pakkausoptiot voidaan toteuttaa taulukohtaisesti, jobin asetuksissa tai kirjastokohtaisesti määrityksessä DIS:ssä
3. 2 – Taulukohtainen asetus
3. 2 – Jobikohtainen asetus
3. 2 – Kirjastokohtainen asetus
3.3 Hyviä käytäntöjä - rajaukset Esimerkkitilanne: Jobi, jossa haetaan osajoukko tuote-dimensiosta ja yhdistetään tiedot faktatauluun tai tauluihin inner joinilla. Voitaisiin optimoida tekemällä tuoterivejä rajoittava väliaikainen taulu ja sen jälkeen käyttämällä sitä kyselyissä faktatauluihin
3.3 Hyviä käytäntöjä - esisorttaus Esimerkkitilanteessa samaa taulua tarvitaan useassa kyselyssä Kyselystä saadaan tehokkaampi kun taulu sortataan ensin ja sortattua taulua käytetään kaikissa kyselyissä tämän jälkeen Relaatiokannan taulun käsittely eroaa, edellinen toimii parhaiten SAS-taulujen kohdalla
Bonus - Rinnakkaisajo Moniajo yhdellä koneella Usein SAS ohjelmissa on osia, jotka voidaan ajaa rinnakkain ja jotka vaativat eri resurssia, IO-riippuvaista datan siirtoa, CPU-riippuvaista laskentaa Ajetaan samalla koneella osia, jotka eivät kilpaile samasta resurssista
Bonus - Rinnakkaisajo Moniajo useammalla koneella Jos ohjelmassa on useita osia, jotka vaativat runsaasti CPU:ta jaetaan nämä etäkoneille ja luetaan valmiit tulokset takaisin
Bonus - Rinnakkaisajo Options sascmd='/usr/sasroot/SAS_9.2/SASFoundation/9.2/sas -nosyntaxcheck‘ autosignon comamid=tcp; rsubmit task1 wait=no inheritlib=(datat); /* Steppejä 1*/ endrsubmit; rsubmit task2 wait=no inheritlib=(datat); /* Steppejä 2*/ /* Steppejä 3*/ waitfor task1 task2;