Pregunta ¿SQL Server Database Mail usa hilos al enviar correo?


Estamos utilizando SQL Server 2008 Correo de base de datos Para enviar correos electrónicos a los visitantes de nuestro sitio web. No sé si SQL Server envía el correo uno por uno al recogerlo de la cola o si usará hilos para enviar correos electrónicos de manera simultánea.

Si el Correo electrónico de base de datos utiliza subprocesos, ¿hay alguna forma de aumentar el número de subprocesos para que se ejecuten simultáneamente?


5
2017-07-18 19:08


origen




Respuestas:


Tomado de libros en línea: Correo de base de datos

Para minimizar el impacto en SQL Server,   El componente que entrega el correo electrónico.   se ejecuta fuera de SQL Server, en una   proceso separado SQL Server lo hará   continuar haciendo cola incluso los mensajes de correo electrónico   si el proceso externo se detiene o   falla Los mensajes en cola serán   enviado una vez el proceso externo o SMTP   el servidor se conecta

La base de datos utiliza la tecnología de Service Broker:

El correo de la base de datos proporciona el fondo, o   Asíncrono, entrega. Cuando usted llama   sp_send_dbmail para enviar un mensaje,   Database Mail agrega una solicitud a un   Cola del agente de servicios. El almacenado   El procedimiento vuelve inmediatamente. los   componente de correo electrónico externo recibe el   Solicita y entrega el correo electrónico.

La entrega de correo electrónico real es manejada por su servidor SMTP, por lo que será la peor parte de la carga de trabajo y debe ser aprovisionada de acuerdo con los requisitos de capacidad / tráfico de correo electrónico.

Ver Planificación de correo de base de datos


2
2017-07-19 08:13





Yo sugeriría probar un gran volumen de correos y ver qué tan bien funciona. No sé si el correo de la base de datos se envía en serie o en paralelo. Sin embargo, si necesita garantizar un correo con buen rendimiento, le sugiero que envíe correos desde una aplicación cliente en lugar de usar el correo de la base de datos en SQL Server, lo cual dudo. Diseñado con este propósito en mente.


0
2017-07-18 22:11





SQL Server utiliza subprocesos para enviar correo, pero es posible que su conector de correo no lo haga.


0
2017-07-19 03:39





Lo mejor que puedo decir, Database Mail no hace ningún intento de multiproceso. Utiliza Service Broker, por lo que llamar a sp_send_dbmail volverá inmediatamente y no esperará a que se envíe el mensaje.

Al ver msdb.sys.service_queues (las definiciones de cola para Service Broker, que es la forma en que se implementa el Correo de base de datos), veo colas denominadas InternalMailQueue y ExternalMailQueue, y ambas tienen max_readers configuradas en 1. Observando sus procedimientos de activación (sp_ExternalMailQueueListener y sp_sysmail_activate) no sugiere que exista algo de fantasía allí en términos de enhebrado. El primero realiza un manejo de errores y limpieza de conversaciones, y el segundo realiza el envío de correo real a través de master..xp_sysmail_activate, que parece ser una llamada de bloqueo que produce un código de retorno.

Por lo que puedo ver, no hay un intento real de multihilo por enviar muchos mensajes simultáneamente. Solo hace una cola asíncrona para que su aplicación no tenga que esperar a que se envíen los mensajes antes de continuar.


0
2018-03-23 12:18