Suomi.fi-palveluväylä –
Liityntäpalvelimen tietokannan toiminnan tehostaminen

Print Friendly, PDF & Email

Liityntäpalvelimen suorituskykyä voidaan parantaa tehostamalla SOAP-sanomaliikenteen tallentamiseen käytetyn tietokannan (PostgreSQL) toimintaa. Tietokannan toiminta tehostuu lisäämällä kaksi indeksiä tietokantahakuja nopeuttamaan:

  • tietokannan sanomien arkistointiin liittyvä indeksi
  • tietokannan sanomien aikaleimaukseen liittyvä indeksi

Nämä kummatkin indeksit ovat tulossa vakiona seuraaviin Suomi.fi-palveluväylän liityntäpalvelimen ohjelmistoversioihin, ensimmäinen indeksi tulee version 6.9.3 myötä ja toinen indeksi tulee syksyllä 2017 julkaistavaan seuraavaan versioon. Nämä indeksit on todettu varsin tehokkaiksi ja nopeuttavan tietokannan operaatioita merkittävästi. Täten myös koko liityntäpalvelimen suorituskyky paranee. Indeksien lisääminen on helppo ja matalan riskitason manuaalinen operaatio jonka liityntäpalvelimen ylläpitäjä voi tehdä.

HUOM! Ennen indeksien luontia kannattaa ottaa selville kuinka paljon arkistoimattomia viestejä ko. palvelimen tietokannassa on. Indeksit nimittäin nopeuttavat/tehostavat kannan toimintaa niin paljon, että ne saattavat täyttää palvelimen levyn nopeasti kun sanomien arkistointi alkaa toimimaan tehokkaammin. Täten toimimalla varmistutaan ettei palvelimen levytila lopu yllättäen jos iso määrä arkistointitiedostoja alkaa kertymään levylle nopealla tahdilla.

Arkistoimattomien sanomien määrän voi tarkistaa seuraavalla komennolla:

sudo -u postgres psql -c 'select archived, discriminator, count(*) from logrecord group by 1,2' messagelog

Näytölle tulevasta tulosteesta näkee arkistoimattomien sanomien määrän:

archived | discriminator | count
----------+---------------+---------
t        | t             | 42254
f        | m             | 1488
t        | m             | 3612462
f        | t             | 357
g

Sarakkeen ’discriminator’ arvo ’m’ indikoi sanomia (m = message, t = timestamp) ja sarakkeen ’archived’ arvo ’f’ indikoi, että sanoma ei ole arkistoitu (f = false, t = true). Yllä olevassa tulosteessa on siis arkistoimattomia sanomia 1488 kpl ja arkistoituja 3612462 kpl.

Jos arkistoimattomia sanomia on tietokannassa useita satoja tuhansia (>200 000) niin tällöin indeksejä ei kannata lisätä vaan odottaa, että liityntäpalvelin saa arkistoinnin tehtyä niin valmiiksi että arkistoimattomia viestejä on korkeintaan kymmeniä tuhansia. Tämän jälkeen indeksit voi lisätä alla olevan ohjeen mukaan.

Indeksit luodaan seuraavilla komennoilla:

sudo -u postgres psql messagelog <<EOF
create index [concurrently] ix_not_archived_logrecord on logrecord(id) where discriminator = 't' and archived = false;
create index [concurrently] ix_not_timestamped_logrecord on logrecord(id, discriminator, signaturehash) where discriminator = 'm' and signaturehash is not null;
EOF


concurrently
 -avainsana tarvitaan jos indeksi luodaan kun xroad-proxy service on ajossa, tällöin siis liityntäpalvelimen X-Road ohjelmisto on toiminnassa indeksin luonnin ajan (indeksin luomiseen kuluva aika riippuu paljon siitä mitä operaatioita kannassa on meneillään/kesken). Jos xroad-proxy ei ole ajossa, niin tällöin avainsanaa ei tarvita. Usein miten indeksien luominen saattaa kestää pitkäänkin (useita tunteja) jos xroad-proxy on ajossa ja arkistoitavia viestejä on kertynyt kantaan paljon. Tällöin voi olla syytä, että xroad-proxy kannattaa pysäyttää esimerkiksi seuraavan huoltoikkunan aikana ja tehdä indeksien luonti vasta tällöin. Huoltokatkon aikana kun xroad-proxy on pysähdyksissä niin indeksien luomien on nopeaa. Indeksien luonnin jälkeen  xroad-proxy service voidaan käynnistää => indeksit tulee käyttöön tietokannan operaatioiden yhteydessä.

Print Friendly, PDF & Email

VersioMitä tehty / muutettuPvm/
henkilö
1.0Dokumentti julkaistu.10.05.17 / HH

Yksilöintitunnus: 12345