Verkvangar og prófanir

Grunnútgáfa MySQL virkaði eingöngu á Linux og Solaris og stærsti vandinn við að færa hann yfir á aðra verkvanga (e. Platform) var að þjónninn þurfti þrædd POSIX[1] söfn (e. Threaded POSIX libraries). Í janúar 1997 kom út breytt (e. Modified) útgáfa af MIT-pthreads með kótanum, sem í rauninni er endurbætt POSIX þráðaforritun.

Til þess að nota MySQL frá öðrum forritunarmálum þarf forritunarskil (API) og frá upphafi hefur miðlarinn verið gefinn út með C og Perl forritunarskilum. Síðan hafa komið út fleiri söfn (e. Libraries) sem öll utan Java safnsins byggja á C söfnum.

Slíkt veitir forriturum greiðan aðgang að því að smíða eigin forrit og biðlara útgáfur sem nota MySQL grunna. Til dæmis eru PHP forritunarskilin sem vinsæl eru í gagna­grunnsmiðlun á Vefnum byggð á C safninu. Sá sem þekkir til notkunar PHP safnsins mun þekkja notkun þess ef sá sami vildi forrita aðgang að grunnum sinum í C málinu.

Þegar kerfið var orðið þokkalega heillegt kom upp þörfin á að afkastaprófa (e. Benchmarking) miðlarann og bera hann saman við önnur sambærileg kerfi. Leit var hafin að afkastaprófunum sem gætu hentað en í ljós kom að flestar slíkar prófanir s.s. TCP-afkastaprófanir[2] skoða afkastagetu SQL miðlara byggða eftir viðmiðuninni færslur-á-sekúndu (e. Transaction pr. Second) og þá sem ein lokatala.

Hönnuðir MySQL litu svo á að slík prófun væri þeim gagnslaus m.a. af þeim sökum að fáir notendur inna (e. Execute) forrit sín eftir sömu formerkjum og þessar prófanir svo nærri vonlaust þykir að dæma heildar virkni eftir þeim. Auk þess að MySQL bauð ekki upp á færslu (e. Transactions) möguleika á þessum tíma.

MySQL afkastaprófanirnar eru hannaðar til að sýna fram á hversu hraðvirkur SQL gagna­grunns­miðlari er í algengum aðgerðum (e. Operation), s.s. að afla tengingar (e. Connection) við miðlarann, framkvæma einföld innskot[3] (e. Inserts) eða samtvinnun[4] (e. Join) tveggja taflna með lyklun (e. Key). Þetta leyfir þeim einnig að mæla álag (e. Load) á vefsíðu þegar aðgerðablöndunin (e. Mix of operations) er þekkt. Að sjálfsögðu krefjast slíkar mælingar þess að forritarinn skilji eðli forrita sinna þegar slíkar prófanir eru framkvæmdar.

Eftir því sem tímar liðu komu fram auknar kröfur á MySQL póstlistanum (e. Mailing list) varðandi MySQL eiginleika (e. Features) og hvernig þeir væru í samanburði við aðra miðlara. Aðalhönnuði miðlarans, Monty, leist illa á að grafa í gegnum gömul tilvísana söfn (e. Reference material) sem oft voru úrelt til að finna slíkar upplýsingar. Hann upphugsaði því forrit sem gæti sjálfkrafa (e. Automatic) fundið út hvaða getu gagnagrunnsmiðlarar hefðu upp á að bjóða. Honum datt í hug að slíkt forrit væri einnig öflug prófun á getu MySQL miðlarans þegar honum væru sendar margar afbrigðilegar fyrirspurnir (e. Abnormal Queries).

Til þess að framkvæma slíka prófun þurfti einhverja hugmynd um getu þeirra miðlara sem prófaðir voru en vinna við að fletta slíku upp og kóta er mjög seinleg. Því var búið til forrit sem gat fundið slíkt út sjálfkrafa. Við fyrstu prófanir tólsins kom ýmislegt óvænt í ljós, miðlararnir sem prófaðir voru hrundu (e. Crash) við mikið álag og var slíkt svo algengt að forritið var nefnt „crash-me.“ Svo ágengt er forritið að eini gagnagrunns miðlarinn sem hefur verið prófaður með því án þess að hrynja er Oracle. Við prófanir hafa að sjálfsögðu komið fram ótal lýs (e. Bugs, í. pöddur) í MySQL sem hafa allar verið lagaðar.

Forritið crash-me og afkastaprófanirnar eru útfærðar (e. Implemented) sem Perl DBI/DBD forskriftir (e. Scripts). Forrit þessi gera þúsundir fyrirspurna á valinn gagnagrunns miðlara til að finna út hvernig hann virkar við raunverulegar aðstæður. Við keyrslu koma þá upp helstu mörk (e. Limits) á vinnslu miðlarans. Einn kostur forritsins er sá að gagnagrunns hönnuður getur hannað SQL grunna sína á færan­legri (e. Portable) máta. Hann getur t.d. með aðstoð þeirra fundið út mörk þess miðlara sem myndi geyma grunnana.

Algengustu aðgerðategundir sem crash-me prófar eru INSERT, UPDATE, DELETE og SELECT, aðgerðir sem fylgt er eftir með að velja eða smíða töflur og atriðaskrár. Dæmi um þá gagnagrunns miðlara sem hafa verið prófaðir með tólinu eru: Adabas-D, Access, DB2, Impress, Informix, MS-SQL Server, MySQL, Oracle, PostgreSQL, Solid og Sybase.

