IBM Books
(C) IBM Corp. 2000

DB2 Net Search Extender Guía de administración y del usuario

Creación de un índice de texto que la búsqueda de procedimiento almacenado pueda utilizar

Para utilizar la búsqueda de procedimiento almacenado, debe especificar las opciones de antememoria durante el mandato CREATE INDEX. Esto permite obtener un alto rendimiento, moviendo todos los datos especificados a la memoria principal.

Sin embargo, antes de la primera actualización del índice para la búsqueda, asegúrese de que la tabla contenga documentos para evitar la actualización de un índice en una tabla que no se haya llenado. De este modo se obtiene un mejor rendimiento de la indexación y una estimación sólida de los requisitos de memoria de antememoria.

La búsqueda de procedimiento almacenado permite devolver rápidamente los datos predefinidos asociados a un documento. Utilice la opción de tabla de antememoria para definir esto en el mandato CREATE INDEX. El mandato ACTIVATE CACHE traslada entonces los datos especificados a una memoria de antememoria.

Nota

Las funciones de búsqueda escalar SQL también pueden utilizar este índice de texto, si no se ha creado en una vista.

En un entorno DB2 distribuido, debe especificar explícitamente un espacio de tabla para las tablas de administración en un solo nodo para el procedimiento almacenado y realizar llamadas explícitamente en este nodo.

Para asegurarse de que se conecta al nodo adecuado, utilice la variable de entorno DB2NODE.

Cuando cree un índice de texto para la búsqueda de procedimiento, deberá determinar y calcular los siguientes parámetros:

Están disponibles los siguientes tipos de antememoria:

Una antememoria temporal
Se vuelve a crear con cada mandato DB2TEXT ACTIVATE CACHE y requiere que se carguen los datos de la tabla DB2 en la memoria. Esta acción lleva más tiempo que la activación de una antememoria permanente, especialmente para índices grandes. Sin embargo, es posible que proporcione un rendimiento ligeramente mejor en la búsqueda.

Una antememoria permanente
Se mantiene en el disco y puede correlacionarse rápidamente con memoria mediante el sistema operativo en cada mandato DB2TEXT ACTIVATE CACHE. En situaciones de actualización de índice incremental, debe permanecer activada para permitir la sincronización entre el índice y la antememoria. De lo contrario, el siguiente mandato DB2TEXT ACTIVATE CACHE volverá a crear la antememoria desde cero.

Están disponibles los siguientes métodos de actualización de índices de texto:

Sin la opción Recreate index on update
Evite la supresión y reinserción de un documento en la tabla ya que el hueco de un documento suprimido no se puede reutilizar en la antememoria. Por consiguiente, debe evitarse el cambio de columnas de claves en un índice activado.

También se conoce como actualización incremental.

Con la opción Recreate index on update
De este modo, el índice se vuelve a crear en cada actualización. Utilice tipos de datos variables en las expresiones de columna de antememoria siempre que sea posible. Esto ahorrará espacio de antememoria. Utilice las expresiones de difusión correspondientes en la cláusula CACHE TABLE.

Utilice esta opción si espera insertar más del 50% de sus documentos después de la activación inicial de índice.

Net Search Extender proporciona dos funciones SQL para ayudarle a determinar los parámetros de memoria de CREATE INDEX. Se trata de MAXIMUM CACHE SIZE y PCTFREE.

Para las actualizaciones incrementales y de recreación
La siguiente función UDF devuelve el valor recomendado MAXIMUM CACHE SIZE en megabytes (MB):
DB2EXT.MAXIMUM_CACHE_SIZE(maximumNumberDocs INTEGER, 
       averageRowLength INTEGER, numberOfCacheColumns INTEGER)

El mandato siguiente devuelve el parámetro de longitud media de fila de la tabla:

SELECT AVG(LENGTH(columna_1 antememoria) + ...
         + LENGTH(columna_n antememoria))

Tenga en cuenta que el promedio puede cambiar significativamente cuando se insertan más documentos en la tabla. El número de columnas de antememoria corresponde al número de expresiones de columna utilizadas en la cláusula CACHE TABLE del mandato DB2TEXT CREATE INDEX.

Para obtener información adicional, vea el Apéndice B, Utilización de grandes cantidades de memoria.

Sólo para las actualizaciones incrementales
La siguiente función UDF devuelve el valor recomendado PCTFREE basándose en el número real y máximo de documentos.
DB2EXT.PCTFREE(actualNumberDocs INTEGER, maximumNumberDocs INTEGER)

El número real de documentos es el número de filas de la tabla en el momento de ejecutar el primer mandato ACTIVATE CACHE, que crea la antememoria de memoria.

