Error en SQL Server y lentitud de reportes

Hola Gente… en esta oportunidad necesito de la ayuda y conocimiento de alguien que sea más orientado a Bases de datos que a SAP B1.

Desde el jueves pasado, estoy presentando un problema en mi servidor, los reportes que antes salían en SAP B1 en cuestión de segundos o a lo mucho 1 minuto, ahora están tardando entre 5 y 9 minutos (y eso si no arroja SAP B1 un error de memoria insuficiente). La cosa es que ya no es solo reportes hechos para información de la gerencia (que pensé que al ser informes gerenciales podría ser por la carga y cantidad de datos), esto comienza a afectarme por ejemplo la visualización de una factura en el reporte de crystal, o en el reporte de Analisis de Ventas nativo de SAP, seleccionando solo 1 mes (ni hablar si le pongo 1 año).

Me metí al servidor y observo que tampoco es que esté sobre-usado. La ram está ocupando 40% de memoria, (de los cuales un 30% corresponde a SQL Server, pero eso aquí es normal, nunca lo he visto por debajo de 17% ni cuando se reinicia el server), la base de datos principal llega solo a 53GB. Y el CPU está en un 8% de uso.

Pensé por un momento que podía ser algo de memoria o performance del server. por eso revisé memoria y CPU.
Realicé un query rápido en el server, un Select * from OINV inner join INV where fecha >= 01/01/2021 and Fecha<= 23/02/2021 (del primero de enero al día de ayer para no tomar un periodo muy grande), y el mismo SQL arroja este mensaje de error:

An error occurred while executing batch. Error message is: Se produjo una excepción de tipo ‘System.OutOfMemoryException’.

Revisando en san Google, dice que es cuando el servidor no tiene más memoria… pero vamos… el servidor tiene 96GB de RAm y no está usando ni 26GB. no puede ser por memoria…

¿Algo que me recomienden revisar o hacer?

(dejo imagen del error en SQL y de la memoria del server)

Te respondo rapidamente el problema.

Básicamente el servidor donde esta alojado SAP tarda todo ese tiempo en resolver la QUERY del informe / Layout de crystal.

Y básicamente, por mas “Simple” que sea la query lo que importa es la cantidad de datos y tablas que consulte la QUERY…

Ten cuidado con este error, tuve una mala experiencia donde les salto un error a todos los usuarios y tuvieron que salir, tuve que reinicar servidor suse, windows, un caos… como 2 horas de trabajo fuerte…

por otra parte esta query la veo mal

Cita Select * from OINV inner join INV where fecha >= 01/01/2021 and Fecha<= 23/02/2021

SELECT * 
FROM OINV T0 
INNER JOIN INV1 T1 ON T0."DocEntry" = T1."DocEntry" /* ES MUY IMPORTANTE LA CONDICION DEL JOIN */
WHERE T0."DocDate" <= '20210224' and T0."DocDate" >= '20210124'

Si. el query lo puse de ejemplo xD… en eso no tengo tanto problema… lo escribí rápido aquí, es solo un ejemplo de que puse a correr un query rápido para ver la respuesta del server y me arrojó ese error.

La cosa es que por ejemplo ese query no debería de tardar tanto.

Vamos. el analisis de ventas lo tomo solo a 7 días y se tarda entre 3 y 4 min en responder…

El problema en sí no lo veo tanto en el query, (pues pasa con casi todo ahorita), incluso un
Select top 1000 * from OINV where Docdate >= '02/01/2021' me está tardando 3 minutos para traerme apenas unas 388 líneas de facturas de lo que va de febrero. al mes no se hacen más de 500 facturas (en un mes bueno)
UPDATE:
Estoy monitoreando el SQL a ver si veo algún proceso que esté provocando bloqueos a la BD, pero aún con las estadisticas en bajo se queda tiempo excesivo en querys simples.

Ya.

Chequea el status del Servidor donde esta alojado SAP.

Talvez hay algun servicio que hace que no le pueda dedicar la velocidad de respuesta necesaria.

En cuanto a SQL no le veo nada…

Lo que mencionas de los servicios. ¿Cómo puedo ver el consumo de los mismos?

Solo se que puedo ver los que estén ejecutándose en donde se configuran los servicios, y a lo mucho puedo ver en el administrador de tareas el uso de CPU y/o de Memoria:

ni de memoria

Ni de disco

Y tampoco veo problemas de la red

  • Te recomiendo limitar tu SQL para que no use la memoria disponible como viene por default.

  • Adicional, si tu BD ya tienes 5 años o mas de uso y es de alta transaccionabilidad te recomiendo contar con un PLAN DE MANTENIMIENTO para la BD.

  • Es recomendado analizar # de clientes que accesan, procesos que realizan.

  • Optimizar vistas , consultas, reportes.

  • En lo personal te recomiendo usar arquitectura 64 bits en la instalacion de tu SAP

  • No tener instalado ningun servicio de red en el server como AD, y otros.

saludos

Juuuusto el tipo de cosas que me faltan por revisar…

  • El SQL ya lo tengo configurado para que máximo me consuma unos 65GB (el server tiene 94GB de ram)

  • De plan de mantenimiento solo tengo los Back Up diarios xD… ¿Qué recomiendas en ese plan de mantenimiento? (ya tienen 7 años las BD)

  • Numero de clientes que procesan: no llegan a ser más de 50 - 55 (esos son los topes máximo considerando también sistemas satélite fuera de SAP, he imaginando que todo el mundo esta conectado al mismo tiempo, cosa que no ocurre. El promedio de usuarios conectados que he visto son de 30 - 35 y un tope máximo 40 usuarios)

  • Optimizar vistas, consultas, reportes: Si tuviera uno en específico que causara el inconveniente me pondría a trabajar en ello, pero estamos hablando que incluso las pantallas de SAP están presentando lentitud y ya no es solo a nivel de reportes (esto me comienza a preocupar y encender las alarmas)

  • El 80% del personal usa SAP a 64 Bit. solo una pequeña cantidad de usuarios específico usan 32Bits por tema de AddOns que fueron hechos para 32 bits, y los creadores de dicho AddOn ya ni existen, lo que dificulta su mantenimiento.

  • Nunca tengo el servidor de SQL con el de AD u otros. Incluso, aquí estoy incurriendo en una practica que no me gusta de tener SAP y BD en un mismo servidor, normalmente uso un servidor secundario para aplicaciones (incluyendo el integration y eso), y uno para SAP. pero desde que llegué ya aquí estaba ambos en un mismo server. Y no he tenido presupuesto para adquirir uno separado de aplicaciones como quiero.

Entonces. solo me queda la duda del punto 2… ¿Que recomiendas a ese plan de mantenimiento?

Un plan de mantenimiento de SAP B1 implica varias cosas:

  1. Depuracion de LOG interno de SAP (Tablas Log)

  2. Proceso de Reindex, Rebuild y Updated Stadistic a nivel SQL

  3. Liberación de fragmentos en la BD a nivel SQL

  4. Depuracion de LOG de BD

Todo este proceso en hrs fuera de operaciones.

Hola @Ares17000 de estos procesos que comenta @juliancab de mantenimiento si no tienes conocimiento de sql para activarlos o montarlos te los realiza la Remote Support Platform.

¿No sé si la conoces o alguna vez la has visto funcionar o sabes que es?

Requiere que tu partner la configure y la active desde la parte del portal de SAP, por desgracia (ojala no) seguramente no sabe o no la usa o les llevará tiempo conocerla e implementarla y no saben.

Precisamente ayer tuve una situación parecida a la tuya y fue porque el tomcat del servicio de integración se desmadró o disparó el solo.

Es curioso porque además es una parte que no usamos (acceso a los móviles, etc…) y he optado por parar los servicios y pasarlos a manual.

En procesos de impresión que de repente se vuelven lentos, he analizado los reports y en algunos casos el origen del report era de tablas y lo he cambiado a consulta SQL y ha mejorado el rendimiento muchísimo.

Hola @Ares17000 en la Guía de Administradores SAP para la versión SQL, dedican un capitulo al mantenimiento de las bases de datos, mencionan que semanalmente deberíamos checar la consistencia de la base de datos así como actualizar estadísticas, incluso menciona que dependiendo la transaccionalidad y el tamaño de la base de datos podría ser necesario hacerlo mas frecuente,

Menciona también sobre la depuración del log de transacciones y verificación de índices.
Todos los puntos que menciono @juliancab

ht_ps://help.sap.com/http.svc/rc/879bd9289df34a47af838e67d74ea302/9.3/en-US/AdministratorGuide_SQL.pdf

1 me gusta

Hola,

revisando tu problema, me parece que el mayor problema que enfrentas es la falta de mantenimiento sobre los índices de las bases de datos. Habría que revisar tambien si el servidor está instalado sobre discos de 5400/7200/10000/15000 RPM para determinar si el mayor problema es la lentitud de los discos (físicamente hablando).

Dependiendo de la versión de SQL (creo que a partir de la 2008) se puede hacer mantenimiento a los discos en “caliente”, lo que significa que no necesariamente tienes que hacerlo fuera de horas o bien sin usuarios trabajando.

En algunos casos, tambien se debe a que el servidor del SQL no está configurado para tener un buen rendimiento.

Los scripts que están en esta página: https://ola.hallengren.com te pueden resolver el problema.

Espero que esto te ayude.
Saludos

2 Me gusta

Este tema se cerró automáticamente 30 días después de la última publicación. No se permiten nuevas respuestas.