Investigating the SCN intrinsic growth rate

Julkaistu: 10 heinäkuu 2018 kirjoittaja: Bastiaan Bak Category: IT development and operations

a while ago, we had a warning about the intrinsic growth of the SCN (system change number) in Oracle 12.2 database alert file. Tilanne toistui useita kertoja muutaman viikon sisällä.

”varoitus: SCN: n luontainen kasvunopeus on ollut jatkuvasti
suurempi kuin järjestelmän oletusarvo 16384 sekunnissa viimeisten 60 minuutin ajan.
nykyinen SCN luontainen kasvunopeus on 25867 / s., zas 200fffff!
nykyinen SCN-arvo on 46747726691, SCN-Compat-arvo on 1 ”

ensireaktioni oli, että SCN: t liittyvät pysyviin toimituksiin, joten joko tietokannan kuormitus oli erittäin suuri tai sovelluslogiikkaa pitäisi muuttaa. Toinen mahdollisuus oli, että toimitus tehtiin jokaisen päivityksen jälkeen sen sijaan, että olisi käytetty batch-toimituksia.

se osoittautui hieman monimutkaisemmaksi kuin odotin. Mistä katsot, kun haluat löytää SCN: n ja toimitusten välisen suhteen? Kuinka vakava varoitus on? Tämä blogi tulee olemaan noin eri tavoin olen tutkinut tätä ongelmaa ja tunnistettu mahdollisia vaikutuksia.

Oracle Support notes

varoitustiedostosta voi ensimmäisenä etsiä tietoa varoituksista Oraclen tukisivuilta. Löysin useita aiheeseen liittyviä muistiinpanoja:

  • ORA-19706 ja siihen liittyvät Varoituslokiviestit (Doc ID 1393360.1)
    tämä huomautus viittaa siihen, että varsinainen viesti on spesifinen tietokannan versioon 12.2, mutta vanhemmissa versioissa saattaa olla samanlaisia varoituksia, kuten ”Warning: SCN headroom for this database is only nn days!”
    jos havaitset hälytyslokiviestin, kuten minkä tahansa näistä merkinnöistä, sinun on noudatettava ID 1388639.1: n ohjeita ja kirjattava palvelupyyntö Oraclen tuella.
    kerättävät todisteet raportoitaessa ”High SCN rate” – ongelmista Oracle-tuelle (Doc ID 1388639.1)
  • tämä huomautus antaa tietoa siitä, mitä tietoja sinun tulee toimittaa kirjatessasi palvelupyyntöä.
  • System Change Number (SCN), Headroom, Security and Patch Information (Doc ID 1376995.1)
    tämä huomautus antaa lisätietoja SCN: n käytöstä. System change number (SCN) on Oraclen tietokannan käyttämä looginen sisäinen aikaleima. SCNs Tilaa tapahtumia, jotka tapahtuvat tietokannassa. Tietokanta käyttää SCNs: ää kyselyihin ja muutosten seuraamiseen. Kun tapahtuma sitoutuu, tietokanta tallentaa tämän toimituksen SCN: n.
    on yläraja sille, montako SCN: ää Oraclen tietokanta voi käyttää. Raja on tällä hetkellä 281 biljoonaa (2^48) SCN-arvoa.
    koska on olemassa yläraja, on tärkeää, että kaikista tietystä Oraclen tietokannasta ei lopu saatavilla olevat SCN: t.
    lapussa kerrotaan myös, milloin varoitus nostetaan. Oraclen tietokanta laskee” ei saa ylittää ” – rajan niiden SCN: ien määrälle, joita tietokanta voi tällä hetkellä käyttää, perustuen vuodesta 1988 lähtien kerrottuun sekuntimäärään 16384: llä. Näin varmistetaan, että Oracle tietokannat säännöstellä SCNs ajan.

kuinka vakava tämä varoitus on?

varoitusta nostetaan 2^14 = 16384 SCNs sekunnissa viimeisten 60 minuutin ajan.
suurin SCN on 2^48 = 281.474.976.710.656.

