sql >> Database >  >> RDS >> Oracle

Laat je niet voor de gek houden door de streams pool

Soms is conventionele wijsheid niet zo conventioneel of gewoon. Als voorbeeld kunnen DBA's denken dat de STREAMS-pool uitsluitend is gereserveerd voor streams-processen. Dat is niet het geval, aangezien andere Oracle-hulpprogramma's, zoals Data Pump en GoldenGate, die pool gebruiken. Natuurlijk zal de keuze voor dynamisch beheer automatisch het benodigde geheugen toewijzen wanneer hierom wordt gevraagd, maar dat geheugen moet ergens vandaan komen. Oracle zal 'stelen' wat het nodig heeft uit de buffercache en het zal niet onmiddellijk worden vervangen. Laten we eens kijken naar een voorbeeld dat dit bewijst, met behulp van Data Pump.

Het 'slachtoffer' zal een Oracle 12.1.0.2-database zijn die is geconfigureerd met de streams_pool_size ingesteld op 0 (aangezien Streams niet is geconfigureerd, is de verwachting dat de pool niet zal worden gebruikt) en Automatisch gedeeld geheugenbeheer geconfigureerd (de parameters sga_target en sga_max_size zijn ingesteld op niet-nulwaarden):

SQL> --SQL> -- De streams-pool is NIET alleen forSQL> -- StreamsSQL> --SQL> -- Data pump en GoldenGate gebruiken beideSQL> -- itSQL> --SQL> -- Geen grootte instellen voor de streamsSQL> -- pool kan problemen veroorzaken wanneer het isSQL> -- eerst gebruikteSQL> --SQL> --SQL> -- Kijkend naar de database parametersSQL> -- controleer de sga parametersSQL> -- voor sizingSQL> --SQL> toon parameter sgaNAME TYPE WAARDE ------------------------------------ -------- --- ------------------------------lock_sga boolean FALSEpre_page_sga boolean TRUEsga_max_size groot geheel getal 600Msga_target groot geheel getal 600Munified_audit_sga_queue_size geheel getal 1048576

Bij het controleren van de V$SGA_DYNAMIC_COMPONENTS-weergave op componenten met een huidige grootte die niet nul is, worden de volgende resultaten geretourneerd:

SQL> SQL> kolomcomponentformaat a29SQL> stel linesize 300 numwidth 12SQL in> SQL> selecteer component, current_size, min_size, max_size, user_specified_size user_spec_sz, 2 oper_count, last_oper_type, last_oper_mode, last_oper_time, granule_size_size_components 4ga waar huidige> 0;COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE USER_SPEC_SZ OPER_COUNT LAST_OPER_TYP LAST_OPER LAST_OPER GRANULE_SIZE----------------------------- ------- ---- ------------ ------------ ------------ ---------- -- ------------- --------- -------- ------------gedeeld zwembad 176160768 146800640 176160768 0 6 GROW UITGESTELD 15-OKT-19 4194304groot zwembad 8388608 8388608 125829120 0 1 SHRINK UITGESTELD 15-OKT-19 4194304java zwembad 4194304 4194304 4194304 0 0 STATISCH 4194304DEFAULT buffercache 411041792 301989888 419430400 0 8 SHRINK UITGESTELD 15-OCT-19 4194304Gedeelde IO-pool 20971520 0 20971520 0 1 ONMIDDELLIJK GROEIEN 15-OCT-19 4194304SQL> 

Controleren of de streams_pool_size is ingesteld op 0:

SQL> SQL> --SQL> -- Controleer of de streams-pool is ingesteld op SQL> -- 0SQL> --SQL> toon parameter streamsNAME TYPE VALUE---------------- -------------------- ---------- ------------------- -----------streams_pool_size groot geheel getal 0SQL> 

Er wordt een Data Pump-export uitgevoerd en daarna worden de dynamische geheugencomponenten op grootte gecontroleerd:

