Archive for the ‘MSSQL’ Category

MSSQL : Kuidas queryt analüüsida, kui profilerit pole?

aprill 24, 2008

Kui pole korralikke graafilisi vahendeid MSSQL jaoks serveril, siis konsooli kaudu saab query execution plani järgnevalt kätte (mysqlis siis vastavalt explain käsk).

SET SHOWPLAN_TEXT ON
GO
SELECT *
FROM articles
WHERE title like ‘89%’
GO
SET SHOWPLAN_TEXT OFF
GO

MYSQL imelikud päringud

märts 26, 2008

Feedreader Connect serverit arendades avastasin (MYSQL) omapärad

Mitu kirjet väljastab esimene SQL ja mitu teine 😉

select title
from articles
where deleted=0
limit 0,5
union all
select title
from articles
where deleted=0
limit 0,2;

select s.title
from (select title
from articles
where deleted=0
limit 0,5) as s
union all
select s.title
from (select title
from articles
where deleted=0
limit 0,2) s;

____________________

s.id unknown column ? aga miks või olen harjunud MSSQL mugavustega. Jah lause rumal, aga süntaks vägagi õige.

select s.title,s.id
from articles s
where (select count(*)
from (select s1.title
from articles s1
where s1.id=s.id) as ptt)>0
limit 0,5;

____________________

Ühel päringul kasutati fulltable scani, sunnime MYSQL indeksit kasutama

select *
FROM articles FORCE INDEX (IDX_Articles_modified)
where modified<‘2005-01-01’;

____________________

Ajutiste tabelitega on MYSQL tiimil veel tööd teha;
jah dokumentatsioonis ka öeldud, et see päring hetkel ei tööta…aga miks …

create temporary table if not exists test(a int) engine = memory

insert into test(a)
select a
from test

MSSQL : sunnime serveri kasutama õiget indeksit

jaanuar 30, 2008

Nonii…mõtlesin, et miks hoida infot endale, kuna ma vist 8 aastat MSSQL peal toimetanud, siis igapäevaseid hinte võin meeleldi jagada.

Viimati tekkis probleem ühe päringuga Feedreader Connect juures, mõtlesin, nii index pihta saanud. Päringud venisid, pöördusin vanade sõprade juurde…

DBCC INDEXDEFRAG
DBCC DBREINDEX

Ei mingit tolku ja siis vaatasin execution plani päring rõõmsalt lasi mööda primary indexit…ja mis lahendus…anna indeks ise ette ja kõik BRO:)))

select * from articles WITH (INDEX = delindx) where deleted=0

Ennem oli probleem selles, et andmeid polnud palju server “näris” läbi, seetõttu ei saanudki aru…mis toimub….

Jälle targem…olen mässanud protseduuridega, mis ilma WTH RECOMPILE määranguta töötavad 1 min….peale seda 20 sek…

Arvamusi tarkvara maailmast…ja käekäigust

jaanuar 12, 2008

Nüüd vist võib juba sõna võtta – ametlikult olen programmeerimisega seotud olnud maagilised 13 aastat.

Suuremad muutused, mis tarkvaraga toimunud:

1) programmeerimine on aastatega aina lihtsamaks läinud (keeled;.netC#/Java)
2) tugev avatud lähtekoodi pealetung (kummardus ka Linuxi poole)
3) enam ei müü toodet see, kellel parem kvaliteet vaid suurem HAIP

————————–

Nüüd võtame täpsemalt need pidepunktid vaatluse alla

1) Jah .net tõesti hea keel, nüüd kus saad ka Unicodet kasutada ilma trikke tegemata, ennekõike on minu arust kõige kasulikum olnud asp.net osa.
Varem kulutasin suht palju aega veebide visuaalse poolt koostamiseks ja siis koodi kirjutamiseks. Huvitav, miks Ajaxit varem ei kasutatud:)))
Java suhtleliselt lihtne keel oma moodulite ja võimaluste hulgaga, ei pea ise eriti miskit juurde leiutama.

Viimase suurim probleem on tema kohmakus ja nagu alati intepretaator keeltega probleem kiirusega. Mis mind hämmastab, on viimasel ajal nagu rõhu panek uutele kelladele ja viledele, mitte kiirusele.

