Algo sobre Bind Variables

0

Les comento una experiencia que tuve en un trabajo en el que se ejecutaban consultas con variables bind y había serios problemas de performance.

Ejemplo simple:

un cliente compra un item, y en base a varios factores (tomemos la categoria para resumir) un algoritmo determina con que parametros buscar “items recomendados” que se estiman serían de su preferencia o posible consumo.

Si el cliente compra una pelicula, un juego, o algo de la categoria “Accion” las posibles recomendaciones exagerando un poco, son muchisimas, pero… si compra algo de la categoria “Etica” tenemos pocos productos y recomendaciones…

Si la sentencia en cuestion usa una bind variable, la primera vez que se parsea, se genera un plan de ejecución en base al valor que recibe de la variable y se usará el mismo plan hasta que la sentencia sea reparseada. Para nuestro ejemplo, reciniciamos el motor de la base de datos y el primer cliente compro una peli de aventuras…

Esto trae acarreado problemas de performance. Inicialmente la sentencia requerie un full table scan de una tabla pesada, al pasarle otro valor con el cual deberia usar un indice, como es el caso del libro “Etica y Moral Profesional” se hace el full_scan de forma innecesaria.

Desde la consola de control del Enterprise Manager al detectarse en tiempo real la ejecucion del query se corria el SQL Advisor y la recomendacion obtenida era cambiar el plan de ejecucion. (Todo muy lindo… pero… que pasa si vuelven a comprar una peli de aventuras ???)…

En 11g mejoraron esto con Adaptive Cursors para que la base de datos se vaya adaptando a distinto valores de bind variables (Ver el siguiente link: 11g: Adaptive Cursors and SQL Plan Management ). Una posible forma de solucionarlo es usar valores literales.

A modo de anexo, dejo un query para ver los valores de las bind variables. Tiene sus limitaciones… al menos en 10g estoy seguro que no permite ver los campos definidos del tipo TIMESTAMP.

NOTA: el sql_id se obtiene de las vistas dinamicas: V$SQL, V$SQLTEXT, o V$SQLAREA.


SELECT
a.sql_text,
b.name,
b.position,
b.datatype_string,
b.value_string
FROM
v$sql_bind_capture b,
v$sqlarea          a
WHERE
b.sql_id = '6pgbca7x2pc09'
AND
b.sql_id = a.sql_id;

Oracle Technology Network Developer Day – Hands-on Database Application Development

0

Cursando a distancia con la gente de TechLearning empece a probar una máquina virtual que esta disponible via OTN con software de Oracle preconfigurado bajo Linux y me parecio muy piola para tener un entorno de prueba facil de instalar.

Enlace: http://www.oracle.com/technetwork/database/enterprise-edition/databaseappdev-vm-161299.html

Contenidos de la VM:

  • Oracle Linux 5
  • Oracle Database 11g Release 2 Enterprise Edition
  • Oracle TimesTen In-Memory Database Cache
  • Oracle XML DB
  • Oracle SQL Developer
  • Oracle SQL Developer Data Modeler
  • Oracle Application Express
  • Oracle JDeveloper
  • Hands-On-Labs

Auditoría DML en SQL Server 2005

0

Objetivo: auditar sentencias insert, update, delete sobre tablas con opciones de recuperación


Post de Referencia:Agregar un simple Trigger para auditar tu base de datos SQL Server” del blog de Estevan Zavala.


Se agregaron detalles de seguridad: evitar que la tabla de auditoría pueda ser consultada o modificada por usuarios que no correspondan, esto es aplicando esquemas y que el trigger se ejecute con la clausula WITH EXECUTE AS. En el procedimiento se deberia contemplar el truncar la tabla periodicamente.

Creamos una una base para pruebas llamada Pruebas_Auditoria.

Se crean 2 tablas, una llamada tabla para los usuarios de aplicaciones, y otra llamada audit, para el registro y seguimiento de auditoria.

La primera se mantiene bajo el esquema dbo, mientras que la segunda  pertenecera a un nuevo esquema que llamamos audit.

Se crean usuarios con distintos tipos de acceso (con la nomenclatura utest_# utilizada mas adelante), las sentencias insert, delete, update realizadas se registran en la tabla de auditoria, registrando el valor nuevo y el anterior, por medio de un trigger que es ejecutado con el usuario Auditor, el único con permisos de escritura sobre dicha tabla. (more…)

SQLSTacklebox

Libros Recomendados – SQL Server

0

Post sobre recomendaciones de libros, white papers, etc. sobre MS SQL Server.

 

SQL Server Tacklebox
Essential Tools and Scripts for the day-to-day DBA

Autor: Rodney Landrum

Publicado por: Simple Talk Publishing

Año: 2009

(more…)

rodado26

Entrenamiento para Cicloturismo

0

Más Info en: www.rodado26.com.ar


Go to Top