16348 SCN: n sekuntivauhdilla meillä on 2^(48-14) sekuntia eli 544 vuotta aikaa saavuttaa tuo maksimi. Sen pitäisi riittää normaalitilanteessa, mutta yläraja 2^48 on vain suurin itseisarvo, jonka tietokanta voi tallentaa.
raja liittyy myös sekuntimäärään vuodesta 1988 lähtien. Raja 2^48 on maksimi vuonna 2532 (1988+544). Mutta vuonna 2018 maksimi on (2018-1988)*365*24*60*60*2^14 = 1.550.057.472.000.

varoitusta ei tule jättää huomiotta. Kun saavutat rajan saat ora-600 virheitä, mutta kun saavutat absoluuttisen ylärajan SCN tietokanta vain lakkaa toimimasta.

hyvä uutinen on, että meidän tilanteessamme varoituksen mukaan SCN: n kasvuvauhti oli 25867 sekunnissa kyseisenä tiettynä tuntina, joten sillä tunnilla tulimme hieman lähemmäs (25867-16384=9483) rajaa. Emme tule lähelle rajaa joka tunti; normaali kasvunopeus on pienempi kuin 16384.

Oracle Support

soitimme Oracle Supportille, ja he kertoivat Oraclen kehityksen toimivan parhaillaan tämän asian parissa.
Oraclen tuki vahvisti, että SCN: n pääntila näyttää hyvältä. AWR-raportin perusteella Oraclen tuki huomasi suuren määrän toimituksia ja ehdotti, että sovellustiimi tarkistaisi toimitusten koon kasvattamalla.

tutkimus AWR

varoitustiedoston varoitus kertoi, että SCN: n luontainen kasvunopeus on ollut jatkuvasti suurempi kuin järjestelmän oletusarvo: 16384 sekunnissa viimeisten 60 minuutin ajan. Jos katsomme tunnin aikataulua, AWR-raportti voisi olla hyvä paikka aloittaa. Meillä on AWR määritetty tekemään tilannekuvia tunnin välein.

AWR-raportissa huomasin, että käyttäjien toimitusten määrä oli 210 sekunnissa. Kyllä, se on paljon toimituksia, mutta se ei ole kovin erilainen kuin normaali kuormitus tämän tietokannan. Ja jos toimitus liittyy SCN: ään, se on myös paljon pienempi kuin 16384 sekunnissa.

AWR-raportti sisälsi myös ADDM-havainnon: Waits on event ”log file sync”, kun taas COMMIT-ja ROLLBACK-operaatiot kuluttivat merkittävää tietokantaaikaa. Tutki sovelluslogiikkaa COMMIT-toimintojen määrän mahdollista vähentämistä kasvattamalla transaktioiden kokoa.
myös Oraclen tuki ehdotti tätä lisähuomautusten vähentämistä. Minun näkökulmastani se ei kuitenkaan ollut kovin korkea.

lyhyempi aikaväli

koska AWR ei auttanut minua löytämään syytä, minun piti tutkia lyhyempi aikaväli. Halusin tietää tarkemman aikataulun, jotta voisin laatia ASH-raportin. Tuhkan oletusarvo on 15 minuuttia.
joten seuraava haaste oli löytää 15 minuutin aikataulu, jossa SCN: n kasvuvauhti oli suurin.
Doc ID 1388639.1 ehdotti kyselyä v$archived_log. Tämä näkymä sisältää tiedot kaikista tietokannan lokikytkimistä, mukaan lukien aikaleima ja SCN. Vaikka voisit kartoittaa aikaleimat SCNs, se ei ole oikeastaan parempi kuin AWR raportti. Olemme edelleen kiinni satunnainen aikaleimat; tässä tapauksessa aikaleima logswitch.

käyttämällä funktiota timestamp_to_scn

parempi tapa on käyttää funktiota timestamp_to_scn. Tämä funktio palauttaa SCN: n aikaleiman perusteella, kuten nykyisen aikaleiman:

  1. SQL> valitse aikaleima_to_scn (sysdate) duaalista ;
  2. TIMESTAMP_TO_SCN(SYSDATE)
  3. -------------------------
  4. 91903104563
  5. SQL>

seuraava askel oli tehdä luettelo aikaleimoista yhdessä vastaavan SCN: n ja vastaavan SCN: n ylärajan kanssa, joka perustuu vuodesta 1988 lähtien kerrottuun sekuntimäärään 16 384: llä.