El número máximo de documentos es un cálculo del número máximo de documentos en la tabla antes de que se ejecute el siguiente mandato DB2TEXT ACTIVATE (para una antememoria temporal) o el mandato DB2TEXT ACTIVATE CACHE RECREATE (para una antememoria permanente).

Si vuelve a crear el índice en cada actualización, establezca el valor de PCTFREE en 0.

Ejemplos

Supongamos que tiene 10.000 filas en la tabla y no espera tener más de 20.000. Utilice la llamada siguiente para calcular el valor de PCTFREE necesario:

db2  "values DB2EXT.PCTFREE(10000,20000) "

Supongamos que el tamaño máximo de la fila es 20 000 y que tiene 2 columnas en la antememoria con un tamaño medio de 76. Utilice la llamada siguiente para obtener el tamaño:

db2 " values DB2EXT.MAXIMUM_CACHE_SIZE(20000,76,2) "

Después de determinar los parámetros adecuados, puede crear el índice y la tabla de antememoria utilizando la llamada siguiente:

db2text CREATE INDEX db2ext.comment FOR TEXT ON db2ext.texttab (comentario)
          CACHE TABLE (docid) PCTFREE 10 MAXIMUM CACHE SIZE 5

En este ejemplo, la columna docid se crea además del índice, utilizando la memoria principal para un retorno rápido de la tabla de resultados. Se reserva el diez por ciento de la memoria de antememoria para futuros documentos y la antememoria está limitada a un máximo de 5 MB.

Actualización del índice de texto

Para buscar en este índice, debe actualizar y, después, activar el índice. De este modo, la expresión de antememoria de tabla especificada de la base de datos se copia en la memoria.

Si durante las operaciones ACTIVATE o UPDATE, se sobrepasa MAXIMUM CACHE SIZE, se recomiendan las acciones siguientes:

Si espera actualizaciones frecuentes en los documentos, piense en utilizar tipos de datos de tamaño fijo para las expresiones de columna de antememoria en la cláusula CACHE TABLE. El ejemplo siguiente muestra cómo se puede utilizar el mismo almacenamiento de antememoria durante las operaciones de actualización:

