Kun WordPress-sivuston suorituskykyä analysoidaan esimerkiksi Query Monitorilla, moni yllättyy nähdessään tietokantakyselyiden määrän. Yksinkertainenkin sivu voi suorittaa kymmeniä kyselyitä, ja monimutkaisemmilla sivustoilla määrä voi nousta helposti satoihin. Tämä herättää usein kysymyksen: miksi WordPress tarvitsee niin paljon tietokantakyselyitä yhden sivun näyttämiseen?
Tietokantakysely on pyyntö, jonka WordPress lähettää MySQL- tai MariaDB-tietokannalle....
Heti WordPressin käynnistyessä se hakee suuren määrän asetuksia taulusta:...
Kun käyttäjä avaa artikkelin, WordPress ei hae pelkästään itse sisältöä....
WordPress käyttää laajasti niin sanottuja meta-tauluja....
Jokainen lisäosa voi suorittaa omia tietokantakyselyitään....
Myös teemat vaikuttavat tietokantakuormaan....
WooCommerce on yksi suurimmista tietokantakuormituksen lähteistä....
Jos sivusto näyttää kaikille saman sisällön, välimuisti voi vähentää tietokantakyselyitä lähes nollaan....
Eivät välttämättä....
Suorituskyvyn kannalta haitallisimpia ovat:...
Täydellisesti niitä ei voi poistaa, koska WordPress tarvitsee tietokantaa toimiakseen....
Yksi parhaista työkaluista on Query Monitor....
WordPress tekee paljon tietokantakyselyitä, koska lähes kaikki sen toiminta perustuu dynaamisesti tietokannasta haettuihin tietoihin. Sivun sisältö, asetukset, käyttäjätiedot, kommentit, lisäosien tiedot ja WooCommerce-toiminnot muodostuvat useista...
Todellisuudessa suuri osa WordPressin joustavuudesta perustuu siihen, että lähes kaikki sisältö ja asetukset haetaan tietokannasta dynaamisesti. Jokainen lisäosa, teema ja toiminnallisuus lisää omia kyselyitään osaksi kokonaisuutta. Tässä artikkelissa käydään läpi, mistä tietokantakyselyt syntyvät ja milloin niiden määrä voi muodostua ongelmaksi.
Mitä tietokantakysely tarkoittaa?
Tietokantakysely on pyyntö, jonka WordPress lähettää MySQL- tai MariaDB-tietokannalle.
Esimerkiksi:
SELECT * FROM wp_posts
WHERE ID = 123;
Tämän kyselyn tarkoitus on hakea tietyn artikkelin tiedot.
WordPress tekee jatkuvasti vastaavia kyselyitä saadakseen käyttöönsä kaiken sivun muodostamiseen tarvittavan tiedon.
Sivuston asetukset haetaan ensimmäisenä
Heti WordPressin käynnistyessä se hakee suuren määrän asetuksia taulusta:
wp_options
Näihin kuuluvat esimerkiksi:
- Sivuston nimi
- Osoitteet
- Aikavyöhyke
- Teeman asetukset
- Lisäosien asetukset
Osa asetuksista ladataan niin sanotun autoload-järjestelmän kautta jo ennen varsinaisen sivun rakentamista.
Tämä vähentää myöhempien kyselyiden tarvetta, mutta kasvattaa käynnistysvaiheen työmäärää.
Sisällön hakeminen vaatii useita kyselyitä
Kun käyttäjä avaa artikkelin, WordPress ei hae pelkästään itse sisältöä.
Samalla voidaan hakea:
- Artikkelin tiedot
- Esikatselukuva
- Kirjoittajan tiedot
- Luokat
- Avainsanat
- Kommentit
- Mukautetut kentät
Vaikka käyttäjä näkee kaiken yhtenä sivuna, tietokannan näkökulmasta tiedot sijaitsevat useissa eri tauluissa.
Siksi niiden kokoaminen vaatii useita kyselyitä.
WordPressin metadata-rakenne lisää kyselyitä
WordPress käyttää laajasti niin sanottuja meta-tauluja.
Esimerkiksi:
wp_postmeta
wp_usermeta
wp_commentmeta
Näihin tallennetaan lisätietoja, joita ei sijoiteta päätietotauluihin.
Esimerkkejä:
- Tuotteen hinta
- Esikatselukuva
- Käyttäjän profiilitiedot
- Lisäosien asetukset
Koska tiedot sijaitsevat erillisissä tauluissa, niiden hakeminen vaatii lisäkyselyitä.
Tämä on yksi syy siihen, miksi WordPress tekee enemmän kyselyitä kuin moni muu järjestelmä.
Lisäosat lisäävät omia kyselyitään
Jokainen lisäosa voi suorittaa omia tietokantakyselyitään.
Tyypillisiä esimerkkejä ovat:
- SEO-lisäosat
- Lomakelisäosat
- Tilastointityökalut
- Turvallisuusratkaisut
- WooCommerce-laajennukset
Lisäosa voi esimerkiksi tarkistaa:
- Asetuksia
- Käyttäjän tietoja
- Välimuistin tilaa
- Tuotetietoja
Yksi huonosti toteutettu lisäosa voi lisätä kymmeniä ylimääräisiä kyselyitä jokaiselle sivulataukselle.
Teemat voivat kasvattaa kyselyiden määrää
Myös teemat vaikuttavat tietokantakuormaan.
Monimutkainen teema voi hakea esimerkiksi:
- Suositeltuja artikkeleita
- Viimeisimpiä julkaisuja
- Kirjoittajatietoja
- Erikoissisältöjä
Jokainen tällainen elementti voi vaatia omia tietokantakyselyitään.
Sivunrakentajilla toteutetut sivut käyttävät usein enemmän kyselyitä kuin kevyet WordPress-teemat.
WooCommerce kasvattaa kyselymäärää merkittävästi
WooCommerce on yksi suurimmista tietokantakuormituksen lähteistä.
Verkkokaupassa WordPress voi joutua hakemaan:
- Tuotetiedot
- Hinnat
- Varastosaldot
- Tuoteattribuutit
- Asiakastiedot
- Ostoskorin sisällön
Erityisesti tuotesuodattimet voivat aiheuttaa hyvin monimutkaisia SQL-kyselyitä.
Tästä syystä WooCommerce-sivustoilla tietokantakyselyiden määrä on usein huomattavasti suurempi kuin tavallisilla sisältösivustoilla.
Käyttäjäkohtainen sisältö estää välimuistin hyödyntämistä
Jos sivusto näyttää kaikille saman sisällön, välimuisti voi vähentää tietokantakyselyitä lähes nollaan.
Tilanne muuttuu, kun sisältö on käyttäjäkohtaista.
Esimerkkejä:
- Jäsenalueet
- Oppimisympäristöt
- Verkkokaupat
- Asiakasportaalit
Tällöin WordPress joutuu hakemaan tietoja tietokannasta jokaiselle käyttäjälle erikseen.
Ovatko monet kyselyt aina ongelma?
Eivät välttämättä.
Nopea tietokantakysely voi kestää vain muutaman millisekunnin.
Esimerkiksi:
- 50 nopeaa kyselyä voi olla täysin normaalia
- 100 nopeaa kyselyä voi olla hyväksyttävää
- 10 hidasta kyselyä voi olla suurempi ongelma kuin 200 nopeaa kyselyä
Kyselyiden määrän lisäksi on tärkeää tarkastella niiden suoritusnopeutta.
Mitkä kyselyt ovat yleensä ongelmallisia?
Suorituskyvyn kannalta haitallisimpia ovat:
- Toistuvat identtiset kyselyt
- Indeksoimattomat haut
- Monimutkaiset JOIN-operaatiot
- Suuret postmeta-haut
- WooCommerce-suodattimet
- Huonosti toteutettujen lisäosien kyselyt
Nämä voivat kuormittaa tietokantaa huomattavasti enemmän kuin tavalliset haut.
Kuinka kyselyiden määrää voidaan vähentää?
Täydellisesti niitä ei voi poistaa, koska WordPress tarvitsee tietokantaa toimiakseen.
Määrää voidaan kuitenkin vähentää esimerkiksi:
- Käyttämällä sivuvälimuistia
- Ottamalla Redis käyttöön
- Poistamalla tarpeettomia lisäosia
- Optimoimalla tietokantaa
- Käyttämällä kevyttä teemaa
- Korjaamalla hitaat SQL-kyselyt
Erityisesti objektivälimuisti voi vähentää tietokantakuormaa merkittävästi.
Miten kyselyitä voidaan seurata?
Yksi parhaista työkaluista on Query Monitor.
Sen avulla voidaan nähdä:
- Kyselyiden kokonaismäärä
- Hitaimmat kyselyt
- Kyselyiden suoritusajat
- Kyselyitä aiheuttavat lisäosat
Lisäksi palvelintason analyysiin voidaan käyttää esimerkiksi:
- New Relic
- MySQL Slow Query Log
- MariaDB Performance Schema
Yhteenveto
WordPress tekee paljon tietokantakyselyitä, koska lähes kaikki sen toiminta perustuu dynaamisesti tietokannasta haettuihin tietoihin. Sivun sisältö, asetukset, käyttäjätiedot, kommentit, lisäosien tiedot ja WooCommerce-toiminnot muodostuvat useista eri tauluista, joiden tiedot täytyy yhdistää jokaisella sivulatauksella.
Suuri kyselymäärä ei automaattisesti tarkoita suorituskykyongelmaa. Olennaisempaa on kyselyiden laatu, nopeus ja tehokkuus. Välimuistin käyttö, tietokannan optimointi, Redis-objektivälimuisti sekä huolellisesti valitut lisäosat auttavat pitämään tietokantakuorman hallinnassa myös suurilla WordPress-sivustoilla.