Þær afkastaprófanir sem gerðar eru eiga að gefa nokkuð góða mynd af þeim hraða sem hver miðlari ber í það og það sinnið. Heildarniðurstöður á prófunum á milli miðlarategunda geta þó verið villandi og ber að varast að bera þær grimmilega saman. Sum próf eru keyrð mismunandi oft, með mismunandi skilyrðum og mismunandi fjölda lína (færslna). Einn SQL miðlari gæti verið mjög lélegur í sumum ómerki­legum (e. Unimportant) aðgerðum en afbragðs góður í öðrum sem gætu verið einmitt þær sem hönnuðurinn þarfnast.

Ágætt er að bera saman niðurstöður sama gagnagrunns miðlarans eftir verkvöngum (eða stýrikerfum) og útgáfunúmerum. Til dæmis hafa samanburðar-prófanir á MySQL miðlaranum sjálfum leitt í ljós ýmsar niðurstöður:

  • Linux 2.2. er mun hraðvirkari en Linux 2.0 á fjölörgjörva tölvum. Þetta má meðal annars rekja til þess að Perl túlkurinn og MySQL miðlarinn ná að keyra á sitt hvorum örgjörvanum og SMP[5] kóti keyrist hraðar.
  • Linux gefur 7% hraðvirkari vinnslu en Windows 98 og 49% hraðvirkari en Windows NT á samskonar tölvu.
  • Windows 98 gefur 27% meiri hraða en Windows NT á samskonar tölvu.
  • MySQL á Pentium II 400Mhz tölvu og Linux 2.2 stýrikerfi er miklum mun hraðvirkari en Sun Ultrasparc 400 Mhz tvíörgjörva tölva með Solaris 2.7 stýrikerfi. Þessar niðurstöður gætu orðið allt aðrar undir auknu álagi (e. Higher Load).
  • Ef framkvæmd eru mörg innskot (e. Inserts) á Solaris tölvu má ná 22% hraðaaukningu með því að auka örgjörva aflið um 100%.
  • Yfirbyggingin (e. Overhead) fyrir notkun MyODBC, og líklega fyrir flesta ODBC rekla er minnst 19%.
  • Meðan prófanirnar voru framkvæmdar var auðvelt að vinna aðra vinnu á Linux vélinni á meðan en á NT var nánast ómögulegt að framkvæma neina aðra vinnu. Að opna kvaðningar-­glugga (DOS glugga) tók 30 falt lengri tíma og við vélritun tók u.þ.b 10 sekúndur fyrir bókstafi að birtast á skjánum.

Heilmargt er að gerast í afkastaprófunum hjá MySQL og fylgjast má með hvað þar gerist á slóðinni http://dev.mysql.com/tech-resources/benchmarks/ (Ath. ný slóð). Hér til gaman birtist mynd af samanburðargrafi frá eWeek sem sýnir niðurstöður úr prófunum.

Niðurstöður samanburðar prófana eru skemmtilegar fyrir notendur sem nota einfalda grunna t.d. fyrir vefsíður undir litlu álagi. Þær eru hins vegar nauðsynlegar forriturum sem starfa við þróun gagnasafns-umsjónarkerfa og þá til samanburðar. Samanburðar t.d. á getu eigin kerfis gagnvart getu samkeppnis kerfa auk lúsarleitunar og annarra kerfisþátta eins og þeir hjá MySQL AB hafa gert. Einnig henta slíkar prófanir vel fyrir kerfisstjóra sem e.t.v. reka blandað miðlara umhverfi eins og gert er hjá hýsingar fyrirtækjum t.d. gagnavöruhúsum.

Þess má að lokum geta að þeir hjá TcX nota gagnagrunna sem innihalda yfir 50 milljón færslur, og ekki má gleyma að miðlarinn var í upphafi þróaður til utanumhalds þeirra eigin grunna, sem skýrir að hann hefur frá upphafi borið þess merki: eiginleikar eru eitthvað færri en SQL staðallinn krefst en rekstur er kostnaðarlítill og hraði (og væntanlega öryggi) er í hámarki.


[1] POSIX er staðall fyrir þrædda forritun á UNIX verkvangi. lesa má um þetta efni á slóðinni: http://www.llnl.gov/computing/tutorials/pthreads/

[2] Um TCP benchmarking má lesa á slóðinni http://www.cs.odu.edu/~btu/benchmark/main.html

[3] Tölvuorðasafnið mælir með orðinu „innsetning“ fyrir enska orðið Insert. Ég slysast stundum að nota orðið innskot sem merkir hið sama.

[4] [enska] join [íslenska] töflutenging kv. [sh.] samtenging kv. [skilgr.] Aðgerð í töflualgebru þar sem búin er til ný tafla úr tveimur eða fleiri töflum sem hafa sameiginleg gildamengi fyrir einn eða fleiri dálka hverrar töflu. [skýr.] Aðgerðin felst í mengjamargföldun taflnanna ásamt því að taka saman þær línur úr upprunalegu töflunum sem hafa sömu gildi í sameiginlegu gildamengjunum. Ég slysast stundum til að nota orðið „tvinnun“ eða „samtvinnun“ fyrir þetta hugtak.

[5] SMP: Simultaneous Multi Processing

 

 

This entry was posted in MySQL bók and tagged . Bookmark the permalink.

Comments are closed.