.net, sama lugu – kiirem, kui Java, aga siiski on aeglasem, kui Delphi/C++ app’d.

Nähtamatu sõda on alanud Java ja .net vahel, saan ka aru MS soovist siduda kliendid ühe kindla platvormiga, pakkudes selles väga “maitsvaid komme”.
Linuxi all on .net emulaatoreid, aga jah…uimane teema oli, proovitud.

.Net “sööb” Java turult välja…

Miks ma rõõmus pole, kui need keeled olemas…põhjus väga lihtne. Olles vana kooli programmeerija, kes alustas ASMiga ajasin taga igat bitti, mis mälus paiknes.
Ka rakendasin algoritme, et kasvõi 1 millisekund võita.

Tahan öelda mugavad programmeerimiskeeled rikuvad app’de kiirused.
Nüüd, kus arvutid 2>ghz ning 1gb mälu, ei pööra keegi enam tähelepanu, et kas miskit vaja optimiseerida või palju mälukasutus. Masin närib ju kõik läbi…ja see suhtumine annab meile lõpetuseks uimased arvutid.

Pole nali, olen testinud ka programme ning mulle öeldud, et mul liialt aeglane arvuti ? 1.8ghz / 512mb aeglane ühe app jaoks… “No tule taevas appi”, nagu ütles klassik.

“Garbage collector “, pigem programmeerijate vaenlane, kui süsteem tegeleb sinu mäluhaldusega 100% muutub ta lohakaks ja sellest palju näiteid, kuidas inimene C++/Delphi unustab mälu vabastamata.

Tüüpide täpse kirjeldamise nõue teeb küll rõõmu,
samuti objektorienteeritud struktuur.

2) Avatud lähtekood ja üldse vaba tarkvara tulek on tervitatav nähtus.

Nüüd saan rahus koodist lugeda, et mida ta ka teeb, samuti vigu parandada.
Samas on ka halb moment, kui korraga mitu isikut seda koodi mudib,peab ka olema muudatuste kontroll , nö ka quality check, seda tavaliselt ei ole.

Nüüd ka huvitav teooria, avatud tarkvara pealetulek on väljasöönud mitmeid väikefirmasid, kes sarnast tarkvara arendasid, me ei räägi suurtest monopolidest.

Oletame, teete tarkvara mingile firmale, hoitakse kliendi andmeid, koosolekute tähtaegu jne. Nüüd tuleb isik X, kes teeb sama asja, võimalik väikeste nüansidega ning avaldab lähtekoodi. Sisuliselt tõmmati sinu firmale vesi peale, miks peaks klient seda enam sinult ostma, kui ta saab sama asja tasuta…

Jah, see sunnib sind rohkem pingutama uusi lahendusi pakkuma.
Kahjuks lahenduste kopeerimine (kasvõi kaudselt) vägagi “in”.

Ellu jäävad firmad, näiteks Eestis, kes omavad ka arvutite müüki või tegevad veel muul alal. Samuti need, kes riigihangetele pidevalt panevad käpa peale, sest riigihangete seadus nii kirjutatud, väikestel pole väiksemat võimalustki osaleda. Näiteks: käibenõue….

Varem oli veebilehed / CMS väga hea raha allikas, tuli igasugu vabavara (avatud tarkvara) peale, enam ei pidanud suurt disain teenust ostma. Samuti see osa kukkus ära. Õnnetud kliendid, kellel koduleht X firma serveris ja peab iga kuu teenustasu maksma ning lähtekoode ei saa.

Ehk ellu jäävad tulevikus ainult suurfirmad, kes seotud mitme valdkonnaga. Või väikefirmad, kes tegelevad väga spetsiifilise valdkonaga ala lennukimootorite juhtploki kontrollerite programmeerimisega.

Kokkuvõte, jah kasulik seetõttu, et tõi kiiremat innovatsiooni arvutimaailma, samas on ka juba ohvreid nõudnud ning nõuab ka tulevikus…
Vaadake ka suurte heitlust, kuidas pakutakse võidu teenuseid, MS vs Google vs Yahoo (kes kahjuks sörgib järgi).

Küsime ka nüüd nii, mitu tarkvara firmat Eestis järgi jääks, kui kaoksid ära riigitellimused…kus liiguvad suured rahad.