CACHE TABLE(cast(C1 as char(20)), cast(substr(C2,1,10) as char(10))....

En este caso, asegúrese de que sólo se utilicen los tipos de datos no variables.

Activación y desactivación de la antememoria para un índice de texto

Antes de la activación de la antememoria, lleva a cabo todas las actualizaciones incrementales pendientes para evitar un cálculo pobre de PCTFREE.

Para activar el índice de texto, utilice el mandato siguiente:

db2text ACTIVATE CACHE FOR INDEX db2ext.comment FOR TEXT
 

Este mandato los datos de la tabla de la antememoria especificada de la base de datos y los almacena en la memoria. El tiempo que tarda depende del tamaño de la tabla.

Nota

Si llama a update index cuando un índice está activado, también actualizará las tablas de antememoria. Dado que los documentos suprimidos consumirán huecos de memoria de la antememoria, asegúrese de establecer PCTFREE con un valor suficientemente alto.

Es necesario volver a realizar la llamada a ACTIVATE CACHE cada vez que detenga el sistema. Si utiliza la antememoria permanente, la nueva activación será más rápida.

Nota

Si se produce una actualización cuando la antememoria permanente no está activada, en primer lugar se descarta la antememoria permanente y, a continuación, se vuelve a crear durante la llamada de activación.

Para guardar recursos, debe desactivar los índices que no se necesiten actualmente.

Para comprobar cuánta memoria queda, utilice la siguiente llamada:

db2text control show cache status for database cte index db2ext.comment

Mostrará si se ha activado el índice y cuánto espacio de la antememoria especificada queda.


Índices de texto en vistas

Puede crear índices de texto en vistas utilizando la función de procedimiento almacenado o de valor de tabla. Sin embargo, no se permite incluir ninguna función escalar, por ejemplo CONTAINS.

Otro inconveniente importante es que no se pueden crear activadores en vistas, de manera que los cambios en las tablas base subyacentes no se reconocen.

Por lo tanto, en caso de actualizaciones incrementales de índice, el usuario debe conocer qué documento se ha añadido, actualizado o suprimido para poder sincronizar el índice de texto con la base de datos. Para ello, debe añadir todos los cambios a la tabla de anotaciones cronológicas. Este proceso se muestra en el ejemplo siguiente:

  1. Para crear la tabla base, utilice el mandato siguiente:
    db2 "create table ejemplo (key INTEGER not null  PRIMARY KEY, name
                VARCHAR(50) not null, comment VARCHAR(90))" 
    
  2. Para añadir entradas, utilice los mandatos siguientes:
    db2 "insert into ejemplo values(1,'Claus','trabaja en la habitación 301')"
    db2 "insert into ejemplo values(2,'Manja','está en la misma oficina
                                   que Juergen')"
    db2 "insert into ejemplo values(2,'Juergen','es quien está más lejos de
                                   Raiko')"
    db2 "insert into ejemplo values(3,'Raiko','está sentado en la oficina 
    junto a Claus ')"
    
  3. Para crear la vista, utilice el mandato siguiente:
    db2 "create view vistaejemplo as select key, comentario from ejemplo"
    
  4. Utilice los mandatos siguientes para crear, actualizar y activar el índice de texto:
    db2text "create index vistaíndice for text on hde.sampleview(comentario)
                cache table (comentario) maximum cache size 1 key columns
                for index on view (clave)"
    db2text "update index vistaíndice for text"
    db2text "activate cache for index vistaíndice for text"
    
    Nota

    Debe especificar la tabla de antememoria para poder crear un índice de texto en una vista. Para crear la tabla de anotaciones cronológicas correcta, deberá especificar las columnas clave para el índice de la vista. Si crea un índice de este modo, también puede utilizar el índice con la función de valor de tabla.

    Cuando utilice la búsqueda de procedimiento almacenado en un entorno distribuido de DB2, debe especificar explícitamente un espacio de tabla para tablas de administración en un solo nodo y realizar llamadas explícitamente en este nodo. Para asegurarse de que se conecta al nodo adecuado, utilice la variable de entorno DB2NODE.

  5. Para actualizar la tabla, utilice los mandatos siguientes:
    db2 "insert into ejemplo values(4,'Bernhard','está trabajando en la misma
    planta que Manja, pero no que Claus')"
    db2 "insert into ejemplo values(5,'Guenter','comparte la oficina
    con Raiko')"
    
  6. Después actualice la tabla de anotaciones cronológicas. Para obtener el nombre de la tabla de anotaciones cronológicas, utilice el mandato siguiente:
    db2 "select INDSCHEMA,INDNAME,LOGVIEWSCHEMA,LOGVIEWNAME 
                from db2ext.textindexes"
    
    Éste es el diseño de la tabla de anotaciones cronológicas:
    sqltype               sqllen  sqlname.data             sqlname.length
    --------------------  ------  -----------------------  --------------
    496   INTEGER              4  OPERATION                       9
    392   TIMESTAMP           26  TIME                            4
    497   INTEGER              4  PK01                            4
    
    Para añadir entradas a la tabla de anotaciones cronológicas, utilice los mandatos siguientes:
    db2 "insert into ejemplo values(0,CURRENT TIMESTAMP,4)"
    db2 "insert into ejemplo values(0,CURRENT TIMESTAMP,5)"
    
    El primer valor describe la operación (0= insertar, 1 = actualizar, 2 = suprimir). El segundo siempre debería ser CURRENT TIMESTAMP y el último valor es la clave que se ha insertado.
  7. Utilice el mandato siguiente para volver a actualizar el índice:
    db2text "update index vistaíndice for text"
    

Ahora podrá realizar búsquedas con el procedimiento almacenado en los valores nuevos.


Consideraciones sobre el rendimiento

Para mejorar el rendimiento durante la creación del índice, tenga en cuenta los aspectos siguientes:

Nota

Para obtener los consejos más recientes para mejorar el rendimiento, visite el sitio Web de DB2 Net Search Extender: www.ibm.com/software/data/db2/extenders/netsearch/index.html


Mantenimiento de índices de texto

Este capítulo describe cómo mantener índices de texto y obtener información útil acerca de los mismos. Las tareas de mantenimiento son:

  1. Actualización y reorganización de un índice de texto
  2. Modificación de un índice de texto
  3. Supresión de sucesos de actualización de índice
  4. Eliminación de un índice de texto
  5. Visualización del estado del índice

Estas tareas pueden ejecutarse en cualquier momento y en cualquier orden. El capítulo incluye también información acerca de cómo realizar copia de seguridad y restaurar los índices y las bases de datos habilitadas.

Para conocer los mandatos que visualizan la información sobre los índices de texto, los nombres de directorios y las actualizaciones, consulte el Apéndice C, Catálogos de información de Net Search Extender.

También puede mantener un índice de texto utilizando el Centro de control de DB2. Consulte la sección Mantenimiento de un índice de texto.


[ Principio de página | Página anterior | Página siguiente | Contenido | Índice ]