tämä näyttää viimeisen päivän aikaleimat ja SCN: t:

  1. valitse sysdate - (rownum/24) datetimestamp
  2. , aikaleima_to_scn(sysdate - (rownum / 24)) SCN
  3. , ((sysdate - (rivi 24) - to_date ("01-01-1988", "pp-kk-vvvv' ))
  4. * 24 * 60 * 60 * 16384 ylä_lmt
  5. DUAALISTA
  6. yhdistä rivinummella <= 24
  7. /
  1. DATETIMESTAMP SCN UPPER_LMT
  2. ------------------- -------------------- --------------------
  3. 09-07-2018-13:23:39 95423916508 15780233527296
  4. 09-07-2018-12:23:39 95380086165 15780174544896
  5. 09-07-2018-11:23:39 95338871931 15780115562496
  6. 09-07-2018-10:23:39 95303437600 15780056580096
  7. 09-07-2018-09:23:39 95265573942 15779997597696
  8. 09-07-2018-08:23:39 95226645452 15779938615296
  9. 09-07-2018-07:23:39 95186822906 15779879632896
  10. 09-07-2018-06:23:39 95147382509 15779820650496
  11. 09-07-2018-05:23:39 95115474008 15779761668096
  12. 09-07-2018-04:23:39 95079712219 15779702685696
  13. 09-07-2018-03:23:39 95041469231 15779643703296
  14. 09-07-2018-02:23:39 95006499794 15779584720896
  15. 09-07-2018-01:23:39 94975060529 15779525738496
  16. 09-07-2018-00:23:39 94945771055 15779466756096
  17. 08-07-2018-23:23:39 94907451372 15779407773696
  18. 08-07-2018-22:23:39 94875158341 15779348791296
  19. 08-07-2018-21:23:39 94838756696 15779289808896
  20. 08-07-2018-20:23:39 94800190958 15779230826496
  21. 08-07-2018-19:23:39 94757984611 15779171844096
  22. 08-07-2018-18:23:39 94724548846 15779112861696
  23. 08-07-2018-17:23:39 94685506947 15779053879296
  24. 08-07-2018-16:23:39 94646644945 15778994896896
  25. 08-07-2018-15:23:39 94605003069 15778935914496
  26. 08-07-2018-14:23:39 94572205685 15778876932096
  27. 24 rivit valittu.

nykyinen SCN on noin 0,57 prosenttia nykyisestä ylärajasta.

parhaan SCN-arvon löytäminen

tämän idean pohjalta loin kyselyn, joka antaa minulle 15 minuutin aikajakson, jossa SCN-arvot ovat kasvaneet eniten viimeisen 3 päivän aikana.

joka minuutti alkaa uusi aikataulu, ja koska meillä on 1440 minuuttia päivässä, meillä on 4320 aikataulua tutkittavana. Jokaiselle niistä meidän on laskettava SCN: n kasvu kyseisen 15 minuutin määräajan kuluessa.

haluamme näyttää vain huipputulokset, tässä tapauksessa vain aikavälit, joissa nopeus on yli 14000 sekunnissa.

  1. ALTER SESSION SET nls_date_format= "MM / DD / YY HH24: MI" ;
  2. datelistalla nimellä
  3. ( valitse sysdate - (rownum/1440) - (15/1440) starttiaika -- 15 minuutin aikaväli
  4. , sysdate - (rownum/1440) endtime
  5. DUAALISTA
  6. yhdistä rivinummella <= (3*1440) -- 3 päivien historia
  7. )
  8. valitse starttiaika
  9. , endtime
  10. , aikaleima_to_scn (endtime) - aikaleima_to_scn (starttime) scngrowth
  11. , round ((timestamp_to_scn (endtime) - timestamp_to_scn (starttime)) /
  12. (((24*60*60)*(endtime-starttime )))) scnrate
  13. DATALISTALTA
  14. WHERE round ((timestamp_to_scn (endtime) - timestamp_to_scn (starttime)) /
  15. (((24*60*60)*(endtime-starttime )))) >= 14000
  16. tilaa 4 DESC
  17. /
  1. alkamisaika päättymisaika SCNGROWTH SCNRATE
  2. -------------- -------------- -------------------- --------------------
  3. 07/06/18 18:09 07/06/18 18:24 12761928 14180
  4. 07/07/18 05:20 07/07/18 05:35 12742537 14158
  5. 07/09/18 13:59 07/09/18 14:14 12705077 14117
  6. 07/09/18 12:57 07/09/18 13:12 12672507 14081
  7. 07/09/18 07:06 07/09/18 07:21 12654287 14060

niin, nyt olemme löytäneet (joskus päällekkäisiä) 15 minuutin aikaväleillä korkein SCN korko (SCN kasvua sekunnissa) viimeisen 3 päivää. Ja niissäkin aikakehyksissä SCN-korko on vielä alle 16384. Ei varoituksia hälytystiedostossa tällä viikolla….

suoritettaessa ASH-raporttia

yllä olevassa kyselyssä käyttämäni päivämäärämuoto on sama kuin ASH-raportissa, joten voit kopioida/liittää alkamisajan. Ajaksi tulemme 15 minuuttia.

  1. SQL> @ @ $ORACLE_HOME/rdbms/admin / ashrpt.sql
  2. TUHKANÄYTTEET tässä työmäärässä arkiston skeemassa
  3. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4. vanhin saatavilla oleva TUHKANÄYTE: 01-heinäkuu-18 00:00:01
  5. viimeisin TUHKANÄYTE saatavilla: 09-heinäkuu-18 14:18:58
  6. TUHKAPÖYTÄKIRJAN laatimisajankohta
  7. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  8. Anna raportin alkamisaika:
  9. -- kelvolliset syöttömuodot:
  10. -- absoluuttisen alkamisajan määrittäminen:
  11. -- ] HH24: MI
  12. -- esimerkkejä: 02/23/03 14:30:15
  13. -- 02/23 14:30:15
  14. -- 14:30:15
  15. -- 14:30
  16. -- suhteellisen alkamisajan määrittäminen: (aloita merkillä' -')
  17. -- - MI
  18. -- esimerkkejä: -1:15 (SYSDATE - 1 h 15 min)
  19. -- -25 (SYSDATE-25 min)
  20. oletusarvo -15 min
  21. anna arvo BEGIN_TIMELLE: 07/06/18 18:09
  22. raportin alkamisaika määritelty: 07/06/18 18:09
  23. Anna kesto minuutteina alkamisajasta alkaen:
  24. oletus: SYSDATE-begin_time
  25. paina Enter analysoidaksesi ajankohtaan asti
  26. Anna duraation arvo: 15
  27. raportin kesto määritelty: 15
  28. käyttämällä 06-heinä-18 18: 09: 00 raportin alkamisaika
  29. käyttäen 06-heinä-18 18:24:00 kuin raportin päättymisaika
  30. Anna raportin nimi
  31. ~~~~~~~~~~~~~~~~~~~~~~~
  32. raportin oletustiedoston nimi on ashrpt_1_0706_1824.html. Tämän nimen käyttäminen,
  33. paina <palauta> jatkaaksesi, muuten syötä vaihtoehto.
  34. anna arvo raportin_nimelle:
  35. käyttäen raporttinimeä ashrpt_1_0706_1824.html
  36. yhteenveto kaikista käyttäjän syötteistä
  37. -------------------------
  38. muoto: HTML
  39. DB Id : 2019395491
  40. Inst num : 1
  41. alkamisaika: 06-heinäkuu-18 18:09:00
  42. loppuaika: 06-heinä-18 18:24:00
  43. raon leveys: oletus
  44. Raportoikaa tavoitteista : 0
  45. raportin nimi : ashrpt_1_0706_1824.html

SCN: n löytäminen AWR: stä

AWR-raportti ei näyttänyt meille paljoakaan tietoa nykyisestä SCN: stä, mutta siinä on joitain tietoja kasvunopeudesta, jos tiedät mistä sen löytää.

kohdasta ” Instance Activity Stats ”löydät”calls to kcmgas” – puhelujen määrän. Oraclen dokumentaatiossa tätä kuvataan ”soittojen lukumääräksi rutiininomaiseen KCMGAS: iin uuden SCN: n saamiseksi”.

näiden puhelujen arvo sekunnissa AWR-raportissa on hyvin lähellä SCN-arvoa, joka on laskettu timestamp_to_scn-funktiolla.

V$SESSTAT view

the number of ”calls to kcmgas” used to create a new SCN can also found in the views V$SESSTAT and V$SYSSTAT.

Voimme käyttää V$SESSTATIA löytääksemme istuntoja, jotka aiheuttavat suuren SCN-nopeuden. Voimme myös testata vaikutusta SCN: n määrään erityisiä toimia.

esimerkiksi, kun teen valinnan Isolla pöydällä, joka on myös muiden istuntojen käytössä, istuntoni tekee toiset 7 puhelua kcmgas: iin. Kyselyni aiheuttaa suuremman SCN: n. Tämä johtuu tietokannan lukemisesta, joka käyttää myös SCN: ää.

  1. SQL> CONNECT < user> / < pass>@< service>
  2. yhteys.
  3. SQL> valitse ses.arvo
  4. alkaen v$sesstat ses
  5. , v$statname stat
  6. sinne heti.tilasto#=ses.tilasto#
  7. ja ses.sid IN (valitse Sid alkaen v$mystat)
  8. ja heti.name = "puhelut kcmgas: iin'
  9. /
  10. arvo
  11. --------------------
  12. 2
  13. SQL> valitse lukumäärä (*) mybigtablesta ;
  14. lukumäärä(*)
  15. --------------------
  16. 12198814
  17. SQL> valitse ses.arvo
  18. alkaen v$sesstat ses
  19. , v$statname stat
  20. sinne heti.tilasto#=ses.tilasto#
  21. ja ses.sid IN (valitse Sid alkaen v$mystat)
  22. ja heti.name = "puhelut kcmgas: iin'
  23. /
  24. arvo
  25. --------------------
  26. 9
  27. SQL>

vertaamalla SCN-ja commit rate

kanssa v$SESSTAT voimme kysellä tilastoja kaikista tietokantaan tällä hetkellä liitetyistä istunnoista. Näin voimme löytää istuntoja, jotka ovat vastuussa korkea SCN korko. Voimme verrata tätä istunnon toimitusasteeseen.

alla olevan kyselyn tulokset osoittivat, että suuri SCN-nopeus johtui Tietokannassamme pääasiassa taustaprosesseista. Useimpien käyttäjien istunnoissa on suhde korkean SCN-nopeuden ja korkean toimitusnopeuden välillä, Tausta-istunnoissa toimitusnopeus on aina tyhjä.

  1. valitse ses.sid
  2. , dekoodaus(ses.käyttäjätunnus, NULL, 'Tausta', 'käyttäjä') session_type
  3. , (sysdate-logon_time) * 24 * 60 * 60 connect_seconds
  4. , sstat1.arvo SCN#
  5. , sstat2.arvo toimitus#
  6. , kierros (sstat1.arvo / ((sysdate-logon_time ) * 24 * 60 * 60),2) _arvosta
  7. , kierros (sstat2.arvo / ((sysdate-logon_time ) * 24 * 60 * 60),2) _toimita
  8. alkaen v$sesstat sstat1
  9. , v$sesstat sstat2
  10. , v$statname sn1
  11. , v$statname sn2
  12. , v$istunto ses
  13. missä sstat1.tilasto# = sn1.tilasto#
  14. ja sstat2.tilasto# = sn2.tilasto#
  15. ja sn1.name = "puhelut kcmgas: iin'
  16. ja sn2.name = "käyttäjä toimittaa'
  17. ja ses.sid = sstat1.sid
  18. ja ses.sid = sstat2.sid
  19. tilaa 6 DESC
  20. /
  21. SID SESSION_TY CONNECT_SECONDS SCN# COMMIT# SCN_RATE COMMIT_RATE
  22. ---------- ---------- --------------- ---------- ---------- ---------- -----------
  23. 8478 Tausta 459572 214506344 0 466.75 0
  24. 7551 Tausta 452395 209729934 0 463.6 0
  25. 3776 Tausta 290389 133863489 0 460.98 0
  26. 8496 Tausta 121201 55685740 0 459.45 0
  27. 8729 Tausta 286773 128180386 0 446.98 0
  28. 12009 Tausta 290392 128867329 0 443.77 0
  29. 13173 Tausta 196775 87268032 0 443.49 0
  30. 12004 Tausta 103166 45681480 0 442.8 0
  31. 8735 Tausta 275980 121563094 0 440.48 0
  32. 3096 Tausta 430810 185436599 0 430.44 0
  33. 8027 Tausta 95990 40912187 0 426.21 0
  34. 7529 Tausta 193218 81367643 0 421.12 0
  35. 2370 Tausta 527978 219521415 0 415.78 0
  36. 14604 Tausta 283216 117052382 0 413.3 0
  37. 14132 Tausta 113965 46586388 0 408.78 0
  38. 7552 Tausta 294009 119775077 0 407.39 0
  39. 13172 Tausta 182423 73865595 0 404.91 0
  40. 14592 Tausta 74414 29767705 0 400.03 0
  41. 3802 Tausta 268804 107486102 0 399.87 0
  42. 9910 Tausta 117582 46596720 0 396.29 0
  43. 12021 Tausta 49182 19321676 0 392.86 0
  44. 974 Tausta 160816 59996495 0 373.08 0
  45. 12723 Tausta 74450 25455559 0 341.91 0
  46. 3310 Tausta 193215 65915175 0 341.15 0
  47. 12963 Tausta 49179 15687084 0 318.98 0
  48. 6111 Tausta 3584090 1031139557 0 287.7 0
  49. 6829 käyttäjä 303 1267 1123 4.18 3.71
  50. 9665 käyttäjä 904 1845 1691 2.04 1.87
  51. 8022 käyttäjä 898 1677 1520 1.87 1.69
  52. 3323 käyttäjä 898 1406 1260 1.57 1.4
  53. 2839 käyttäjä 7503 10822 9813 1.44 1.31
  54. 11060 käyttäjä 3892 5334 4781 1.37 1.23
  55. 13184 käyttäjä 1765 2359 2038 1.34 1.15
  56. 9199 käyttäjä 898 1135 935 1,26 1.04
  57. 2130 KÄYTTÄJÄ 8105 9548 8518 1.18 1.05
  58. 11525 KÄYTTÄJÄ 898 1054 944 1.17 1.05
  59. 6130 KÄYTTÄJÄ 3895 4453 4199 1.14 1.08
  60. 8012 KÄYTTÄJÄ 7503 8576 7774 1.14 1.04
  61. 4497 KÄYTTÄJÄ 898 962 882 1,07 .98
  62. 5201 käyttäjä 7220 7551 6226 1,05 .86
  63. 11317 käyttäjä 12906 13371 11997 1,04 .93
  64. 1979 rivit valittu.

johtopäätös

ole tietoinen siitä, että SCN: llä on rajansa, joten kun löydät varoituksia varoitustiedostosta, sinun on tutkittava ongelma. Jos löydät ongelman, sinun pitäisi työskennellä Oraclen tuella. Lataamalla tietoja he voivat tarkistaa, onko nykyisen ja suurimman SCN: n välillä tarpeeksi tilaa.

ongelmat voivat johtua viasta, kuten 12371955: kuuma varmuuskopiointi voi aiheuttaa SCN: n kasvunopeuden kasvun, joka johtaa ORA-600 virheeseen (Doc ID 12371955.8).

jos haluat löytää tarkan ajankohdan, jolloin SCN: t kasvavat voimakkaasti, sinun on muunnettava aikaleimat SCN: ksi. Saat parhaat tulokset käyttämällä toimintoja SCN_TO_TIMESTAMP ja TIMESTAMP_TO_SCN.

suuri toimitusaste liittyy aina käyttäjäprosesseihin, mutta SCN: t liittyvät myös taustaprosesseihin. Jopa istunnot, jotka eivät toimita, voivat vaikuttaa SCN: ään.

Bastiaan Bak

tekijästä Bastiaan Bak

DBA yli 15 vuoden kokemuksella. Kokemusta eri aloilla, useita moduuleja. Sisältää: Oracle database, Oracle RAC, Oracle EBS ja PL/SQL.

More posts by Bastiaan Bak

Vastaa

Sähköpostiosoitettasi ei julkaista.