3) HAIP, selles lühidalt. Kui varem kiideti tarkvara ja tema omadusi, siis turule on tekkinud niipalju tooteid, kus kiidetakse ennast taevani. Erinevatesse portaalidesse sisestatakse oma reklaami jne jne . Juhul, kui tarkvara kohta keegi halvasti ütleb, siis on massipsühhoos peal, see parim toode, mida sa räägid. Mitte keegi ei lähe reaalselt proovima toodet, mis sellest isegi 2x parem, sest pole piisavalt haipi.
Haip on minu arust reklaami erivorm…

Tihti ma öelnud, mind ei huvita mida toode võiks teha, tahan näha, mida toode ka reaalselt suudab ja kui ei suuda, siis money back…tihti seda võimalust ei pakuta, huvitav miks;)

Ok levi lõpp tänaseks…pea php,javat,delphit,mssql proc. koodi nii täis, et valutab…;) Korraga mitut keelt kasutada päris sürr, sest kui pea väsib, kirjutan java’s delphi koodi, php’s mssqli ja mssqlis javat :))))

Ennustan seda, et programmeerija kui selline amet kaob ära 10 aasta pärast…4’nda põlvkonna programmeerimiskeelte tõttu….

Nonii, olen portimise maailmameister…

detsember 2, 2007

Ehk avastasin, et olen teinud Feedreader backendile toetuse nii Firebird peale, MSSQL ja nüüd ka MYSQL… Kõige omapärasem on see, et Oracle peale pole veel asja portinud; põhjus suht lihtne, puuduvad käsud, top,limit või first. Rownumber ja subselectid ei sobi, samuti Autonumbrite loomine (sequences). Ju ta vist nii olegi, et suurtel omad puudused…..
Tahaks veel postgre toetuse ka anda. Aga krm ADO + ODBC draiver ja UTF8 = pain in …. piip, toimub märkide teisendamine valeks, isegi kui set names utf8 ja muud parameetrid seadistatud.
Aga, kui kuidagi ei saa, siis kuidagi ikka alati saab;))

Väike tehtud tööde referens

oktoober 24, 2007

Pean kohe alguses “pattu” tunnistama, jubedalt meeldivad igasugu süsteemsed asjad. Ehk maailm, mida paljud kirjeldavad sõnaga ULME.  Lihtne on valmis klotse kokku laduda,  aga kui õiget klotsi pole, mis siis saab. F1 F1 …ei siis teed klotsi ise, mida keerulisem, seda lahedam 🙂 Tähtis on see, et töö peab olema huvitav ja põnev st ka sulle jäetakse suht vabad käed, siis on tulemus 200% “success”

—————————————————————

www.feedreader.com

* Apache mooduli kirjutamine, paras pähkel (D7 all teha),  töötab 2.0 – 2.2 peal. Kogu feedreaderi loogika seal.Selliste ISAPI/Apache moodulite eelis ongi just mõnus (saarlane ütles MÖNUS) kiirus, pole interpretaatoreid vahepeal.  Eriti ei pidanud jalgratast ka leiutama, sain oma varasemat sessioonipuu koodi kasutada.

* Kogu Feedreaderi backend. Parimad palad kirjutan lahti.
Täiustasin idhttp, panin ntml ja digesti authoriseerimise tööle.
Ehitasin keeruka multithreaded järjekorra süsteemi, mille kaudu töid tehakse.
Kirjutasin ümber Firebird draiveri, tekitasin universaalse wrapperi, mille kaudu saab FR backendist olla, Firebird,MySql või MSSQL.

Samuti olemas andmebaasi objektide pooling süsteem ja ühenduste taastamine. Wrapperid klassid meilide (smtp) ja failide (ftp) saatmiseks. Ma ei kasuta seal ei MAPI’t ega Wininetit, mis iseenest oleks tore, aga liialt MS sõltuvus tekiks. Ftp’sse lisasin võimaluse, et http proxy kaudu ka töötaks asi.

Siis “võimsamad tooted” – serverid. Seal oli puhas mäng serviste tasemel, servistes lisasin failide allalaadimise võimaluse (async queue). Ka automaatse meilide saatmise süsteemi. Kõige huvitavam oli IMAP serveri kirjutamine sinna, kuna Indy Imap oli suht algeline, tuli asi suht nullist kirjutada. IMAP + andmebaas andis ikka laheda elamuse.

