Oracle upg adm 9i Claude DA COSTA Chap 14 Memory Managt Page 1/18 MEMORY MANAGEMENT Automated SQL exec Allocation dynamique des mémoires xxx_area_size
Oracle upg adm 9i Claude DA COSTA Chap 14 Memory Managt Page 2/18 AUTOMATED SQL EXEC Dispositif : Automated SQL Execution Automatic Management Objectifs : Permettre une allocation DYNAMIQUE et SOUPLE de mémoire utilisée pour les opérations de tri, hash join, merge de bitmap et création de segments de bitmap. Principe : Fixer une cible maximum d'espace mémoire vis à vis de laquelle Oracle allouera et désallouera pour les opérations exigeant des manipulations en mémoire (tris, bitmap merge et create, hash joins). Oracle décidera, en fonction du nombre et du volume des opérations courantes, de la taille attribuée aux nouveaux segments mémoire (work areas) évitant ou non l'utilisation du disque. DYNAMIQUE SOUPLE Oracle alloue des segments de mémoire de taille variable adaptée au volume nécessaire pour l'opération. Ce sont des Work-Area, qui se situent dans la Run Time Area La taille des segments de mémoire est décidée par Oracle, et juste contrainte par une valeur de paramètre d'initialisation. Mise en oeuvre : Demander à Oracle d'assurer la gestion dynamique des work areas Indiquer un seuil à ne jamais dépasser pour chaque segment alloué workarea_size_policy=automatic pga_aggregate_target=nm Le défaut de workarea_size_policy dépend de la présence ou de la valeur de pga_aggregate_target Précautions : Ce mécanisme ne peut être utilisé QUE POUR DES SESSIONS DEDIEES (dedicated sessions). Les "runtime" dont il est question sont bien celles qui appartiennent aux PGA dédiées, non situées en SGA.
Oracle upg adm 9i Claude DA COSTA Chap 14 Memory Managt Page 3/18 LE CONTROLE Les vues de monitoring et de contrôle (type désigne optimal, one-pass ou multi-pass): Nombres d'exécutions par type Nombres d'exécutions par type, et par curseur Quantités de mémoire prévues, réalisées et nombre de passes Pourcentages d'occupation de la PGA Quantités de mémoire allouée et utilisée par process _ACTIVE V$SQL_MEMORY_USAGE Obtenir la mémoire allouée et utilisée par un process utilisée maintenant allouée maintenant max allouée depuis naissance process pga_used_mem pga_alloc_mem pga_max_mem Obtenir des statistiques sur la mémoire allouée selon divers types Somme mémoire de toutes allocations Somme mémoire saturée de façon évitable (multipass) Somme mémoire saturée de façon inévitable (onepass) Somme mémoire optimale (non saturée) Juger de la performance : Bon Mauvais Obtenir des statistiques sur la mémoire utilisée par les curseurs ) (value) pour name: workarea memory allocated workarea executions - multipass workarea executions - onepass workarea executions - optimal 100 * optimal / (optimal + onepass + multipass) en PROGRESSION 100 * optimal / (optimal + onepass + multipass) en CHUTE (operation_type,total_executions,optimal_executions Obtenir un instantanné sur la mémoire utilisée par les process _ACTIVE(expected_size,actual_mem_used ) Suivre les consommations de mémoire PGA V$SQL_MEMORY_USAGE(value) pour name : Total PGA inuse% Total PGA used for auto% Maximum%one-pass
Oracle upg adm 9i Claude DA COSTA Chap 14 Memory Managt Page 4/18 LES NOTIONS DE "PASS" et OPTIMAL The size of a work area can be controlled and tuned. Generally, bigger work areas can significantly improve the performance of a particular operator at the cost of higher memory consumption. Ideally, the size of a work area is big enough that it can accommodate the input data and auxiliary memory structures allocated by its associated SQL operator. This is known as the optimal size of a work area. When the size of the work area is smaller than optimal, the response time increases, because an extra pass is performed over part of the input data. This is known as the one-pass size of the work area. Under the one-pass threshold, when the size of a work area is far too small compared to the input data size, multiple passes over the input data are needed. This could dramatically increase the response time of the operator. This is known as the multi-pass size of the work area. For example, a serial sort operation that needs to sort 10GB of data needs a little more than 10GB to run optimal and at least 40MB to run one-pass. If this sort gets less that 40MB, then it must perform several passes over the input data.
Oracle upg adm 9i Claude DA COSTA Chap 14 Memory Managt Page 5/18 STRUCTURE MEMOIRE ORACLE Défauts : large_pool_size 0 db_cache_size 48Mb rounded mult granul-size log_buffer max (512K,128K*NBCPUs) shared_pool_size platform 32b platform 64b 8Mb 64Mb rounded mult granul size MEMOIRE SGA DEDICATED PGA DEDICATED PGA DEDICATED PGA DEDICATED PGA si large_pool_size > 300 k DATA CACHE BUFFER REDO LOG BUFFER SHARED POOL LARGE POOL db_cache_size log_buffer shared_pool_size large_pool_size DICTIONARY CACHE LIBRARY CACHE Buffers for // exec + ctrl structure UGA SHARED SQL AREA SHARED PL/SQL AREA PRIVATE PRIVATE SQL SQL AREA AREA PRIVATE SQL SQL AREA AREA PERSISTENT AREA stack stack stack space space stack infos stack space space infos infos sessio space infos sessio sessio n BIND infos sessio n sessio n infosn n PERSISTENT AREA RUNTIME AREA RUN TIME AREA dynami dynamicall cally y acquired acquir ed
Oracle upg adm 9i Claude DA COSTA Chap 14 Memory Managt Page 6/18 GESTION AUTOMATIQUE DE LA PGA Jusqu'en 8i, la mémoire allouée pour les opérations de TRI MERGE DE BITMAPS MISE A JOUR DE BITMAPS HASH JOINS se faisait de façon statique, DANS UNE ZONE DE LA PGA APPELEE SQL WORK AREA à travers les paramètres SORT_AREA_SIZE CREATE_BITMAP_AREA_SIZE BITMAP_MERGE_AREA_SIZE la "WORK AREA" qui fait partie de la RUNTIME AREA qui appartient à la PRIVATE SQL AREA peut être localisée soit en PGA (dedicated mode) soit en SGA (Multithreaded mode) Dans la LARGE POOL (si large_pool_size > 300K) Dans la LIBRARY CACHE (si large_pool_size absent) ON S'INTERESSE LA UNIQUEMENT A LA PARTIE LOCALISEE DANS LES PGAs Avec Oracle 9i, Deux options sont offertes : workarea_size_policy = manual automatic continuer en mode classique, c'est à dire en fixant la taille de chaque zone faire assurer par Oracle même, la gestion "au mieux" de cette mémoire.
Oracle upg adm 9i Claude DA COSTA Chap 14 Memory Managt Page 7/18 GESTION AUTOMATIQUE DE LA PGA BIEN VOIR : le DEFAUT de workarea_size_policy dépend de la présence ou de la valeur de pga_aggregate_target WORKAREA_SIZE_POLICY= automatic manual PGA_AGGREGATE_TARGET=0M BIEN VOIR : positionner pga_aggregate_target porte le défaut de workarea_size_policy à auto "Alterable" aux niveaux SESSION et USER sort_area_size=nm bitmap_merge_area_size= nm zone de tri zone de tri zone de tri create_bitmap_area_size= nm Si WORKAREA_SIZE_POLICY =AUTOMATIC, alors PGA_AGGREGATE_TARGET représente une cible (par exemple, 2.5M), qui est une valeur max de mémoire utilisée pour les PGAs à ne jamais dépasser. Cette mémoire sera prise au détriment de la SGA. En cas de dépassement, Oracle constitue des data-pieces qu'oracle réparti (Spills) dans la mémoire temporaire (to temporary storage). BIEN VOIR : sort_area_size, hash_area_size, bitmap_merge_area_size et bitmap_create_area_size indiquent des tailles unitaires de segments mémoire pga_aggregate_target indique une taille globale à ne pas franchir pour tous ces segments mémoire (toutes ces "work areas").
Oracle upg adm 9i Claude DA COSTA Chap 14 Memory Managt Page 8/18 L'UTILISATION CLASSIQUE DE LA SQL WORK AREA def 8MB create_bitmap_area_size= nm def 1MB bitmap_merge_area_size= nm val rowid départ rowid fin val rowid départ rowid fin val rowid départ rowid fin mem use for bitmap création create_bitmap mem use for range scan bitmap_merge SORT_AREA_SIZE= infos session SQL WORK AREA zone de tri etat curseur stack space - infos sessions Mémoire consommée par des SQL WORKING AREAS UNTUNABLE_MEMORY_SIZE PGA dédiée Restant des memory areas SENSIBLE si DSS TUNABLE_MEMORY_SIZE
Oracle upg adm 9i Claude DA COSTA Chap 14 Memory Managt Page 9/18 SUIVI DE LA MEMOIRE : SYNOPTIQUE GENERAL pour l'instance Par PROCESS Par CURSEUR Par WORKAREA Nb OPTIMAL Nb ONEPASS Nb MULTIPASS value pour name := workarea executions - optimal value pour name := workarea executions - onepass value pour name:= workarea executions - multipass optimal_executions onepass_executions multipasses_executions Nb TOTAL total_executions Nb PASSES _ACTIVE number_passes % onepass V$SQL_MEMORY_USAGE value pour name:like maximum % one-pass% MEM USED pga_used_mem _ACTIVE actual_mem_used MEM ALLOC value pour name:= workarea memory allocated pga_alloc_mem MEM HWM pga_max_mem MEM TOTALE V$SQL_MEMORY_USAGE value pour name:like total_pga_inuse% _ACTIVE workarea_size MEM PREVUE _ACTIVE expected_size ESTIM OPTIMAL estimated_optimal_size ESTIM ONEPASS estimated_onepass_size
Oracle upg adm 9i Claude DA COSTA Chap 14 Memory Managt Page 10/18 STATISTIQUES SUR L'UTILISATION DE LA MEMOIRE (MONITORING "SPACE USAGE") V$SQL_MEMORY_USAGE value name "Total PGA inuse%" V$SQL_MEMORY_USAGE value name "Total PGA used for auto%" V$SQL_MEMORY_USAGE value name "Maximum % one-pass" BIEN VOIR : PGA used for auto représente la partie TUNEE en automatique PGA inuse représente la PGA totale, partie "tunable" comme partie "untunable" PGA_AGGREGATE_TARGET=nM c c
Oracle upg adm 9i Claude DA COSTA Chap 14 Memory Managt Page 11/18 MODELE DE REQUETE DE MONITORING "SPACE USAGE" NIVEAU INSTANCE Afin d'assurer de bonnes performances, il est recommandé au DBA de vérifier que la cible PGA reste supérieure à la taille mémoire requise pour un one-pass (transfert sur disque évitable). La requête suivante, qui peut être exécutée à intervalles réguliers, sert à suivre les consommations de mémoire PGA. select p.value pga_aggregate_target, pga_inuse, (pga_inuse - pga_auto) *100 / pga_inuse percent_untuned, pga_auto * 100 / pga_inuse percent_tuned, onepass_req from (select sum(case when name like 'Total PGA inuse%' then value else 0 end) pga_inuse, sum(case when name like 'Total PGA used for auto%' then value else 0 end) pga_auto, sum(case when name like 'Maximum % one-pass' then value else 0 end) onepass_req from v$sql_memory_usage ) mem_usage, v$parameter p where p.name ='pga_aggregate_target' ;
Oracle upg adm 9i Claude DA COSTA Chap 14 Memory Managt Page 12/18 CONTROLE DU THROUGHPUT (MONITORING "EXECUTIONS STATS") name "workarea memory allocated" name "workarea executions - optimal" name "workarea executions - onepass" name "workarea executions - multipass" statistic# statistic# statistic# statistic# class value class value class value class value workarea executions - optimal workarea executions - multipass workarea memory allocated BIEN VOIR : onepass : Dépassement évitable de Workarea multipass : Dépassement inéévitable de Workarea optimal : workarea a assuré entièrement son rôle (ex, tri entièrement contenu dans.) workarea executions - onepass SE P
Oracle upg adm 9i Claude DA COSTA Chap 14 Memory Managt Page 13/18 MODELE DE REQUETE DE MONITORING NIVEAU INSTANCE ("EXECUTIONS STATS") select trunc(( sum(case when name like 'work area executions - optimal' then value else 0 end) * 100) / ( sum(case when name like 'work area executions - optimal' then value else 0 end) + sum(case when name like 'work area executions - one pass' then value else 0 end) + sum(case when name like 'work area executions - multipass' then value else 0 end) ) optimal_percent from where name like 'work area executions - %' ; optimal_percent name="work area executions - optimal" name="work area executions - one pass" name="work area executions - multipass" (value 0) (value 0) (value 0) / + BON MAUVA IS Time
Oracle upg adm 9i Claude DA COSTA Chap 14 Memory Managt Page 14/18 CONTROLE DE LA MEMOIRE PGA ALLOUEE ET UTILISEE PAR UN PROCESS sid saddr active inactive killed V$SESSION paddr user# (ident user) serial# (serial number) OS spid serial# pid addr serial number pga_used_mem pga_alloc_mem pga_max_mem process ident OS mémoire utilisée sur le moment mémoire allouée sur le moment mémoire max allouée depuis naissance PGA_MAX_MEM PGA_ALLOC_MEM PGA_USED_MEM Bien voir : Par process On dispose des quantités de mémoire max allouée depuis la naissance du process allouée sur le moment utilisée sur le moment pid pga_max_mem pga_alloc_mem pga_used_mem
Oracle upg adm 9i Claude DA COSTA Chap 14 Memory Managt Page 15/18 SUIVI DE LA MEMOIRE : MODELE RELATIONNEL _ACTIVE _ACTIVE operation_type sort hash join group by bitmap merge bitmap create policy MANUAL AUTO active_time work_area_size expected_size actual_mem_used number_passes workarea_address sid sid sid sid sid sid operation_type sort hash join group by bitmap merge bitmap create policy MANUAL AUTO total_executions optimal_executions onepass_executions multipasses_executions estimated_optimal_size estimated_onepass_size serial# serial number address address address address address address nb fois WA active nb fois WA optimale nb fois WA one pass nb fois WA multipass sid sid sid sid sid sid saddr saddr saddr saddr saddr saddr V$SESSION V$SESSION V$SESSION paddr paddr paddr paddr paddr paddr active active active inactive active inactive inactive killed active killed active inactive inactive killed inactive killed killed user# (ident user) killed user# (ident user) user# serial# (ident (serial user) number) user# serial# (ident (serial user) number) user# serial# (ident (serial user) number) user# serial# (ident (serial user) number) serial# (serial number) serial# (serial number) pid pid pid pid pid pid addr addr addr addr addr addr OS OS spid ident OS spid OS OS ident OS spid serial# ident serial OS number spid serial# OS OS ident serial OS number spid serial# ident serial OS number spid serial# ident serial OS number pga_used_mem mémoire utilisée sur le moment serial# serial number pga_used_mem mémoire utilisée sur le moment serial# serial number pga_used_mem pga_alloc_mem mémoire mémoire utilisée allouée sur sur le le moment moment pga_used_mem pga_alloc_mem mémoire mémoire utilisée allouée sur sur le le moment moment pga_used_mem pga_alloc_mem mémoire pga_max_mem mémoire utilisée mémoire allouée sur max sur le allouée le moment moment depuis naissance process pga_used_mem pga_alloc_mem mémoire pga_max_mem mémoire utilisée mémoire allouée sur max sur le allouée le moment moment depuis naissance process pga_alloc_mem pga_max_mem mémoire mémoire allouée max sur allouée le moment depuis naissance process pga_alloc_mem pga_max_mem mémoire mémoire allouée max sur allouée le moment depuis naissance process pga_max_mem mémoire max allouée depuis naissance process pga_max_mem mémoire max allouée depuis naissance process
Oracle upg adm 9i Claude DA COSTA Chap 14 Memory Managt Page 16/18 CONTROLER L'UTILISATION DE LA MEMOIRE PAR CURSEUR operation_type sort hash join group by bitmap merge bitmap create address address address address address address policy MANUAL AUTO total_executions nb fois WA active optimal_executions nb fois WA optimale onepass_executions nb fois WA one pass multipasses_executions nb fois WA multipass estimated_optimal_size estimated_onepass_size serial# serial number select operation_type, optimal_executions * 100 / total_executions from where policy = 'AUTO' and optimal_executions > 0 order by operation_type ; "%cache" REMARQUE : Une ligne existe par curseur. Un curseur donnant lieu à de multiples exécutions, nous avons de multiples work areas allouées et désallouées, pour lesquelles contient des statistiques. REMARQUE : fournit infos équivalentes à V$SYSTAT, par CURSEUR
Oracle upg adm 9i Claude DA COSTA Chap 14 Memory Managt Page 17/18 AVOIR UN CLICHE SUR L'INSTANT, DES WORK AREAS ALLOUEES, VOIR LES SUR et SOUS ALLOUES BIEN VOIR : Les écarts entre prédiction Oracle et sur ou sous allocation s'expliquent par des changements soudains d'activité sid sid sid sid sid sid saddr saddr saddr saddr saddr saddr V$SESSION paddr paddr paddr paddr paddr paddr active active active inactive active inactive killed active inactive inactive killed active inactive killed killed inactive killed user# (ident user) killed user# (ident user) user# user# serial# serial# (ident (ident (serial (serial user) user) number) number) user# serial# (ident (serial user) number) user# serial# (ident (serial user) number) serial# (serial number) serial# (serial number) pid pid pid pid pid pid addr addr addr addr addr addr OS OS spid OSident OS spid ident OS spid serial# OS OS ident serial OS number spid serial# OS ident serial OS number spid serial# ident serial OS number spid serial# ident serial OS number serial# pga_used_mem serial number mémoire utilisée sur le moment pga_used_mem mémoire utilisée sur le moment serial# serial number pga_used_mem pga_alloc_mem mémoire mémoire utilisée allouée sur sur le le moment moment pga_used_mem pga_alloc_mem mémoire mémoire utilisée allouée sur sur le le moment moment pga_used_mem pga_alloc_mem pga_max_mem mémoire mémoire mémoire utilisée allouée max sur sur le alouée le moment moment depuis naissance process pga_used_mem pga_alloc_mem pga_max_mem mémoire mémoire mémoire utilisée allouée max sur sur le alouée le moment moment depuis naissance process pga_alloc_mem pga_max_mem mémoire mémoire allouée max sur alouée le moment depuis naissance process pga_alloc_mem pga_max_mem mémoire mémoire allouée max sur alouée le moment depuis naissance process pga_max_mem mémoire max alouée depuis naissance process pga_max_mem mémoire max alouée depuis naissance process cette requête produit, pour toute la mémoire gérée en automatique (policy = AUTO) la mémoire totale allouée (somme des actual_mem_used, appelé total_used) le pourcentage de quantité appartenant à des work_areas sous allouées par rapport à l'attendu (calcul à partir de total_used et de la somme des work_areas dont expected_size supérieur à actual_mem_used le pourcentage de quantité appartenant à des work_areas sur allouées par rapport à l'attendu (calcul à partir de total_used et de la somme des work_areas dont expected_size inférieur à actual_mem_used select from total_used, under * 100 / (total_used + 1 ) percent_under_use over * 100 / (total_used + 1 ) percent_over_use (select sum(case when expected_size > actual_mem_used from where then actuel_mem_used else 0 end ) under, sum(case when expected_size < actual_mem_used then actuel_mem_used else 0 end ) over, sum(actual_mem_used) total_used v$sql_workarea_active policy = 'AUTO' ) usage; _ACTIVE workarea_address _ACTIVE _ACTIVE workarea_address _ACTIVE _ACTIVE _ACTIVE operation_type sort hash join group by bitmap merge bitmap create policy MANUAL AUTO active_time work_area_size expected_size actual_mem_used number_passes workarea_address workarea_address workarea_address workarea_address sid sid sid sid sid sid
Oracle upg adm 9i Claude DA COSTA Chap 14 Memory Managt Page 18/18 Setting PGA_AGGREGATE_TARGET Initially The value of the PGA_AGGREGATE_TARGET initialization parameter (for example 100000 KB, 2500 MB, or 50 GB) should be set based on the total amount of memory available for the Oracle instance. This value can then be tuned and dynamically modified at the instance level. Example below illustrates a typical situation. Example : Initial Setting of PGA_AGGREGATE_TARGET Assume that an Oracle instance is configured to run on a system with 4 GB of physical memory. Part of that memory should be left for the operating system and other non-oracle applications running on the same hardware system. You might decide to dedicate only 80% of the available memory to the Oracle instance, or 3.2 GB. You must then divide the resulting memory between the SGA and the PGA. For OLTP systems, the PGA memory typically accounts for a small fraction of the total memory available (for example, 20%), leaving 80% for the SGA. For DSS systems running large, memory-intensive queries, PGA memory can typically use up to 70% of that total (up to 2.2 GB in this example). Good initial values for the parameter PGA_AGGREGATE_TARGET might be: For OLTP: PGA_AGGREGATE_TARGET = (<total_mem> * 80%) * 20% For DSS: PGA_AGGREGATE_TARGET = (<total_mem> * 80%) * 50% where <total_mem> is the total amount of physical memory available on the system. In this example, with a value of <total_mem> equal to 4 GB, you can initially set PGA_AGGREGATE_TARGET to 1600 MB for the DSS system and to 655 MB for the OLTP system. Monitoring the Performance of the Automatic PGA Memory Management Before starting the tuning process, you need to know how to monitor and interpret the key statistics collected by Oracle to help in assessing the performance of the automatic PGA memory management component. Several dynamic performance views are available for this purpose: V$PGASTAT _HISTOGRAM _ACTIVE OLTP 16% de la mémoire physique disponible DSS 40% de la mémoire physique disponible