Este documento muestra como crear y configurar caches dentro de ASE así como algunos conceptos técnicos.
1.¿Qué son los "Cachés con Nombre" y para qué sirven?
Inicialmente, Adaptive Server Enterprise cuenta con un único caché de datos, llamado el default data caché. Mediante su Administrador Lógico de Memoria (Logical Memory Manager, LMM) es posible realizar un particionamiento lógico del caché de datos, creando de múltiples "cachés con nombre".
Una vez creados, es posible asociar a ellos objetos de base de datos (tablas, índices, logs de transacciones, o incluso una base de datos completa), de tal manera que las operaciones de lectura / escritura asociadas a éstos objetos se realicen únicamente sobre el área de caché asociada al objeto (o base de datos). Adicionalmente, es posible configurar, para cada caché, bancos de memorias intermedias que permiten a Adaptive Server Enterprise realizar operaciones de lectura / escritura utilizando bloques de 2, 4, 8 o 16 Kb.
Mediante la creación y configuración de múltiples cachés con nombre se persigue el uso óptimo de la memoria caché, a través de la minimización de la contención de las operaciones de lectura / escritura; esto aumenta los niveles de concurrencia y mejora notablemente los tiempos de respuesta.
2.¿Cómo determino el estado actual del caché de datos de Adaptive Server Enterprise?
Utilizando el procedimiento almacenado del sistema sp_helpcache:
isql -Usa -P
1> sp_helpcache
2> go
Cache Name Config Size Run Size Overhead
------------------------ ------------- ---------- ----------
default data cache 0.00 Mb 245.20 Mb 24.03 Mb
tablastrans2_cache 50.00 Mb 50.00 Mb 5.00 Mb
tablastrans_cache 2.00 Mb 2.00 Mb 0.25 Mb
tempdb_cache 135.00 Mb 135.00 Mb 14.13 Mb
Memory Available For Memory Configured
Named Caches To Named Caches
-------------------- ----------------
443.42 Mb 187.00 Mb
There is 256.42 Mb of memory left over that will be allocated to the default cache
En este ejemplo, el tamaño total del caché de datos es de443.42 Mb, distribuidos así:
-
50.0 Mb para el caché con nombre tablastrans2_cache
-
2.0 Mb para el caché con nombre tablastrasn_cache
-
135 MB para el cache con nombre tempdb_cache
-
Los restantes 245.20 Mb quedan para el caché default data cache
3.¿Cómo creo cachés con nombre adicionales?
Los nuevos caches con nombre se crean a expensas del default data cache. Para ésto se utiliza el procedimiento almacenado del sistema sp_cacheconfig:
isql -Usa -P
1> sp_cacheconfig "prueba_cache", "8M"
2> go
En este ejemplo se configuró un nuevo caché con nombre, prueba_cache, que utilizará 8 Mb de los 245.20 Mb disponibles en el default data cache. Adaptive Server Enterprise debe ser reiniciado para que el nuevo caché entre en efecto.
Una vez reiniciado Adaptive Server Enterprise, es posible verificar la nueva configuración de cachés, utilizando el procedimiento almacenado del sistema sp_helpcache:
isql -Usa -P
1> sp_helpcache
2> go
Cache Name Config Size Run Size Overhead
------------------------ ------------- ---------- ----------
prueba_cache 8.00 Mb 8.00 Mb 0.44 Mb
default data cache 0.00 Mb 237.20 Mb 24.03 Mb
tablastrans2_cache 50.00 Mb 50.00 Mb 5.00 Mb
tablastrans_cache 2.00 Mb 2.00 Mb 0.25 Mb
tempdb_cache 135.00 Mb 135.00 Mb 14.13 Mb
Memory Available For Memory Configured
Named Caches To Named Caches
-------------------- ----------------
435.42 Mb 195.00 Mb
There is 237.20 Mb of memory left over that will be allocated to the default
cache
Note como el tamaño del caché default data cache disminuyó en 8 Mb, el tamaño del nuevo caché con nombre, después de la creación del mismo.
4.¿Cómo asocio un objeto a un caché con nombre?
Al asociar un objeto a un caché con nombre, las operaciones de lectura / escritura sobre dicho objeto se realicen utilizando sólo el área de cache asociada al objeto. Esta asociación se realiza utilizando el procedimiento almacenado del sistema sp_bindcache:
isql -Usa -P
1> use pubs2
2> go
1> sp_bindcache "prueba_cache", "pubs2", "authors"
2> go
En este ejemplo se asoció la tabla authors de la base de datos pubs2 al caché con nombre prueba_cache. Utilizando este procedimiento también es posible asociar bases de datos, índices o logs de transacciones a un nuevo caché con nombre. Este paso NO requiere que Adaptive Server Enterprise sea reiniciado.
5.¿Cuantos objetos puedo vincular a un caché con nombre?
Es posible vincular múltiples objetos a un mismo caché con nombre.
6.¿Un objeto puede estar vinculado a varios cachés con nombre?
No. Un objeto sólo puede estar vinculado a un caché con nombre a la vez.
7.¿Cómo configuro bloques de lectura / escritura de tamaño mayor a 2 Kb para un caché con nombre?
El configurar bloques de tamaño mayor a 2 Kb para un caché con nombre permite que Adaptive Server Enterprise realice operaciones de lectura / escritura utilizando bloques de 4, 8 o 16 Kb, en vez de utilizar el tamaño por defecto de 2 Kb. Esto se realiza utilizando el procedimiento almacenado del sistema sp_poolconfig:
isql -Usa -P
1> sp_poolconfig "prueba_cache", "4M", "8K"
2> go
En el ejemplo, se creó un área de 4 Mb, dentro del caché prueba_cache, sobre el cual Adaptive Server Enterprise podrá realizar operaciones de lectura / escritura de 8 Kb. Esto permitirá que para ciertas operaciones SQL, el manejador seleccione bloques de 8 Kb para realizar operaciones de lectura / escritura, en vez de bloques de 2 Kb minimizando así las operaciones realizadas sobre la memoria. Este paso NO requiere que Adaptive Server Enterprise sea reiniciado.
8.¿Cómo verifico el estado actual de un caché con nombre?
Utilizando el procedimiento almacenado del sistema sp_helpcache:
isql -Usa -P
1> sp_helpcache "prueba_cache"
2> go
Cache Name Config Size Run Size Overhead
------------------------ ------------- ---------- ----------
prueba_cache 8.00 Mb 8.00 Mb 0.44 Mb
------------------ Cache Binding Information: ------------------
Cache Name Entity Name Type Index Name Status
---------- ----------- ---- ---------- ------
prueba_cache pubs2.dbo.authors table V
Utilizando el procedimiento almacenado del sistema sp_cacheconfig:
isql -Usa -P
1> sp_cacheconfig "prueba_cache"
2> go
Cache Name Status Type Config Value Run Value
------------------------------ --------- -------- ------------ ------------
prueba_cache Active Mixed 8.00 Mb 8.00 Mb
------------ ------------
Total 8.00 Mb 8.00 Mb
==============================================
Cache: authors_cache, Status: Active, Type: Mixed
Config Size: 8.00 Mb, Run Size: 8.00 Mb
Config Replacement: strict LRU, Run Replacement: strict LRU
IO Size Wash Size Config Size Run Size APF Percent
-------- --------- ------------ ------------ -----------
2 Kb 1638 Kb 0.00 Mb 8.00 Mb 10
9.¿Cómo elimino una asociación entre un objeto y un caché con nombre?
Para eliminar una asociación entre un objeto y un caché con nombre se utiliza el procedimiento almacenado del sistema sp_unbindcache:
isql -Usa -P
1> use pubs2
2> go
1> sp_unbindcache pubs2, authors
2> go
También es posible "desvincular" todos los objetos asociados a un caché con nombre utilizando el procedimiento almacenado del sistema sp_unbindcache_all:
isql -Usa -P
1> sp_unbindcache_all prueba_cache
2> go
Una vez desvinculado, el objeto (u objetos) utilizan el default data cache para sus operaciones de lectura / escritura.
10.¿Cómo elimino un caché con nombre?
Para eliminar un caché con nombre se utiliza el procedimiento almacenado del sistema sp_cacheconfig, especificando un tamaño de 0 Mb:
isql -Usa -P
1> use master
2> go
1> sp_cacheconfig "prueba_cache", "0M"
2> go
Adaptive Server Enterprise debe ser reiniciado para que el nuevo caché quede eliminado.
Tips para caches
- Siempre se de debe de estar seguro que el "default data cache" es lo suficientemente grande para toda la actividad que no esta ligada a algun cache en espefífico. Todos los objetos que no estan ligados a un cache usan el "default data cache", esto inlcuye a tablas del sistema, tablas de usuario, tablas de master.
- Durante la recuperacion de ASE, solo es utilizado el pool de 2k. Las transacciones del log son leidas dentro del pool de 2k del defualt data cache y si las transacciones requieran realizar un rollback o rollforward deben de leer las páginas del default data cache, si este es muy pequeño la recuperación puede ser muy lenta.
- Si tempdb es muy utilizado por las aplicaciones, ligelo a un propio cache. Note que solo puede ligar toda la base de tempdb, no objetos individuales.
- Caches con un gran numero de updates, asegure que el "wash size" es suficientemente largo.