Curso Tuning
Curso Tuning
Curso Tuning
4. Table Buffers en R3
Como una primera aproximación al sistema se puede consultar esta transacción (nos
interesa que sea en las horas con problemas de performance) en donde podemos observar
varios puntos:
Por ejemplo, en esta pantalla se observa que todos los procesos de diálogo se
encuentran ocupados por lo que algo que se podría hacer es aumentar el número de work
processes de diálogo (antes de hacer esto necesitamos consultar con otras herramientas de R3
si esto es posible, es decir que tengamos memoria suficiente).; pero inicialmente podríamos
suponer que aquí faltan WP de diálogo.
Igualmente podemos observar que la mayoría de las acciones son lecturas secuenciales.
Si al seguir monitoreando, observamos que las lecturas secuenciales son constantes, es posible
hacer un tuning. Una lectura secuencial se debe probablemente a un problema de ABAP (falta
de algún índice por ejemplo, o que no se están usando los índices indicados) o probablemente a
un problema de disco (esto se corrobora con otras herramientas de R3).
En esta transacción podemos observar que el porcentaje de tiempo en que el CPU está
desocupado (idle) es del 1% (al menos debe haber un 20% libre en forma constante) además de
que el sistema cuenta con 2 cpus. En esta misma transacción, podemos observar que el espacio
configurado de swap es de 4 GB de los cuales se están usando la mitad (Usar el 50% o mas es
un indicio de alto swapeo de disco).
Por otro lado, si observamos la cantidad de memoria ocupada por SAP (segundo recuadro: SAP
memory), vemos dos cosas:
Además, conocemos la memoria total que ocupa el motor de la base de datos mediante la
transacción ST04. En el caso de Informix, se tratará del tamaño total de la memoria compartida
(Total Size - Shared Memory) que en este caso se trata de 190.6 MB.
Sabemos por otro lado (mediante la transacción SM50) que este sistema cuenta con 24
workprocess ( y si cada uno ocupa aproximadamente 12 MB), esto ocupa aproximadamente 288
MB. La cantidad de memoria total ocupada por el sistema es la siguiente:
Memoria Buffers R3 ( aprox 370 MB) + SAP Memory ( aprox 1.5 GB) + Memoria ocupada
por los Wokprocess (aprox 288 MB) + Memoria DB (aprox 190 MB) + Memoria Sistema
Operativo.
Sin tomar en cuenta la memoria del Sistema Operativo, esto es aproximadamente 2.328 GB.
Conclusiones:
Esto quiere decir que se encuentra definida la memoria de Roll y Paginación mucho mas
grande de lo que en realidad se está usando, por lo que se puede disminuir el valor de estos
parámetros para ajustarlos a lo que realmente está utilizando el sistema. Lo único que hay que
asegurarse, es que la utilización de estos buffers realmente haya sido la misma a lo largo del
tiempo. Para esto utilizamos el botón HISTORY de la transacción ST02 con lo cual vemos:
En este caso vemos que hasta el día 7 de Abril la cantidad de memoria de Roll y
Paginación era de 262 MB definidos y la cantidad de memoria utilizada permanecía constante.
Después de esa fecha se cambiaron los parámetros del system profile para reducir su tamaño a
64 MB (se observa a partir del día 8 de Abril)
Rdisp/PG_SHM = 3000
Rdisp/PG_MAXFS = 3000
Rdisp/ROLL_SHM = 8000
Rdisp/ROLL_MAXFS = 8000
Es por esta razón que en la transacción ST02 la cantidad de memoria SAP en disco es 0. En
este caso se recomienda aumentar los valores de rdisp/PG_MAXFS y rdisp/ROLL_MAXFS para
que haya una definición en disco.
Además de disminuir los parámetros del área de Roll y de Paginación en memoria Ram,
se definen los parámetros para establecer el área de Roll y Paginación en Disco
Estos parámetros en este caso son DIR_ROLL y DIR_PAGING que por default apuntan al
directorio /usr/sap/<SID>/DVEBMGS00/data y deben tener al menos permisos 666 y pertenecer
al usuario <sid>adm/sapsys, así como los parámetros:
rdisp/rpag_file = /usr/sap/PRO/DVEBMGS00/data/PAGFIL00
rdisp/rrol_file =/usr/sap/PRO/DVEBMGS00/data/ROLLFL00
TIP: Para buscar los parámetros se puede utilizar el comando %SC en el cuadro de
transacciones.
En la anterior pantalla observamos que los valores que afectan el tamaño de la memoria de Roll
y paginación (en bloques de 8 KB) son:
Igualmente se definen los parámetros del path en disco donde se direcciona el área de
paginación y roll . Si no hay suficiente memoria Ram, entonces el Roll File se debe configurar en
disco
DIR_PAGING
DIR_ROLL
rdisp/rpag_file = /usr/sap/PRO/DVEBMGS00/data/PAGFIL00
rdisp/rrol_file =/usr/sap/PRO/DVEBMGS00/data/ROLLFL00
Si se quiere ver los valores actuales que se tienen por default, se puede correr el reporte
RSPFPAR en la transacción SE38, o por medio del siguiente menú: Tools Admin
Monitoring Performance Setup/Buffers Parameter Changes Active Parameters.
TUNING ORIENTADO A DB INFORMIX
La porción residente almacena datos del disco en una memoria caché compartida lo cual
asegura un acceso rápido a los datos; aquí se encuentran definidos los Buffer Pools y las colas
LRUS (buffers de datos).
La porción Virtual maneja los recursos para los procesos. Aquí se encuentran los sessions pools,
los sort pools, los data dictionary pools, etc.
SHMVIRTSIZE
SHMADD = 20
SHMVIRTSIZE SHMVIRTSIZE
=100 MB =200MB
SAP AG
Informix puede añadir memoria a la porción virtual conforme la vaya necesitando, sin
embargo es conveniente definir desde un principio la cantidad total de memoria que necesitará a
lo largo de la operación productiva en lugar de que vaya añadiendo la memoria en pedazos.
Esto se debe a que existe un límite a nivel sistema operativo a que se sigan añadiendo porciones
de memoria y al hecho de que se crea overhead en el acceso de la memoria de informix.
Por medio del comando onstat -g seg, se puede saber el número de porciones adicionales al
valor inicial del SHMVIRTSIZE que se han agregado. En caso de que no se tenga acceso a nivel
sistema operativo, el acceso al comando onstat se obtiene mediante la transacción ST04
DETAILED ANALYSIS, donde aparece un botón de “Onstat Commands”:
El valor recomendado para el parámetro SHMADD es de 32MB a 64 MB. Cada vez que se
agregue una de estas porciones de memoria a la porción virtual, se verá reflejado en el log de
informix (ST04 DETAILED ANALYSIS DATABASE LOG MESSAGE ) con el siguiente
mensaje:
Conforme se van ejecutando transacciones y reportes en el sistema, van quedando sesiones con
esa cantidad de memoria alojada. La razón de esto es porque Informix trabaja en el supuesto de
que va a utilizarlas otra vez.
Para liberar estas sesiones que quedaron alojadas, se debe ejecutar el siguiente comando:
Onmode -F
Onstat –g seg
Onmode –F
Onstat –g seg
Con el fin de verificar la cantidad de memoria que se libera cada vez que se corre este comando;
otro lugar donde se pueden monitorear las porciones de memoria de Informix es en la
transacción ST04 DETAILED ANALYSIS SHARED MEMORY:
NOTA: La memoria del sistema se va fragmentando paulatinamente lo cual lleva a un acceso
mas costoso de la memoria. Por esta razón es conveniente re-inicializar el equipo por ejemplo
cada dos semanas. Sin embargo, esto se debe manejar con mucho cuidado con el cliente pues
en ocasiones éste no lo entiende y puede generarle desconfianza. En la mayoría de las veces,
basta con reinicializar los servidores de aplicación a nivel R3.
Cómo saber cuantos usuarios se encuentran esperando en este momento en la cola del
dispatcher?
DATA BUFFERS
Data Buffer Size
This number gives the total size of database shared memory buffering
spaces. It is obtained indirectly by multiplying the database
configuration parameters, BUFFERS with the SYSTEM-PAGE-SIZE. The SYSTEM-
PAGE-SIZE is a fixed parameter and cannot be altered. The BUFFERS
configuration parameter can be found and altered via the Informix-Online
database configuration file found in the directory $INFORMIXDIR/etc.
The number of reads from the database shared memory buffer. This shared
memory buffer stores information retrieved from disk via a database
query. By doing this, repetitive database requests are accessed much
faster from the shared memory buffer than a repeated disk access
The number of writes to the database shared memory buffer. This buffer
stores information which is to be updated on disk. By buffering the
information, the update process is more efficient, although there are
drawbacks. System failures may subject data to possibe loss while it is
waiting in buffer for update.
CLEANERS
PAGE CLEANERS
The database buffer cleaner processes are responsible for flushing the
data residing in the shared memory buffer pools. The optimal number of
cleaners depends on your hardware configuration. The maximum value of
altering the current ONCONFIG* parameter file located in
$INFORMIXDIR/etc.
Informix recommends that you configure a page cleaner for each disk that
online uses. However, if more than one disk shares a controler channel,
you might find that more than three page cleaners per controller
overburdens the controller. In most cases, the additional cleaners do
not improve performance unless you separate successive chunks from a
blobspace or dbspace on the disk. Ideally, you should try to assign
successive chunks to separate disk devices.
LRU QUEUES
The minimum value of LRUs is 3, the maximum is 32. The optimal value of
LRUS depend on your specific hardware configuration. Your best guide for
selecting a value for LRUS is to experiment with different values and
monitor the performance benefits. You may find that a larger value
increases performance on machines with more than 2 CPUs.
1. When the number of dirty buffers in a LRU queue reaches its limit
determined by LRU_MAX_DIRTY.
2. When the page cleaner threads cant keep up – in other words, a user
thread need to acquire a buffer and none are available.
3. Online needs to execute a checkpoint.
LOG BUFFERS
Online uses the shared memory physical log buffers for tempory storage
of “befor-images” of dbspace pages. The “before images” in the physical
log enable Online to restore consistency to its databases after a system
failure.
The size of the 2 physical log buffers, located in shared memory, are
always equal. By double buffering, user threads are able to write to
the active phyical log buffer while the other buffer is being flushed
to the physical log on disk.
The PHYSBUFF parameter in the ONCONFIG file specifies the size of the
physical log buffers. Small buffers can create problems if you store
records that are larger than the size of the buffers. The minimum value
is 1. The maximum is n>= (page size). Recommended size is 16 pages.
The LOGBUFF parameter in the ONCONFIG file specifies the size of the
logical log buffers.
This field gives the average number of kilbytes that were flushed from
the physical log buffer to the physical log on disk. Its value is an
indicator a to how well the physical log memory buffers are tuned. In
general, if this value is over 75 percent of the size of the physical
log buffer (or 100 percent using buffered logging), you can probably
improve performance by making the physical log buffer size larger.
Any adjustments to this parameter can effect the data buffered write
pecentages. This is due to modified data being held in the cache for
shorter or longer periods of time, restricting or permitting multiple
updates to the same data before it is written to disk.
LOG.LOG WRITTEN / IO
This field gives the average number of kilbytes that were flushed from
the logical log buffer to the current logical log file on disk. Its
value is an indicator as to how well the logical log memory are tuned.
In general, if this value is over 75 percent of the size of the logical
log buffer (or 100 percent using buffered logging), you can probably
improve performance by making th logical log buffer size larger.
DATABASE ACTIVITY
CPU VIRTUAL PROCESSORS
COMMITS
The number of ISAM commits since the starting of the database. A commit
is considered a completed transaction. There is not a one to one
correspondence between this value and the number of explicit COMMIT WORK
statements that are executed.
ROLLBACKS
TRANSACTIONS / MIN
This value es the number of ISAM calls per/second since the last
starting of the database. This statistic is gathered across the Online
system and cannot be used to monitor activity on a single database
unless only one database is active or only one database exists.
Standard SQL statements are parsed into lower lever commands called ISAM
calls. The number of calls are monitored here to give an indication of
database activity.
Otros parámetros de Informix (ONCONFIG) concernientes a performance.
OnLine SHM
OnLine SHM
OPERATING SYSTEM
MULTIPROCESSOR 1 MULTIPROCESSOR 0
SAP AG
Este parámetro afecta la manera en como informix realiza las exclusiones mutuas (MUTEXES)
Cuando se tiene un máquina multiprocesadora, se debe cambiar no solo este parámetro, sino
también los siguientes:
NUMAIOVPS <n>
INFORMIX
OnLine SHM
1 2 ... <n>
n = Number of physdevs
SAP AG
The number of asynchronous IO virtual processors should be set to the number of physical
devices which contain dbspace chunks ( = the number of physdev<n>s). This number can be
increased dynamically.
$ONCONFIG check 8 - NETTYPE
NETTYPE ipcshm,1,40,CPU
NETTYPE soctcp,1,40,NET
VP class
OnLine SHM
$INFORMIXDIR/etc/
sqlhosts.<interface> poll threads
SAP AG
The format of the value string for the NETTYPE parameter allows for the configuration of the
type of the network connection (referenced from the /informix/<SID>/etc/sqlhosts.<interface>
file), number of poll threads that will be polling for network requests of the given type, the
number of database users that will be expected to connect to the database (maximum value:
USERTHREADS), and the type of virtual processor within which the poll thread will execute
(affects performance).
SAP R/3 requires two NETTYPE definitions: one for connections to the database from the
database instance itself (shared memory = ipcshm), and one for connections to the database
from dialog instances/application servers (<interface>tcp, for example, tlitcp or soctcp,
depending on hardware platform = TCP/IP).
physical CPU = 1
NUMCPUVPS 1
SINGLE_CPU_VP 1
MULTIPROCESSOR 0
SINGLE_CPU_VP 0
MULTIPROCESSOR 1
SAP AG
100% LRU_MAX_DIRTY
LRU_MIN_DIRTY
Write Activity
At checkpoints all dirty Between checkpoints there
C h ec k p o in t
C h ec k p o in t
Time
CHKINTV
SAP AG
5% LRU_MIN_DIRTY 5%
C h ec k p o in t
C h e c kp o in t
Time
CHKINTV
SAP AG
When LRU_MAX_DIRTY and LRU_MIN_DIRTY are small enough then the normal page
cleaner activity (which starts as soon as LRU_MAX_DIRTY is reached and stops at
LRU_MIN_DIRTY) will reduce the number of dirty pages remaining in the Buffer Cache. This
will then result in a shorter checkpoint duration.
A "SELECT" in Informix
Ready
Queue
CPU
VP
Buffer Cache
AIO
Queue AIO
VP Disk
SAP AG
The End User Enters a Select
The user thread goes to the ready queue for the CPU VP
Select Ready
Queue
CPU
VP
Buffer Cache
AIO
Queue AIO
VP Disk
SAP AG
A user working in the R/3 System causes an access request to be passed to the database.
The access request is placed in the Informix OnLine ready queue and waits for a CPUVP to
process it.
Select Ready
Queue
CPU
VP
Buffer Cache
AIO
Queue AIO
VP Disk
SAP AG
If the Data is Already in the Buffer Cache...
The CPU VP gets the data and returns it to the user
Ready
Queue
CPU
VP
Buffer Cache
AIO
Queue AIO
VP Disk
SAP AG
Ready
Queue
CPU
VP
Buffer Cache
Select AIO
Queue AIO
VP Disk
SAP AG
If the request cannot be satisfied from the Buffer Cache, then the request is submitted to the AIO
Queue and waits for an AIOVP to process it
If the Data was not in the Buffer Cache (2)
The AIO VP finds the required pages and loads them to the
buffer cache
Ready
Queue
CPU
VP
Buffer Cache
Select AIO
Queue AIO
VP Disk
SAP AG
When an AIOVP becomes available to process the request it performs the direct disk access
and loads the data, which has just been read, into the Buffer Cache.
Ready
Queue
CPU
VP
Buffer Cache
AIO
Queue AIO
VP Disk
SAP AG
Por lo tanto, en base a la forma en como Informix realiza una petición SQL, podemos
establecer lo siguiente:
Performance Monitoring: Health Check
Parameter BUFFERS:
A big buffer
increases the
probability of
finding a page in
the buffer (which
is faster than a
disk access)
CPU
VP
Buffer Cache
AIO
Queue AIO
VP Disk
SAP AG
Update
Select Ready A high number of
Queue CPU VP's decreases
the wait time in the
ready queue
CPU CPU
VP VP
Buffer Cache
AIO
Queue AIO
VP Disk
SAP AG
Si un servidor que es multiprocesador solo tiene definido un cpuvp, habrá contención a nivel
informix, lo cual se puede observar en la transacción ST04 DETAILED ANALYSIS WAIT
STATISTICS .
Si al llamar esta pantalla se despliega el mensaje : “ Statistics not Available”, se debe añadir el
siguiente parámetro en el archivo onconfig:
WSTATS = 1
CPU
VP
Buffer Cache
AIO
Queue AIO
VP Disk
SAP AG
CPU All user threads and some system threads run in this class. The purpose of this
class is to put all the CPU intensive activities on this processes.
PIO Runs internal threads for the system which perform writes to the physical log on
disk.
LIO Runs internal threads for the system which perform writes to the logical log on
disk.
AIO Runs internal threads which perform all disk I/O except for writes to the logs
MSC Runs threads for miscellaneous tasks.
SHM Runs internal shared memory communication threads
TLI Runs internal TLI network communication threads
SOC Runs internal sockkets network communication threads
ADM Runs the timer
OPT Handles Blob transfer to an optical subsystem.
Los VPs aparecen a nivel Unix como procesos ONINIT mediante la ejecución del comando ps.
En cuanto a los VPs críticos, los CPU VPs y los AIO VPs son configurables mientras que los LIO
VPs y PIO VPs son autoconfigurables. Además los LIO y PIO VPs se encuentran espejeados
porque el Logdbspace y Physdbspace se encuentra espejeado.
En cuanto a los VPs de comunicación, los SHM, TLI y SOC VPs son igualmente configurables.
Algo que debe quedar claro, es que para el motor de la Base de Datos Informix, los clientes son
los workprocess a nivel R3.
De esta manera, si tenemos configurados 2 CPU VPs Y 2 AIO VPs como en el siguiente
ejemplo,
Cuando un proceso de informix necesita hacer una escritura a disco, pasa la petición a una de
las colas de algún AIO VP. Si al terminar de hacer la escritura regresa al CPU VP original y este
se encuentra ocupado, entonces va a la cola ready de algún otro CPU VP, es decir que las
colas de los VPs se comparten.
En ocasiones se pueden ligar los CPUs físicos de un host con los CPU VPs, esto se
conoce en Unix como CPU Affinity y en algunos sistemas conviene para mejorar el
performance.
Para poder utilizar el KAIO VP se necesita tener el sistema operativo correcto con todos
sus parches. El KAIO VP es autoconfigurable y se ejecuta como un hilo de un CPU VP siempre y
cuando la variable de ambiente KAIOOFF no se encuentre activada.
Si existen algún problema con la configuración de los KAIO VPs, entonces se activa este
parámetro KAIOOFF = 1 y se configura 1 AIO VP por cada disco físico que se tenga.
En caso de que el KAIO VP se pueda configurar, se deben configurar igualmente al menos 2 AIO
VPs para poder escribir en los logs y los cooked files ya que los KAIO VPs solo pueden escribir
en Raw Devices.
Cada CPU VP tiene un hilo llamado sqlexec que viene siendo el master thread; otro hilo
que también posee es poll el cual corre todo el tiempo (polling for communication) .
Si se tiene una máquina con un solo procesador (y por lo tanto con un solo CPU VP) los demás
POLL THREADS deben correr en los NET VPs tales como TLI, SOC y SHM VPs, lo cual se
especifica mediante el parámetro NETTYPE en el archivo Onconfig.
Los POLL THREADS siempre están buscando nuevas conexiones mientras que los
LISTEN THREADS establecen todas las estructuras para una conexión que inicia.
RA – TUNING (Read Ahead Tuning). Informix trata de leer por adelantado la información
mediante dos parámetros: RA_PAGES (max 32 pages) y RA_THRESHOLD (mas 30 pages).
Por ejemplo si se tienen los siguientes valores:
RA_PAGES = 32
RA_THRESHOLD = 10
Entonces Informix trae otras 32 páginas a buffer hasta que ya haya leído en buffer 10
páginas. La recomendación es no traer muchas páquinas que no se lean porque se
desperdicia el buffer), esto se logra aumentando el valor de RA_THRESHOLD. Al
ejecutar el comando onstat –p se obtiene una pantalla muy similar a la siguiente:
Los comandos onstat –g seg , ipcs obtienen información sobre las porciones de memoria
virtual añadidas al sistema.
Con el comando onstat –g glo | pg se obtiene cuales son los VPs que tienen los polls de
comunicación que están corriendo. El número en la columna de vp-class indica el órden que
éstos iniciaron.
Al ejecutar el comando ps –ef | grep oninit debe coincidir los números de procesos oninit con
el número de VPs que obtengo mediante el comando onstat –g glo. Si esto no es así, lo mas
probable es que se encuentre otro Informix Server ejecutándose en la misma máquina.
Para saber cuánto ocupa de memoria un WP, se debe ejecutar el comando onstat –g mem | pg
lo cual me dá el SID de informix y el tamaño en memoria. Mediante la transacción ST04 se busca
el equivalente del SID y el PID de los workprocess y mediante la transacción SM50 se identifica
de qué workprocess se trata.
Para saber si se están ejecutando los hilos KAIO y los VPs en los cuales se ejecuta , se corren
los siguientes comandos: onstat –g ath | pg y/o onstat –g ioq.
Mediante el comando onstat –p se monitorean los buffers de Informix. Aquí el Read % cached
debe ser mayor al 95% y el write % cached debe ser mayor al 85%.
El comando onstat –g rea muestra la actividad que tengo en las colas de los CPU VPs. Si
tengo muchas colas en espera, es necesario incrementar el número de CPU VPs.
CLEANERS = La recomendación para los cleaners es 1 por disco si se tiene un solo CPU VP.
En caso de tener mas de 1 CPU VP, se recomienda tener 1 cleaner por chunck
LRU QUEUES = El mínimo son 8, pero lo óptimo es tener 4 * N° CPU VPs. Para ver si tenemos
suficientes colas, se debe correr el comando onstat –g spi y en caso de tener una alta espera,
se deben aumentar.
Al aumentar el número de BUFFERS, conviene aumentar los LRU QUEUES pero no tanto para
que los CLEANERS no tengan mucho trabajo.
En un checkpoint, los CLEANERS graban a disco de los BUFFERS (Chunck Writes, las cuales
son muy eficientes). La actividad de los usuarios se suspende durante un checkpoint, por lo cual
se requiere que éstos sean cortos.
Otros TIPS
Otra transacción de utilidad es la SM66 , donde podemos ver todos los workprocess de un
sistema. A diferencia de la SM50, aquí podemos ver los workprocess del servidor de base de
datos y de los servidores de aplicación (del sistema productivo por ejemplo).
En el botón “SELECT PROCESS” de dicha transacción podemos seleccionar los tipos de
workprocess que deseamos monitorear (Diálogo, Batch, Update, etc).
Si se localiza a un usuario que está loggeado varias veces en el sistema, entonces se procede a
averiguar el porqué de esta situación.
Si mas del 75% de usuarios presentan SEQUENTIAL READ, esto puede deberse probablemente
a un problema de código de Abap o a disco.
Transacción ST02: Si “In Memory” – “Max. use” < 20% de “In Memory” in la línea “
Extended Memory” Se debe incrementar el parámetro R3 em/initial_size_MB
TIEMPOS DE RESPUESTA.
Mediante la transacción ST03 se pueden analizar los tiempos de respuesta del sistema R3.
9 The Average Response Time is only for the application server. It has
the value of 313.7 ms (= 0.3 second). The Average Response Time of
most transactions is approximately less than 2 seconds.
10. The Average CPU Time is 194.2 ms (= 61.9% of the Average Response
Time) which is higher than the normal value. CPU intensive tasks
have occurred during the time interval. The Average CPU Time should
be approximately 40% of the Average Response Time. If it is above
40%, the problem may be one of the following:
12. The Average Load Time is 18.7 ms (= 5.96% of the Average Response
Time) which is normal. Load Time normally represents the time for
loading and generating ABAP/4 source code and screen information
from a database. The Average Load Time should be less than 10% of
the Average Response Time. If it is above 10%, there may be missing
indices, or R/3 buffers are too small.
14. Database Requests are the number of logical ABAP/4 requests for
data in the database. These requests are passed through the SAP
database interface and parsed into individual database calls. Take
note of the proportion of database calls to database requests. If
access to information in a table is buffered in the SAP buffers,
database calls to the database server are not needed. There are
250,137 requests that are divided into three kinds of requests:
Direct reads
Sequential reads
Changes
15. The time of Direct Reads for each Database Request is 63,774 ms,
which is too high. The normal value should be less than 10 ms.
16. The time of Sequential Reads for each Database Request is 16.2 ms,
which is a little too high. The normal value should be less than 10
ms.
17. The time of Changes and Commits for each Database Request is 10.9
ms, which is normal because this value should be less than 25 ms.
Note that the R/3 System in this example has been used to import a
whole client from another R/3 System, and therefore there are many
read and write activities. These values are not indicative of a
correctly configured and tuned R/3 System.
En la transacción ST03, se pueden hallar cuales fueron los TOP 40 RESPONSES TIMES
mediante el botón TOP TIME:
En esta transacción se monitorea para ver cuales son las transacciones con mayor tiempo de
ejecución (monitorear en un largo lapso de tiempo). Se recomienda buscar notas en el OSS
sobre performance relacionadas con estas transacciones.
O se puede obtener la cantidad de memoria utilizada por cada transacción mediante el botón
MEMORY PROFILE:
REORGANIZACIONES.
R3 cuenta con herramientas para determinar cuál es nuestro disco con mayor acceso mediante
la transacción OS06:
Cuando los parámetros KB PAGED IN /S y KB PAGED OUT / S se incrementan, esto es
indicación de que se está realizando mayor swapeo.
Cuando el parámetro PHYSICAL MEM FREE empieza a disminuir, el swap empieza a aumentar.
En este caso aparece que el disco con mayor tiempo de respuesta es el SSD0, si se hace doble
click sobre éste, aparece la siguiente pantalla:
En este caso se trata de una plataforma solaris, por lo que para obtener información de qué
disco se trata se debe teclear el siguiente comando a nivel sistema operativo.
$ dmesg | more
Se deben identificar no las tablas mas grandes en el sistema sino las mas accesadas en lecturas
y/o escrituras para que , si es conveniente, sacarlas de su dbspace original y colocarlas en otro
dbspace en un disco con menos acceso en disco.
De esta manera es necesario identificar los discos con mayor acceso, los menos accesados, así
como las tablas mas grandes y accesadas. Para obtener las tablas mas grandes, partimos de la
transacción DB02.
DB02
DB02 SPACE STATISTICS
También debemos poner especial atención en el número de extents con que cuenta determinada
tabla. Informix tiene un límite de 120 – 150 extents por lo que al acercarse a este límite, se hace
necesaria una reorganización.
FCABP 10.5 GB
BSAK 4.5 GB
BSAD 4.3 GB
BSIS 6.6 GB
BKPF 4.6 GB
La estrategia adoptada fue crear dbspaces nuevos por cada tabla (de hecho el nombre del
dbspace es el nombre de la tabla) de la siguiente forma:
Tmpdbs1 1 GB Modificar
Tmpdbs2 1 GB Modificar
Tmpdbs3 1 GB Modificar
Psapfcabp 15 GB Modificar
Psapbsak 6 GB Modificar
Psapbsad 6 GB Modificar
Psapbsis 8 GB Modificar
Psapbkpf 6 GB Modificar
Así mismo se propusó la creación de 2 dbspaces mas para tener un mejor desempeño del motor
de la base de datos, según lo especifica la nota 49381 , de manera que se tengan 3 dbspaces
temporales de 1 GB, (en las versiones 4.x, esto se define desde el momento de la instalación )
esto se realiza de la siguiente manera:
Seleccionar la opción s)
DBSPACETEMP tmpdbs1,tmpdbs2,tmpdbs3
Por otro lado el procedimiento para sacar las tablas de sus dbspaces originales a sus
nuevos dbspaces es el siguiente:
Una vez definido el tamaño del dbspace y creado este, se selecciona la opción c)
Reorganize del menú principal obteniendose la siguiente pantalla:
Se selecciona la opción e) Reorganize Single Table y aparece la siguiente pantalla:
DBA098I: Table ‘FCABP’ was moved to a different dbspace! The SAP data
Dictionary was updated accordingly by SAPDBA. To kkeep these changes during
the next upgrade of your R3 system you must update de DDIC manually within R3
using transaction SE13 and release the correspondign transport request
afterwards.
Within transaction SE13 please enter ‘APPL1’ as new ‘data class’ for table FCABP.
You find details about transaction SE13 in the DDIC documentation.
IMPORTANTE:
Lo que sucede es lo siguiente: Cuando se realiza un upgrade o reorganización
mediante copia de base de datos de un sistema al que se le han sacado tablas a vivir fuera de
sus dbspaces nativos, al final de estos procesos, los dbspaces regresan a sus dbspaces
originales.
Para solucionar esto existen dos posibilidades: Se vuelven a sacar las tablas después
de un upgrade o copia de base de datos; o se actualiza el diccionario de R3 para indicarle el
nuevo dbspace hogar de las tablas. Esto se realiza especificándo el nuevo data class
indicado en el mensaje de la reorganización por sapdba en la transacción SE13. En la
transacción SE14 también aparece la especificación del dbspace hogar de una tabla.
Transaccion SE13:
Transacción SE14:
En la opción “ Storage parameters”:
TIP: Se observó que la reorganización mediante copia de base de datos se realiza en forma
mas rápida si el sistema cuenta con el último nivel de Kernel Patches.
MONITOREO DE PROCESOS CON ALTO TIEMPO DE RESPUESTA
En esta transacción se muestran los programas ejecutados en todos los servidores (tanto el
de base de datos como los servidores de aplicaciones. Esta transacción se monitorea
constantemente mediante el botón de REFRESH para encontrar los programas que se
llevan mas tiempo. Si se hace doble click en uno de los programas deseados, aparece la
siguiente pantalla:
Aquí se muestran datos sobre tiempo de que lleva ejecutándose, usuario que lo mandó y
número de reporte.
En esta pantalla obtengo el identificador del proceso el cual se utiliza para encontrar la
instrucción SQL utilizada en este reporte mediante la transacción ST04 botón
DETAILED ANALYSIS botón ORACLE SESSION / INFORMIX SESSION Y botón
SQL STATEMENTS. De la transacción ST04 Detailed Analysis Oracle – Informix
Session obtengo el session ID, el cual se compara con el session ID de ST04 Detailed
Analysis Sql Statements (Para que aparezca el Session ID en esta última transacción, se
debe hacer click en el botón PER SESSIONS).
La instrucción SQL nos muestra las tablas sobre las cuales está leyendo/escribiendo.
EJEMPLO:
Aquí vemos que el reporte con mas tiempo de ejecución es RFFMS012 de FSEHERNANDEZ
con pid 22457.
En la transacción SM51:
Aquí vemos igualmente el reporte con el pid 22457.
Se comparan los campos que se están leyendo sobre esta tabla y los índices definidos para ver
si falta algún nuevo índice o si éstos no se están aprovechando correctamente. En este caso se
necesitaría un índice que incluyera a los campos MANDT y OBJNR (que aparecen en el
WHERE).
SOLUCION: Modificar la instrucción SQL para que utilice todos los campos ( en el caso de que
el reporte provenga de una pantalla, hacer que sea mandatorio para el usuario el llenado de los
campos necesarios en la pantalla para la utilización completa del índice). Otra solución es
definir un nuevo índice para la instrucción SQL. La creación de índices se puede dar
incluso para programas de SAP y no solo para programas realizados por el cliente.
TABLE BUFFERS EN R3
Resident buffering (100%): the contents of the whole table is loaded into the buffer on the
first access to any data from the table.
Generic buffering: a generic key (first n key fields) is specified when maintaining the
technical settings. This generic key divides the contents of the table into so-called generic
areas. When accessing any data with a specified generic key, the whole generic area is
loaded into the buffer. The figure shows the case of generic buffering with one and two fields
as generic key. A very typical case of generic buffering is the client-dependent buffering
(client is the first key field). When specifying resident buffering for a client-dependent table,
the ABAP/4 Dictionary automaticly uses generic buffering with one key field.
Partial buffering (single record): only single records are read from database and stored into
the buffer.
There are several statements which can not be satisfied from the buffer. Those statements
bypass the buffer and are sent directly to the database. The above shows the statements which
bypass any buffer type.
Those statements should be avoided when programming with buffered tables in order to
guarantee good performance. An exception are maintanance transactions on buffered tables.
Those should use an explicit SELECT BYPASSING BUFFER to ensure to get the most-up-to-
date data directly from the database.
SQL Statements Bypassing Buffer II
Partial Buffer:
A non-single select
SELECT * FROM T1 WHERE ...
Generic Buffer:
Select without specifying the generic key
SELECT * FROM T1 WHERE ...
The update is performed on the database table and in some way also on the buffer. The
exact buffer handling depends on the type of the buffer. Either the buffer is updated, or the
contents are simply marked as invalid (they will be read on the next access).
The updating statement is executed by the R/3 DBIF (Database Interface) which inserts a record
into the table DDLOG indicating the change on the table T001.
Each application server (in our example B) reads periodicly the contents of DDLOG in order
to invalidate the contents of its buffer if necessary.
The period for the synchronization is usually 1 or 2 minutes (profile parameter)
Within this period, users on applicartion server B read the ’old’ data. First after the buffer
synchronization, the data is marked as invalid and reread again on the next access.
Granularity of Invalidation
The most important question is: is a table bufferable? This can be answered with yes if the table
is read-mostly and if it is acceptable that changes on this table are not immediately visible on all
application servers.
The buffering type can only be decided based on the access profile on this table. In most cases
this should be known to the programmer of the table and thus, on of the settings partial, generic
or resident should be set. For some special cases a new type ’installation-dependent’ is
introduced. If this is set, the table is initially not buffered but can be set to one of the above types
in the running system.
Oracle
Informix