Skip to main content

Command Palette

Search for a command to run...

Crónica de una madrugada: Cuando SYS.siebel_stats amanece inválido en producción

MAMP | La Botica del DBA – Análisis de Casos Clínicos

Published
4 min read
 Crónica de una madrugada: Cuando SYS.siebel_stats amanece inválido en producción
M
Bienvenidos a "La Botica del DBA" Donde la pasión por las bases de datos Oracle se transforma en conocimiento y excelencia. Este espacio está diseñado para ser el laboratorio de ideas, soluciones y estrategias que todo DBA necesita para optimizar, innovar y liderar en el mundo de las bases de datos. Desde los fundamentos hasta las últimas tendencias, aquí encontrarás guías prácticas, análisis profundos y herramientas que impulsarán tu carrera y tus proyectos al siguiente nivel.

Son las 3:00 AM. Estás revisando los reportes de salud de tu clúster RAC en producción y de pronto, una alerta llama tu atención: un objeto en el esquema SYS amaneció inválido. Y no es cualquier objeto, se llama siebel_stats.

El pulso se acelera por un segundo. Todos hemos estado ahí. Las preguntas caen en cascada: ¿Me hackearon? ¿Alguien metió las manos en el motor? ¿Es un proceso interno de Siebel que falló? Y lo más extraño: a los pocos minutos, el objeto vuelve a estar válido por arte de magia.

Como boticarios del dato, no podemos permitirnos cajas negras en nuestra infraestructura. Así que acompáñame a destripar este paquete, entender por qué hace lo que hace, y por qué, en realidad, es uno de los mejores aliados que puedes tener en un entorno Oracle 12c con CRM Siebel.


🔬 El Síntoma: ¿De dónde salió este fantasma?

Primero, bajemos las pulsaciones. Este paquete no es un intruso, pero tampoco viene preinstalado de fábrica ni con el motor de Oracle Database ni con los binarios de Siebel.

Si miramos bajo el capó y leemos la cabecera del código fuente, encontramos esta joya: REM \(Header: coe_gather_statistics.sql 11.4.4.6 2015/09/09 abel.macias carlos.sierra \)

Estamos ante una auténtica receta magistral del Oracle Center of Excellence (COE), firmada por referentes absolutos del rendimiento como Carlos Sierra y Abel Macias. Es un script implementado a medida (probablemente en alguna ventana de afinamiento pasada o por recomendación de Oracle ACS) para domar al Optimizador Basado en Costos (CBO) frente al complejo modelo de datos de Siebel.

¿Y por qué se invalidó y compiló solo? Pura mecánica de Oracle. Si alguna dependencia de este paquete (como la tabla de auditoría siebel_stats_log o alguna vista del diccionario de datos) sufre el más mínimo cambio o mantenimiento, el paquete pasa a estado INVALID. Cuando el Scheduler intenta correr la rutina de madrugada, entra en acción la Recompilación Diferida (Deferred Recompilation): Oracle nota la invalidez, verifica que la estructura sigue siendo coherente y lo recompila al vuelo, ejecutándolo sin que nosotros movamos un dedo.


⚗️ La Fórmula Magistral: Traduciendo el código

Lanzar un DBMS_STATS.GATHER_SCHEMA_STATS tradicional en un entorno Siebel es como intentar navegar por Santiago con un mapa del año 1990: el optimizador va a tomar decisiones desastrosas. Este paquete del COE interviene exactamente ahí.

Analicemos sus ingredientes clave:

  • Filtro Quirúrgico: El motor no pierde tiempo. El script ignora la basura y se enfoca solo en tablas estándar de Siebel (S_%) y extensiones customizadas (CX_%), saltándose inteligentemente las tablas de ETL.

  • La vacuna contra los Nested Loops: Siebel es especialista en crear cientos de tablas vacías. Si Oracle ve "0 filas" en sus estadísticas, asume un costo bajísimo y arma Nested Loops masivos que terminan asfixiando la CPU. ¿Qué hace nuestra fórmula? Si una tabla tiene menos de 15 registros, borra las estadísticas y bloquea la tabla (DBMS_STATS.LOCK_TABLE_STATS). Esto fuerza al motor a usar Dynamic Sampling, calculando la ruta en tiempo real. Magia pura.

  • Evolución a 12c: El código es inteligente. Detecta que estamos en la versión 12.2.0.1 y delega el cálculo del muestreo a DBMS_STATS.AUTO_SAMPLE_SIZE. Este algoritmo de hash moderno es brutalmente rápido y nos entrega estadísticas precisas en una fracción del tiempo que tomaría en un 11g.

  • Histogramas a la medida: La regla de oro en Siebel es recolectar estadísticas solo para columnas indexadas. Sin embargo, el script hace excepciones a mano para el corazón de la visibilidad del CRM (S_POSTN_CON, S_ORG_BU, S_ORG_GROUP), forzando el análisis de todas las columnas. Le estamos dando al optimizador una radiografía perfecta de dónde están los cuellos de botella.

💊 Contraindicaciones y Monitoreo

Tener a SYS.siebel_stats operando en las sombras no es un riesgo, es un seguro de vida. Su labor nocturna es la barrera entre un día de operaciones fluido y un colapso generalizado de la aplicación.

Como única recomendación de monitoreo, acostúmbrate a revisar periódicamente la tabla siebel_stats_log. Ahí es donde el procedimiento deja anotado si tropezó con algún ORA-XXXXX mientras tú y yo intentábamos dormir un par de horas.


Ahora les paso el micrófono a ustedes: ¿Les ha tocado lidiar con el optimizador en entornos Siebel pesados? ¿Tienen implementadas otras recetas del COE en sus motores? ¡Los leo en los comentarios para debatir!