El parametro CURSOR_SHARING

Como vimos en el post Parseo, la etapa de parseo compara el texto de una sentencia con las sentencias existentes en la shared pool a fin de determinar si la sentencia puede ser compartida. Si el texto de la sentencia difiere, Oracle no comparte el cursor. El parametro CURSOR_SHARING permite al DBA modificar este comportamiento de “matching” del parser de SQL de Oracle. El valor por defecto de este parametro es EXACT, el cual fuerza al parser a buscar una sentencia exactamente igual para que el cursor pueda ser compartido. Dicho comportamiento puede ser modificado cambiando el valor del parametro CURSOR_SHARING a SIMILAR o FORCE, el cual permite que el parser considere como identicas todas las sentencias que sean iguales en todos los aspectos excepto en los valores literales.

De este modo, dos sentencias que son iguales en todo excepto en los literales, podran compartirse si se modifica el comportamiento del parser de SQL a traves del parametro CURSOR_SHARING.

Por ejemplo, las sentencias

a) select * from clientes where cliente_id = 14;
b) select * from clientes where cliente_id = 66;

seran tomadas como diferentes si CURSOR_SHARING = EXACT y por lo tanto no compartiran cursor. En cambio seran consideradas como identicas si CURSOR_SHARING = SIMILAR o FORCE, y por lo tanto compartiran cursor.

Existen muchisimas aplicaciones ya desarrolladas que no hacen uso de variables de bind (bind variables) o utilizan sql dinamico. Estas aplicaciones muy probablemente esten haciendo mal uso de la memoria de Oracle y tengan problemas de performance debido al incremento del tiempo de respuesta de las sentencias SQL por no encontrar, en la library cache, cursores para compartir. El problema puede haber sido diagnosticado correctamente aunque modificar toda la aplicacion para que haga uso de variables de bind puede requerir de la inversion de un esfuerzo enorme. En estos casos la utilizacion de CURSOR_SHARING puede resultar sencilla y dar resultados inmediatos. Sin embargo, el uso de cursor sharing no esta recomendado para todos los ambientes ni todas las versiones de Oracle.

La diferencia entre SIMILAR y FORCE esta fuera del alcance de este post. Como mencionamos en el parrafo anterior, el uso de cursor sharing no esta recomendado para todos los ambientes ni versiones de Oracle. El lector puede recurrir a la documentacion oficial de Oracle para mas detalle.

1 Comentario(s)

  1. Gracias por el aporte, dentro de los temas de tunning que realice a mi base de produccion, nunca se me ocurrio que el desarrollador no utilizara variables BIND y mi Miss Cache Hit Ratio estaba en un 90% puse el CURSOR_SHARING en FORCE y listo


RSS de los Comentarios Identificador URI de TrackBack

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.