Šo sestdien Rīgā bija Software freedom day, kas notika LU Linux centrā un par ko informēju jau iepriekš. Pirms došanās uz pasākumu izjutu nelielu skepsi, jo pierakstīšanās procesā uz MySQL ātrdarbības skaņošanas semināru valdīja mērens bardaks, tas ir, sākumā tas bija kā visiem pieejams, tad pazuda, tad atkal uzradās, kā arī visu laiku mainījās semināra sākuma laiks, piedevām pēdējo izmaiņu piefiksēju tikai tāpēc, ka nejauši vēlreiz iepētīju pasākumu plānu. Bet nu “viss labs, kas labi beidzās”, un pasākums izvērtās gana interesants.
Semināru vadīja Jay Pipes un slaidi bija tāds kā apkopojums no viņa pēdējām abām prezentācijām, kas redzamas viņa mājaslapā Legend of Drunken Query Master: The Apprentice’s Journey un Join-fu: The Art of SQL – ZendCon 2008. Tātad tie, kas seminārā tādu vai citādu iemeslu dēļ nepiedalījās, var vismaz paskatīties galvenās idejas no tām. Lielākais pluss, protams, bija iespēja uzdot jautājumus un saņemt kompetentas atbildes. Ašākais no klausītājiem, kas pareizi atbildēja uz Jay Pipes jautājumu, savā īpašumā ieguva grāmatu High Performance MySQL, Second Edition. Vēl jāpiebilst, ka semināra pasniedzējs arī ir līdzautors grāmatai Pro MySQL.
Dažas pasākuma bildes var redzēt šeit.
Tā kā neesmu nekāds baisais MySQL specs un lietoju to tā sakot brīvajos brīžos, tad iespējams, ka mani iespaidi ir mazliet savādāki nekā tie, kas būtu radušies MySQL ikdienas lietotājiem, bet daži no tiem bija šādi:
- Tika atgādināts par to, ka MySQLā ir daudz un dažādi tabulu tipi un tas, ka Jūs izmantojat tikai vienu no tiem, visdrīzāk nozīmē, ka Jūsu aplikācija nedarbojas optimāli. Ko tur piebilst, tieši tāpat ir arī, piemēram, Oraclē, bet cik vispār zin, ka Oraclē ir vairāki tabulu tipi, nemaz nerunājot par to, ka ir arī tos lietojuši?
- Atgādināts, ka visa pamatā ir shēma un, ja tā ir izveidota neoptimāli, tad tādi būs arī Jūsu vaicājumi, un neviens pasaules optimizators Jums neko daudz nepalīdzēs. Atliek tikai piekrist.
- Diezgan smagi tika spiests uz piemērotu minimālu datu tipu pielietošanu, lai vienā datu blokā pēc iespējas vairāk sapakotu ierakstus.
- Vertikālā particionēšana – ja Jūsu tabula satur daudzas kolonas, no kurām tikai dažas tiek bieži izmantotas, tad sadalīt tabulu divās – vienā ar bieži izmantotajām kolonām, otrā attiecīgi retāk izmantotās, lai nepiesārņotu kešu. Tehnika, kuru nekur citur tā īsti neesmu redzējis iesakam, ja neskaita kādus ekstrēmus gadījumus ar blobu un clobu likšanu atsevišķās tabulās, lai tās neafektētu pamattabulas.
- Atgādinājums par MySQL vaicājumu kešu (query cache), kurš noklusēti ir 0. Kešošanas algoritms gan ar nekādu dziļu inteliģenci neizceļas tāpēc jābūt uzmanīgam ar vaicājumu kešošanu, kas darbojas uz mainīgām tabulām.
- Atgādinājums un piemērs par to, ka rakstot SQL jādomā kopās nevis ierakstos (think in sets not in rows). Atbalstu ar abām rokam un kājām!
- Īss pārskats par Explain komandu un tās doto rezultātu.
Bija, protams, ne tas vien, bet ne jau visu var atcerēties un šo to no pārējā var redzēt augšminētajās prezentācijās. Pārskatot tagad slaidus, man piesaistīja uzmanību šajā uz beigām parādītās atskaišu iespējas kā ar vienkāršu SQLu (savienojumi un grupēšanas) iegūt sakārtojumus un tekošās summas (running total). Lai gan seminārā Jay Pipes teica, ka neko nezinot par analītiskajām funkcijām, šie ir tipiski analītisko funkciju piemēri, tikai realizēti bez tām. Atliek tikai piebilst, ka izmantojot analītiskās funkcijas, šos SQL teikumus varētu vismaz 3 reizes saīsināt 😉