No es infrecuente encontrar aplicaciones que hacen caso omiso del principio de usar bind variables y se comprueba que el rendimiento baja considerablemente por la elevada tasa de hard parsing que se produce. Casi sin pensarlo el desarrollador se refugia en el uso del parámetro cursor_sharing como la única alternativa para solucionar el problema.
En Oracle 11g se ha introducido el concepto de cursores inteligentes (Adaptive Cursor Sharing) y esto ayudará a generar los posibles planes de ejecución para los diferentes valores de bind. Con esto se pretende eliminar los problemas que se han sufrido por el bind peeking.
Vistas del diccionario
Hay cuatro vistas del diccionario de datos que se pueden utilizar para monitorizar el bind-peeking. Tres de estas son nuevas y son las siguientes:
- V$SQL_CS_HISTOGRAM : muestra la distribución de la ejecución a través de histogramas.
- V$SQL_CS_SELECTIVITY: presenta los cubos con la selectividad en los cursores para cada predicado en la declaración SQL.
- V$SQL_CS_STATISTICS : contiene la información estadística de la ejecución de los cursores compartidos. Es útil para decidir si se debe obligar a utilizar el uso compartido del cursor.
Además de estas nuevas vistas, V$SQL tiene dos nuevas columnas importantes para el control de los cursores compartidos (IS_BIND_SENSITIVE y IS_BIND_AWARE).
Un ejemplo de consulta podría ser el siguiente: