Riesgos de cambiar a ARITHABORT ON

12

Estoy trabajando con un proveedor con el acuerdo de que proporcionan la aplicación principal, y puedo construir mis propias extensiones siempre que no modifique la aplicación principal. Está construido en ColdFusion conectando a una base de datos SQL Server 2005.

Algunos de los informes que he creado dependen de vistas que utilizan funciones calculadas a partir de las tablas principales, y los informes se vuelven muy lentos a medida que las tablas se hacen más grandes. Para acelerar los informes, quiero usar vistas indexadas . Pero después de crear una vista indexada en mi entorno de prueba, la aplicación principal ya no podía insertarse en las tablas principales (devolvió un mensaje de error que ARITHABORTse requiere ONcuando se usan vistas indexadas).

Por lo tanto, parece que para usar vistas indexadas, necesito tener la aplicación principal SET ARITHABORT ONcada vez que inserto / actualizo las tablas principales. Ejecuté esto en mi entorno de prueba:

ALTER DATABASE MyDatabase SET ARITHABORT ON;

y parece funcionar bien Pero mi proveedor dice que dado que la aplicación tiene miles de consultas, podría existir el riesgo de que esta configuración rompa una de estas consultas, y si tenemos algún problema inesperado en la base de datos en el futuro, insistirán en que restaure la configuración predeterminada.

¿Hay consultas reales que se romperían SET ARITHABORT ON? ¿Hay alguna situación en la que sería mejor mantenerlo OFF?

TL; DR Para que funcionen mis nuevas vistas indexadas, necesito configurar ARITHABORT ONtoda la base de datos, pero mi proveedor advierte que será bajo mi propio riesgo. ¿Existe realmente un riesgo?

krubo
fuente

Respuestas:

9

Así que SET ARITHABORT ON básicamente dice "si un error de división por cero ocurre o sucede un desbordamiento aritmético abortar la consulta" Este es un comportamiento deseable y por lo general es la instancia predeterminada la configuración de ancho. Si esto causa problemas con las consultas de su proveedor, diría que pueden haber estado sufriendo algunos problemas de codificación para empezar. Les pediría más detalles sobre por qué están preocupados aquí.

De todas las reglas de vistas indexadas , llamaría a esto y muchas de las reglas de opciones establecidas son las menos controvertidas.

Esto debería establecerse en las conexiones que interactúan con la vista. Por lo tanto, desearía trabajar con el proveedor y realmente tratar de comprender su razonamiento e intentar que se comprometan con lo que están pensando en el gran desacuerdo aquí.

Dicho esto, las vistas indexadas son un poco importantes. Tienen otras reglas y pueden afectar la aplicación y las suposiciones que los desarrolladores del proveedor tenían al construir y realizar pruebas de rendimiento. Realmente debería tener una conversación con ellos sobre el problema comercial que está tratando de resolver a través de vistas indexadas e involucrarlos en la conversación sobre cómo resolver el problema.

Mike Walsh
fuente
7

El riesgo obvio de realizar este cambio es que las consultas de proveedores que se ejecutaron correctamente anteriormente podrían comenzar a arrojar errores o devolver resultados incorrectos. La ARITHABORTconfiguración controla en parte si el desbordamiento aritmético y los errores de división por cero devuelven un NULLresultado, finalizan la declaración con un error o finalizan el lote con un error. La forma en que el código del proveedor podría reaccionar al código que arroja un error en lugar de regresar NULLno es algo con lo que desee experimentar en un sistema de producción :)

Sin embargo, el riesgo es menor si el nivel de compatibilidad de su base de datos es 90 o superior, y las sesiones se ejecutan con SET ANSI_WARNINGS ON. Esta configuración debe haber sido ONcuando probó las vistas indexadas, pero debe confirmar la configuración efectiva utilizada por las conexiones de la aplicación de su proveedor. Management Studio puede configurarse para usar diferentes SETopciones de las establecidas por el código del proveedor al conectarse (y no puede anular las opciones predeterminadas de la base de datos o la instancia). Verifique con el proveedor y confirme rastreando el código del proveedor utilizando SQL Server Profiler.

Podría decirse que el mayor riesgo es que el proveedor se negará a admitir su instalación hasta que se restablezca la configuración OFF, pero aún así debe tratar de alentar a su proveedor a actualizar su código para que funcione con las SETopciones recomendadas , por lo que no tiene que elegir entre rendimiento y ejecución de una instalación compatible. Una alternativa es ejecutar informes contra una copia de la base de datos, por supuesto.

-- Recommended effective settings
SET NUMERIC_ROUNDABORT OFF;
SET ARITHABORT, 
    CONCAT_NULL_YIELDS_NULL, 
    QUOTED_IDENTIFIER, 
    ANSI_NULLS, 
    ANSI_PADDING,
    ANSI_WARNINGS ON;
Paul White 9
fuente