una soporta segundo rapida por optimizar mas lentas lenta hacer cuello cuantas consultas consulta como botella agilizar database logging log-analysis log-files

database - soporta - optimizar consultas mysql explain



Es una buena idea escribir archivos de registro del servidor en una base de datos? (6)

Después de leer un artículo sobre el tema de O''Reilly , quería pedirle a Stack Overflow que reflexionara sobre el tema.


¿Piensa en una base de datos correctamente configurada que utiliza RAM para leer y escribir? Esto es mucho más rápido que escribir en un disco y no presentaría el cuello de botella de IO que ve cuando atiende a un gran número de clientes que ocurre cuando los hilos comienzan a bloquearse debido a que el sistema operativo les pide que esperen ejecutando hilos que usan todos los IO disponibles. maneja.

No tengo ningún punto de referencia para probar esta información, aunque mi última aplicación está avanzando con el registro de la base de datos. Esto tendrá un failsafe como se menciona en una de estas respuestas. Si no se puede crear la conexión a la base de datos, cree una base de datos local (h2 ¿quizás?) Y escriba eso. Entonces podemos tener una verificación periódica de la conectividad de la base de datos que restablecerá la conexión, volcará la base de datos local y la enviará a la base de datos remota.

Esto podría hacerse fuera de horario si no tiene un sitio HA.

En algún momento en el futuro espero desarrollar puntos de referencia para demostrar mi punto.

¡Buena suerte!


Escriba localmente en el disco, luego inserte por lotes en la base de datos periódicamente (por ejemplo, en el momento de la transferencia de registros). Haz eso en un proceso separado y de baja prioridad. Más eficiente y más robusto ...

(Por cierto, asegúrese de que la tabla de registro de la base de datos contiene una columna para "de qué máquina proviene el evento de registro", ¡muy útil!)


Inicie sesión en DB si puede y no ralentiza su DB :)

Es mucho más rápido encontrar algo en DB y luego en archivos de registro. Especialmente si piensas más adelante lo que necesitarás. Al iniciar sesión en db le permite consultar la tabla de registro de esta manera:

select * from logs where log_name = ''wcf'' and log_level = ''error''

luego, después de encontrar el error, puede ver toda la ruta que condujo a este error

select * from logs where contextId = ''what you get from previous select'' order by timestamp

¿Cómo obtendrá esta información si la registra en archivos de texto?

Editar: Como JonSkeet sugirió que esta respuesta sería mejor si dijera que uno debería considerar hacer el registro a db asíncrono. Así que lo digo :) Simplemente no lo necesitaba. Por ejemplo, cómo hacerlo, puede consultar "Ultra Fast ASP.NET" de Richard Kiessig.


Probablemente no sea una mala idea si quieres los registros en una base de datos, pero yo diría que no sigas los consejos del artículo si tienes muchas entradas en el archivo de registro. El problema principal es que he visto que los sistemas de archivos tienen problemas para mantenerse al día con los registros provenientes de un sitio ocupado y mucho menos de una base de datos. Si realmente quiere hacer esto, me gustaría cargar los archivos de registro en la base de datos después de que se escriben por primera vez en el disco.


Si la base de datos es una base de datos de producción, esta es una idea horrible. Tendrá problemas con las copias de seguridad, la replicación y la recuperación. Me gusta más almacenamiento para DB, réplicas, si hay alguna, y copias de seguridad. Más tiempo para configurar y restaurar la replicación, más tiempo para verificar las copias de seguridad, más tiempo para recuperar la base de datos de las copias de seguridad.


Yo diría que no, dado que un porcentaje bastante grande de errores del servidor implica problemas de comunicación con las bases de datos. Si la base de datos estuviera en otra máquina, la conectividad de red sería otra fuente de errores que no podrían registrarse.

Si tuviera que registrar los errores del servidor en una base de datos, sería crítico tener un registrador de respaldo que escribiera localmente (a un registro de eventos o archivo o algo) en caso de que la base de datos no esté accesible.