SQL> SQL> --SQL> -- Voer een Data Pump export taskSQL> uit -- en kijk wat er gebeurt met de streamsSQL> -- pool sizeSQL> --SQL> !expdp parfile=expdp_test.parSQL> SQL> kolom component formaat a29SQL> set linesize 300 numwidth 12SQL> SQL> selecteer component, current_size, min_size, max_size, user_specified_size user_spec_sz, 2 oper_count, last_oper_type, last_oper_mode, last_oper_time, granule_size 3 van v$sga_dynamic_components> OPER_COUNT LAST_OPER_TYP LAST_OPER LAST_OPER GRANULE_SIZE----------------------------- ----------- ---- -------- ------------ ----------- ------------ ------ ------- --------- --------- ------------gedeeld zwembad 197132288 146800640 197132288 0 11 ONMIDDELLIJK GROEIEN 15-OKT- 19 4194304groot zwembad 8388608 8388608 125829120 0 1 SHRINK UITGESTELD 15-OKT-19 4194304java-pool 4194304 4194304 4194304 0 0 STATIC 4194304streams-pool 8388608 0 8388608 0 2 ONMIDDELLIJK GROEIEN 15-OCT-19 4194304DEFAULT buffercache 381681664 301989888 419430400 0 15 ONMIDDELLIJK krimpen 15-OCT-19 419715304 0 Gedeeld 1 IO 20 20 ONMIDDELLIJK GROEIEN 15-OCT-19 41943046 rijen geselecteerd.SQL> 

Merk op dat de STANDAARD buffercachegrootte werd teruggebracht tot 381681664 van een initiële instelling van 411041792, deels om de Streams-pool te 'financieren'. Om dat idee te testen, wordt de streams_pool_size ingesteld op 8M (de waarde die Oracle het dynamisch heeft ingesteld) en om de tests zo gelijk mogelijk te maken, wordt de database afgesloten en gestart:

SQL> SQL> --SQL> -- Stel de streams_pool_size in op de huidigeSQL> -- valueSQL> --SQL> -- Sluit de databaseSQL> af en start deze op --SQL> verander systeemset streams_pool_size=8M scope=spfile; Systeem gewijzigd.SQL> SQL> onmiddellijk afsluiten Database gesloten. Database gedemonteerd.ORACLE-instantie afgesloten.SQL> startupORACLE-instantie gestart. Totale systeemwereldgebied 629145600 bytes Vaste grootte 2927528 bytes Variabele grootte 289408088 bytes Databasebuffers 331350016 bytesRedo-buffers 5459968 bytes Database geopend pre> 

De dynamische geheugenparameters gecontroleerd op startwaarden:

SQL> SQL> --SQL> -- Controleer dynamische grootte van SGA-componentenSQL> --SQL> kolomcomponentformaat a29SQL> stel linesize 300 in numwidth 12SQL> SQL> selecteer component, huidige_grootte, min_grootte, max_grootte, user_specified_size user_spec_sz, 2 oper_count, last_oper_type, last_oper_mode, laatste_oper_time, granule_size 3 van v$sga_dynamic_components 4 waar current_size> 0;COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE USER_SPEC_SZ OPER_COUNT LAST_OPER_TYP LAST_OPER_TYP LAST_OSIPER LAST_OSIZE --------- ------------ ------------ ------------ ----- ------- ------------ ------------- --------- --------- ------------gedeeld zwembad 155189248 146800640 155189248 0 2 ONMIDDELLIJK GROEIEN 15-OKT-19 4194304groot zwembad 125829120 125829120 125829120 0 0 STATISCH 4194304java zwembad 4194304 4194304 419430 4 0 0 STATIC 4194304streams pool 8388608 8388608 8388608 8388608 0 STATIC 4194304DEFAULT buffercache 327155712 327155712 335544320 0 2 SHRINK ONMIDDELLIJKE 15-OCT-19 4194304SQL> SQL> --SQL> -- Verwijder de vorige dumpbestandenS>QL> --SQL /rm /u01/app/oracle/admin/orcl/dpdump/scott.*

Voer de Data Pump-taak opnieuw uit met de aangepaste geheugenpoolinstellingen:

