it-swarm-es.tech

¿Con qué frecuencia se deben ejecutar las estadísticas de la base de datos Oracle?

En su experiencia, ¿con qué frecuencia se deben ejecutar las estadísticas de la base de datos Oracle? Nuestro equipo de desarrolladores descubrió recientemente que las estadísticas no se habían ejecutado en nuestra caja de producción en más de 2 1/2 meses. Eso me parece mucho tiempo, pero no soy un DBA.

21
user290

En mi último trabajo, ejecutamos estadísticas una vez por semana. Si no recuerdo mal, los programamos un jueves por la noche, y el viernes los DBA tuvieron mucho cuidado de monitorear las consultas más largas para detectar cualquier imprevisto. (El viernes fue elegido porque a menudo era justo después de la publicación de un código, y tendía a ser un día con poco tráfico). Cuando veían una consulta incorrecta, encontraban un mejor plan de consulta y lo guardaban para que no volviera a cambiar inesperadamente. . (Oracle tiene herramientas para hacer esto automáticamente, usted le dice a la consulta que se optimice y lo hace).

Muchas organizaciones evitan ejecutar estadísticas por temor a que surjan inesperadamente planes de consulta erróneos. Pero esto generalmente significa que sus planes de consulta empeoran con el tiempo. Y cuando ejecutan estadísticas, se encuentran con una serie de problemas. La lucha resultante para solucionar esos problemas confirma sus temores sobre los peligros de ejecutar estadísticas. Pero si ejecutaban estadísticas regularmente, usaban las herramientas de monitoreo como se suponía que debían hacerlo y solucionaban los problemas a medida que surgían, entonces tendrían menos dolores de cabeza y no los encontrarían todos a la vez.

13
user11318

Cada vez que los datos cambian "significativamente".

Si una tabla va de 1 fila a 200 filas, eso es un cambio significativo. Cuando una tabla pasa de 100,000 filas a 150,000 filas, eso no es un cambio terriblemente significativo. Cuando una tabla va de 1000 filas, todas con valores idénticos en la columna X comúnmente consultada, a 1000 filas con valores casi únicos en la columna X, eso es un cambio significativo.

Las estadísticas almacenan información sobre recuentos de elementos y frecuencias relativas, cosas que le permitirán "adivinar" cuántas filas coincidirán con un criterio dado. Cuando adivina mal, el optimizador puede elegir un muy plan de consulta subóptimo.

13
Jonathan Rupp

Dado que las estadísticas de Oracle 11g se recopilan automáticamente de forma predeterminada.

Dos ventanas del Programador están predefinidas después de la instalación de Oracle Database:

  • WEEKNIGHT_WINDOW comienza a las 10 p.m. y termina a las 6 a.m. de lunes a viernes.
  • WEEKEND_WINDOW cubre días enteros los sábados y domingos.

¿Cuándo se recopilaron las estadísticas por última vez?

SELECT owner, table_name, last_analyzed FROM all_tables ORDER BY last_analyzed DESC NULLS LAST; --Tables.
SELECT owner, index_name, last_analyzed FROM all_indexes ORDER BY last_analyzed DESC NULLS LAST; -- Indexes.

Estado de la recopilación automática de estadísticas?

SELECT * FROM dba_autotask_client WHERE client_name = 'auto optimizer stats collection';

Grupos de Windows?

SELECT window_group_name, window_name FROM dba_scheduler_wingroup_members;

Horarios de ventana?

SELECT window_name, start_time, duration FROM dba_autotask_schedule;

Recopilar manualmente las estadísticas de la base de datos en este esquema:

EXEC dbms_stats.gather_schema_stats(ownname=>NULL, cascade=>TRUE); -- cascade=>TRUE means include Table Indexes too.

¡Recopile manualmente las estadísticas de la base de datos en todos los esquemas!

-- Probably need to CONNECT / AS SYSDBA
EXEC dbms_stats.gather_database_stats;
13
grokster

¿Qué versión de Oracle estás usando? Consulte esta página que se refiere a Oracle 10:

http://www.acs.ilstu.edu/docs/Oracle/server.101/b10752/stats.htm

Dice:

El enfoque recomendado para recopilar estadísticas es permitir que Oracle recopile automáticamente las estadísticas. Oracle recopila estadísticas de todos los objetos de la base de datos automáticamente y mantiene esas estadísticas en un trabajo de mantenimiento programado regularmente.

5
David Medinets