Kuna feedreader kasutab smartfiltreid, siis loogika kirjutamine, mis oskaks vastavalt kliendi koostatud kriteeriumitele optimaalseid päringuid teha oli ka paras pähkel.

Kõige “karmim” oli veebi/feedide indekseerimine, omamoodi pisikese Google tegemine.
stemmer, skip words, ligatures, weights jne…oleks märksõnad seal. Päris keeruline oli, selle seletamine võtaks aega, aga sain kõvasti targemaks. Veebilehtede “scrape” ka ikka suht selge, kuidas infot leida õigetest blokkidest jne

Utiliidid, sisuliselt FR on multilanguage app. siis tegin programmi, mis käib elemendid läbi, koostab vajalikud failid tõlgete muutmiseks online modes.

—————————————————————
(3 tk)

IE objektidel baseeruvad rakendused, ka BHO. Viimane oli reklaamide blokeerija IE’le, siis üks custom mime filter.

—————————————————————

* Töötajate õiguste süsteem andmebaasis (ala õiguste maatriksid)

* EE(Eesti Energia) ‘s näidufailide sisselugemise moodul – vist 14 erinevat formaati minimaalselt + service, mis ka automaatselt neid töötleb. Samas programmis oli ka 2 tüüpi arvestuste massgenereerimist.

* Automaatne kliendi tarkvara uuendamise moodul, täitsa huvitav oli (ala nagu
windows update). (FTP/lokaalsete failide baasil)

* Üks programm, kus sai võlgaste päringuid teha , see oli vaid üks leht, tegemist oli isegi päringumootoriga pigem, kus klient sai teha väga keerukaid päringuid vaid mõne klikiga. Ja neid aruandeid oli ikka ….palju. Kuna EE’le tehtud tarkvara, siis ei saa programmi omadustest täpselt rääkida.

* Ojaaa, siis tuli EE e-arve..paljud e’sid kas pole…see oli lahe projekt…2000 aastal loodud, siiani töötab nagu vana mees (nvarchar ODBC lahendus üleküla kärbes seal, pooling, heavy load cached jne jne). XSL süntaks vist Eesti pikim:))))

* Järgmiseks, Microsoft peaks trummipõrina tegema, vana hea ISAPI lahendus, mille kaudu EE töötajad saavad näite sisestada. Asi tehtud 1999 juba, siiani töötab, tema loogika täielikult Asp.neti eelase oma, väikesed Ajax poiss ideed ka seal sees. Dünaamilist javascripti seal ka jagus…

* siis TAPI, tore asi, tegin vahekihi, oli üks karbike, kes istus com pordis ja küsis telefonijaamalt numbreid ja siis dll tegi teistele programmidele kogu andmevoo söödavaks. Sel hetkel, kui tegin oli Tapi alles lapsekingades, dokumentatsiooni ikka otsisin nagu kullapuru silmas.

* siis soojuse arvestuste programm, uh seal oli igasugust nänni sees, arvestusi, aruandeid jne jne jne. See oli üks esimesi tõsiseid programm, mis kasutas ADO’t, BDE hakkas vanaks jääma vaimult. Seal programmis ka eksperimenteerisin veelgi. Kliendi UI’s kasutasin IE activeX objekti, et programm näeks sisuliselt välja nagu veebileht. Kaudne taotlus oli see,et vajadusel saaks kiiresti minna veebi peale üle.

* oli ka üks programm, millega andministraatorid täitsid andmetabeleid. Palju dbgride ei miskit innovatiivset.

* mis veel, küsitluste moodul tore asi 3 osa, service, UI klient, (dün)veebileht.
Tegemist oli jublakaga, millega sai inimestele pakkumisi saata. Samuti teavitab see jublakas kliente elektrikatkestustest. Saadab emaile,sms ja ka prinditud kujul kirju. Seal ka küsitluse võimalus, töötaja koostab küsimused, siis süsteem saadab automaatselt klientidele ekirjad, kus link sees lehele, kus küsimustele saab vastata. Päris töömahukas süsteem oli.

* SQL protseduure erinevate backendide jaoks >300  kindlasti.