SQL> SQL> --SQL> -- Voer een Data Pump export taskSQL> uit -- en kijk wat er gebeurt met de streamsSQL> -- pool sizeSQL> --SQL> !expdp parfile=expdp_test.parSQL> SQL> kolom component formaat a29SQL> set linesize 300 numwidth 12SQL> SQL> selecteer component, current_size, min_size, max_size, user_specified_size user_spec_sz, 2 oper_count, last_oper_type, last_oper_mode, last_oper_time, granule_size 3 van v$sga_dynamic_components> OPER_COUNT LAST_OPER_TYP LAST_OPER LAST_OPER GRANULE_SIZE----------------------------- ----------- ---- -------- ------------ ----------- ------------ ------ ------- --------- --------- ------------gedeeld zwembad 197132288 146800640 197132288 0 12 ONMIDDELLIJK GROEIEN 15-OKT- 19 4194304groot zwembad 8388608 8388608 125829120 0 1 SHRINK UITGESTELD 15-OCT-19 4194304java-pool 4194304 4194304 4194304 0 0 STATIC 4194304streams-pool 8388608 8388608 8388608 8388608 0 STATIC 4194304DEFAULT buffercache 381681664 264241152 381681664 0 14 GROEIEN UITGESTELD 15-OCT-19 4194304Gedeelde IOT-pool 152071520 1 0 209715201520 19 41943046 rijen geselecteerd.SQL> 

Merk op dat de DEFAULT buffercache is vergroot, niet verlaagd zoals in het vorige voorbeeld. Er werd geen geheugen 'gestolen' uit de buffercache, dus de prestaties hadden geen last van de dynamische verschuiving van bronnen. Een mogelijk probleem bij het instellen van de streams_pool_size op 0 kan prestatievermindering zijn op het moment dat de streams-pool wordt toegewezen, omdat de buffercache een krimp onderging terwijl de streams-pool groeide. Dit kan vooral merkbaar zijn in systemen waar de gebruikersbelasting in het begin nogal zwaar is.

Zoals eerder vermeld, gebruikt GoldenGate ook de streams-pool en kan, vanwege de zware vastleggingsactiviteit op het moment dat een extractieproces start, mogelijk een alarmerende verslechtering van de service vertonen die aanhoudt totdat het extractieproces zijn opstartactiviteiten heeft voltooid. [Andere processen die door GoldenGate zijn voortgebracht, dragen bij aan de vertraging, zoals een globale synchronisatie van logbestanden om vastgelegde gegevens naar de opnieuw uit te voeren logs.] Eén systeem heeft zo veel geleden toen een extractieproces werd gestart dat de aanmeldingen van het besturingssysteem niet konden worden voltooid in de toegewezen tijd, waardoor monitoringsoftware van derden rapporteerde dat de databases die op die server draaiden niet langer beschikbaar waren. Door de streams_pool_size in te stellen op een waarde die niet nul is, werd een grote bijdrage geleverd aan het verbeteren van de algehele prestaties toen de extractieprocessen werden gestart.

Algemene kennis kan een tweesnijdend zwaard zijn; voor elk geval waarin algemene kennis waar is, kunnen er een of meer gevallen zijn waarin dit niet het geval is. De enige echte oplossing is om dergelijke 'wijsheid' te testen om de nauwkeurigheid ervan te verifiëren. Het is veel beter om een ​​test-, ontwikkelings- of 'sandbox'-systeem met dergelijke onderzoeken te beïnvloeden in plaats van dergelijke 'kennis' als 'evangelie' te nemen om te ontdekken dat de veronderstellingen waarop die 'wijsheid' was gebaseerd onjuist waren. Weten is beter dan raden; een beetje tijd besteed aan een onderzoek kan enorme voordelen opleveren als het tijd is om een ​​nieuw proces met Oracle te implementeren.

# # #

Bekijk artikelen van David Fitzjarrell


  1. SQL BESTAAT-operator voor beginners

  2. Van rol wisselen na verbinding met database

  3. Hoe u SQLite-tools kunt downloaden en installeren

  4. Hoe krijg ik een waarde uit de laatst ingevoegde rij?