Con la versión 10g y superior de Oracle, el optimizador necesita estadísticas actualizadas sobre tablas e índices para tomar una "buena" decisión del plan de ejecución. La frecuencia con la que recopila estadísticas es una decisión difícil. Depende de su aplicación, esquema, velocidad de datos y práctica comercial. Algunas aplicaciones de terceros que están escritas para ser compatibles con versiones anteriores de Oracle no funcionan bien con el nuevo optimizador. Esas aplicaciones requieren que las tablas no tengan estadísticas para que db recurra al plan de ejecución de la base de reglas. Pero, en promedio, Oracle recomienda que las estadísticas se recopilen en tablas con estadísticas obsoletas. Puede establecer tablas para supervisar y verificar su estado y hacer que analicen si/cuando está obsoleto. A menudo eso es suficiente, a veces no lo es. Realmente depende de su base de datos. Para mi base de datos tenemos un conjunto de OLTP tablas que necesitan una recopilación de estadísticas nocturnas para mantener el rendimiento. Otras tablas se analizan una vez por semana. En nuestra gran base de datos dw, analizamos según sea necesario ya que las tablas son demasiado grandes para un análisis regular sin afectar la carga y el rendimiento general de db. Entonces, la respuesta correcta es que depende de la aplicación, el cambio de datos y las necesidades comerciales.

2
MichaelN

Cuando administraba un gran sistema de planificación multiusuario respaldado por Oracle, nuestro DBA tenía un trabajo semanal que recopilaba estadísticas. Además, cuando lanzamos un cambio significativo que podría afectar o verse afectado por las estadísticas, obligaríamos al trabajo a quedarse sin ciclo para que las cosas se pongan al día.

2
Joe Skora

Asegúrese de equilibrar el riesgo de que las estadísticas recientes provoquen cambios no deseados en los planes de consulta frente al riesgo de que las estadísticas obsoletas puedan provocar cambios en los planes de consulta.

Imagine que tiene una base de datos de errores con una tabla ISSUE y una columna CREATE_DATE donde los valores en la columna aumentan más o menos monotónicamente. Ahora, suponga que hay un histograma en esta columna que le dice a Oracle que los valores de esta columna se distribuyen uniformemente entre el 1 de enero de 2008 y el 17 de septiembre de 2008. Esto hace posible que el optimizador pueda estimar razonablemente el número de filas que se devolverá si estaba buscando todos los problemas creados la semana pasada (es decir, del 7 al 13 de septiembre). Sin embargo, si la aplicación continúa utilizándose y las estadísticas nunca se actualizan, este histograma será cada vez menos preciso. Por lo tanto, el optimizador esperará que las consultas para "problemas creados la semana pasada" sean cada vez menos precisas con el tiempo y eventualmente puede hacer que Oracle cambie el plan de consultas negativamente.

1
Justin Cave

En general, no se recomienda recopilar estadísticas tan frecuentes en toda la base de datos a menos que tenga una justificación sólida para ello, como una inserción masiva o un gran cambio de datos con frecuencia en la base de datos. la recopilación de estadísticas en la base de datos en esta frecuencia PUEDE cambiar el plan de ejecución de consultas a un nuevo plan de ejecución deficiente, lo que puede costarle mucho tiempo tratar de ajustar cada consulta afectada por los nuevos planes deficientes, es por eso que debe probar el impacto de la recopilación nuevas estadísticas en una base de datos de prueba, o en caso de que no tenga el tiempo o la mano de obra para eso, al menos debe mantener un plan alternativo haciendo una copia de seguridad de las estadísticas originales antes de reunir otras nuevas, por lo que en caso de que reúna un nuevas estadísticas y luego las consultas no funcionaron como se esperaba, puede restaurar fácilmente las estadísticas originales.

Hay una secuencia de comandos muy útil que puede ayudarlo a hacer una copia de seguridad de las estadísticas originales y recopilar otras nuevas, y proporcionarle un comando SQL que puede usar para restaurar las estadísticas originales en caso de que la cosa no saliera como se esperaba después de recopilar nuevas estadísticas. Puede encontrar el script en este enlace: http://dba-tips.blogspot.com/2014/09/script-to-ease-gathering-statistics-on.html

0
Chion

En el caso de un sistema de tipo almacén de datos, puede considerar no recopilar estadísticas en absoluto y confiar en el muestreo dinámico (estableciendo optimizer_dynamic_sampling en el nivel 2 o superior).

0
David Aldridge