Normas de Programacion v1.3
Normas de Programacion v1.3
Normas de Programacion v1.3
DIRECTRICES Y RECOMENDACIONES........................................................................4
OBJETIVO DE ESTE APARTADO...........................................................................................................4
MANDATOS Y RESTRICCIONES..........................................................................................................5
2.
DIRECTRICES Y RECOMENDACIONES......................................................................13
INTRODUCCIN...............................................................................................................................14
GUA DE DISEO.............................................................................................................................14
____________________________________________________________________________________
Pg. 1 de 32
1. Directrices y Recomendaciones
Objetivo de este apartado.
Las recomendaciones corresponden a consejos tomados de la literatura
experta, que marcan una buena alternativa de cmo enfrentar una situacin. El
seguir las recomendaciones tendr como resultado necesario una mayor
posibilidad de construir un software de calidad, lo que en otras palabras se
transforma en un activo de mayor valor.
Es posible que este documento no de cuenta de todos los problemas en Diseo
y Construccin sin embargo es una gua bastante completa. De descubrir
problemas no tratados en esta edicin este documento puede ser actualizado
con la publicidad oportuna que se requiere para no entorpecer el avance del
proyecto.
Mandatos y Restricciones
1) Siempre habr solvencia tcnica detrs de un programa. En repetidas
oportunidades hemos constatado que detrs de un programa si bien ha
existido una detallada especificacin funcional, el como construirlo se
ha dejado al libre albedro del programador sin asegurarse que este
tiene dominio sobre los recursos tcnicos que ha de manejar. Ejemplos
recurrentes de estos son :
En transacciones CICS, en el manejo de las reas de comunicaciones
(COMMAREA) se han observado instancias de desconocimiento
absoluto del protocolo que regula su definicin, direccionamiento y
reglas de manejo de longitudes. Estos errores muchas veces son
difciles de detectar en un entorno distinto al de Produccin y una
vez detectada la existencia de un problema de este tipo, no siempre
es fcil de diagnosticar.
En programas DB2 en general , se ha observado sentencias SELECT
calificadas con complicada lgica booleana donde ninguno de los
discriminantes de la clusula WHERE tiene respaldo en la estructura
de la tabla.
Programas batch-DB2 que realizan grandes procesos secuenciales
por un orden distinto al de su cluster-key, sin haber razn para ello.
____________________________________________________________________________________
Pg. 2 de 32
Tal vez sea esta primera obligacin, la sntesis del resto de las
obligaciones y recomendaciones que componen el documento, esta es la
razn por la que nos hemos extendido en este punto y por lo que
consideramos esencial la intervencin de conocedores del tema
tecnolgico como respaldo para cada aplicacin. El conocimiento
tcnico aqu requerido puede ser entregado por un diseador fsico con
dominio del tema, mediante especificaciones detalladas de cmo
construir la aplicacin, otra alternativa es que el constructor sea el
experimentado en el tema y si ninguna de los dos fuera posible se debe
solicitar soporte al equipo de Infraestructura y Ambientes TI, quien
intentar proporcionar este con recursos propios o apoyado en los socios
tecnolgicos a su alcance.
Ser responsabilidad del Jefe de Equipo que este mandato se
cumpla sin excepcin.
2) No utilizar el verbo CANCEL de COBOL. Cientos de horas
productivas se han perdido debido al overhead de I/O, a veces superior
al 60% del tiempo total de ejecucin de un programa, medido en
decenas de horas, producto de la mala utilizacin de sta. Otras tantas
se han incurrido en la deteccin y reparacin de este problema.
3) No realizar SORT sobre el mismo archivo de entrada
4) No realizar un REPAIR despus de un LOAD, en su lugar debe
usarse un IMAGE COPY
5) Se especifica que no debe usarse la clusula VOL=SER en tarjetas
DD de JCLs ya que la instalacin posee SMS (que es quien decide el
Vol en que alocar el fichero)
6) NO USAR la instruccin SQL : SELECT * INTO :dclgen FROM
table-name .Cuando se requiera consultar una tabla DB2 es
conveniente seleccionar cada una de las columnas de la tabla, ya que
si la estructura de la tabla cambiase dicho cambio no afectar la
ejecucin del programa.
7) NO USAR operaciones aritmticas en la clusula WHERE . Como
ejemplo
SELECT col1, col2, col3 FROM table-name
WHERE col4 = :ws-var4 + 5 ;
El uso de una operacin aritmtica en la clusula WHERE inhibe
el uso de ndices que puedan resolver apropiadamente el SQL.
____________________________________________________________________________________
Pg. 3 de 32
18)
____________________________________________________________________________________
Pg. 6 de 32
1. Se utilizar la sentencia
%%INCLIB <lib vars estticas> %%INCMEM <miembro con
variables>
para definir la librera y miembro donde se encuentran las variables de tipo
esttico (con valor ya determinado) contenidas en la seccin de job que sigue.
2. Para las variables de tipo dinmico, esto es, definidas en algn
momento por el usuario u otro proceso se utilizar:
%LIBSYM <lib vars dinmicas> %%MEMSYM <miembro con
variables>
Esta parametrizacin persigue :
Simplificar la explotacin del sistema
Facilitar la migracin del SW de un entorno a otro
Posibilitar la ejecucin paralela de varias instancias del mismo JCL
sobre el mismo LPAR, gestor Ctrl.-M y DB2 (esta es la casustica de
nuestros proyecto)
Sentencias prohibidas
Las sentencias siguientes no pueden usarse:
//<comando>
//CNTL
//ENDCNTL
//JOBLIB DD
//JOBCAT DD
//STEPCAT DD
/*$<comando>
/*NOTIFY
/*OUTPUT
/*PRIORITY
/*SIGNOFF
/*SIGNON
/*XEQ
Los siguiente parmetros por nombre son innecesarios y pueden no usarse.
BURST
CHARS
CKPTLINE
CKPTPAGE
CKPTSEC
____________________________________________________________________________________
Pg. 8 de 32
COMPACT
CONTROL
FLASH
FORMDEF
GROUPID
INDEX
LINDEX
LINECT
MODIFY
PAGEDEF
PIMSG
PRTY
PRMODE
THRESHLD
TRC
UCS
____________________________________________________________________________________
Pg. 9 de 32
2. Directrices y Recomendaciones
A continuacin se incluyen una serie de recomendaciones dirigidas a asegurar
el rendimiento de las aplicaciones.
____________________________________________________________________________________
Pg. 10 de 32
Introduccin
Los objetivos de este apartado son:
Gua de Diseo
Optimizacin del acceso a DB2
Las medidas que pueden tomarse para optimizar el acceso a DB2 son las
siguientes:
____________________________________________________________________________________
Pg. 11 de 32
Emplear en las sentencias SQL predicados que sean de tipo stage 12,
evitando en la medida de lo posible predicados de tipo stage 2, ya que
el coste de procesamiento de los predicados stage 1 para el
optimizador del DB2 es significativamente menor que para los
predicados stage 2.
Acceso exclusivo por ndice (en el EXPLAIN esto se ve como
AACESSTYPE=I MATCHING COLUMNS >0). En las sentencias
SQL tener en cuenta que cuando toda la informacin que se precisa est
contenida en el ndice, el DB2 no precisa leer pginas de datos, y que
por lo tanto el tiempo de acceso y uso de I/O se disminuye.
Cuando se precise realizar un scan de una tabla, utilizar su ndice
cluster, ya que se disminuye la I/O requerida para recuperar la
informacin (la probabilidad de encontrar toda la informacin buscada
en la misma pgina, o en nmero menor de pginas aumenta cuando la
bsqueda es por ndice cluster).
Cuando se trate de tablas pequeas (tablas con menos de 1000 pginas
de datos), es recomendable emplear tablespaces segmentados. De esta
forma el scan de tabla se efecta nicamente sobre las filas
correspondientes a la tabla seleccionada y no para todas las tablas
almacenadas en el tablespace.
Cuando se utilicen sentencias SQL con joins anidadas (por cada
ejecucin de la tabla exterior del join se ejecuta una consulta sobre la
tabla interior), emplear como predicado en la clusula del join aquel que
proporcione el acceso ms eficaz para la tabla anidada.
El los manuales de DB2 de IBM puede hallarse una definicin de que predicados SQL son stage1; grosso
modo, un predicado stage1 es aquel que puede resolverse mediante ndices existentes en la DB.
____________________________________________________________________________________
Pg. 12 de 32
Una tabla particionada es aquella que se almacena en varios storage groups (esto se puede definir el crear la
tabla)
____________________________________________________________________________________
Pg. 13 de 32
____________________________________________________________________________________
Pg. 14 de 32
Inserts,
Upates
Sorted
inserts,
updates
Sorted
inserts,
updates
Sorted
inserts,
updates
Sorted
inserts,
updates
Database
____________________________________________________________________________________
Pg. 15 de 32
____________________________________________________________________________________
Pg. 16 de 32
____________________________________________________________________________________
Pg. 17 de 32
Inserts,
Upates
Database
Sorted
inserts,
updates
Sorted Table
records
____________________________________________________________________________________
Pg. 18 de 32
Gestin de Checkpoint/Restart
El uso de checkpoint restart (realizado mediante el uso de la ASSCC) es
recomendado en las siguientes situaciones:
____________________________________________________________________________________
Pg. 19 de 32
____________________________________________________________________________________
Pg. 20 de 32
____________________________________________________________________________________
Pg. 21 de 32
____________________________________________________________________________________
Pg. 22 de 32
Accesos a DB2.
____________________________________________________________________________________
Pg. 23 de 32
____________________________________________________________________________________
Pg. 24 de 32
0
0
0
0
0
+100
-811
-803
100
SQLCODES :
100
0
____________________________________________________________________________________
Pg. 25 de 32
-811
-803
Las sentencias SQL que tengan una codificacin idntica deben ser
codificadas en un prrafo aparte en una sola.
Las sentencias UPDATE que actualicen columnas de una entidad
que no han sido modificadas en el proceso (i.e. dejan esa columna con
el valor inicial) del programa deben ser eliminadas. Si la actualizacin
se lleva a cabo a travs de un cursor y no existe ninguna otra
actualizacin mediante este, debe ser eliminada la clusula FOR
UPDATE del mismo.
Las actualizaciones de las columnas de un ndice cluster deben
realizarse mediante DELETE-INSERT y no UPDATE. De esta manera
nos aseguramos que estamos actuando sobre una fila cada vez.
No usar LIKE.
____________________________________________________________________________________
Pg. 26 de 32
____________________________________________________________________________________
Pg. 27 de 32
____________________________________________________________________________________
Pg. 28 de 32
Variables HOST
En cualquier sentencia SQL, las variables SQL utilizadas deben ser las
definidas en la DCLGEN , si no se puede, utilizar variables definidas en
working con el mismo formato que el generado para la columna afectada
en la DCLGEN. Esto se debe a que el DB2 trabaja de forma ms ptima
cuando las comparaciones las realiza sobre campos de igual definicin,
cuando esto no se cumple, el DB2 se ve forzado a realizar conversiones
constantemente y de forma innecesaria. Si, adems, la columna forma
parte de un ndice, puede que el DB2 no utilice dicho ndice en el acceso;
este es el caso de comparaciones numricas de distinta precisin, as como
alfanumricas donde la variable host es ms larga que el atributo a
comparar.
Programacin COBOL.
____________________________________________________________________________________
Pg. 29 de 32
____________________________________________________________________________________
Pg. 30 de 32
Errores comunes
Adems de estas recomendaciones, se considerarn como errores los
siguientes supuestos:
1. Si aparecen 2 o ms sentencias de OPEN o CLOSE de ficheros
seguidos (podemos encontrar OPEN y CLOSE de ficheros y
cursores).
2. Si aparecen sentencias OPEN sin su correspondiente CLOSE.
3. Si aparecen sentencias READ no seguidas de INTO.
____________________________________________________________________________________
Pg. 31 de 32
MOVE
Nombre_A TO ST-NOMBRE-FICHERO
MOVE
Nombre_B TO ST-NOMBRE-FICHERO
____________________________________________________________________________________
Pg. 32 de 32