O SQL Server Database Mail usa encadeamentos durante o envio de mensagens?

5

Estamos usando o Database Mail do SQL Server 2008 para enviar e-mails aos visitantes de nosso site. Eu não sei se o SQL Server envia um por um, pegando da fila ou usará threads para enviar emails simultaneamente.

Se o Database Mail usa encadeamentos, existe alguma maneira de aumentar o número de encadeamentos para execução simultânea?

    
por Peter Mortensen 18.07.2010 / 21:08

4 respostas

2

Extraído do Books Online: Database Mail

To minimize the impact on SQL Server, the component that delivers e-mail runs outside of SQL Server, in a separate process. SQL Server will continue to queue e-mail messages even if the external process stops or fails. The queued messages will be sent once the outside process or SMTP server comes online.

Tecnologia do Service Broker de uso do Database Mail:

Database Mail provides background, or asynchronous, delivery. When you call sp_send_dbmail to send a message, Database Mail adds a request to a Service Broker queue. The stored procedure returns immediately. The external e-mail component receives the request and delivers the e-mail.

A entrega de e-mail real é tratada pelo seu servidor SMTP e, portanto, isso arcará com o peso da carga de trabalho e deve ser provisionado de acordo com os requisitos de tráfego de capacidade / e-mail.

Consulte Planejando o Database Mail

    
por 19.07.2010 / 10:13
0

Eu sugiro tentar um grande volume de e-mails e ver o desempenho dele. Eu não sei se o email do banco de dados é enviado em série ou paralelo - se você precisa garantir um bom desempenho, sugiro que você envie e-mails de um aplicativo cliente em vez de usar o banco de dados no SQL Server que duvido que fosse projetado com este objetivo em mente.

    
por 19.07.2010 / 00:11
0

O SQL Server usa encadeamentos para enviar e-mails, mas seu conector de e-mail pode não funcionar.

    
por 19.07.2010 / 05:39
0

Como melhor posso dizer, o Database Mail não faz nenhuma tentativa de multithreading. Ele usa o Service Broker, portanto, chamar sp_send_dbmail retornará imediatamente e não aguardará o envio da mensagem, no entanto.

Observando msdb.sys.service_queues (as definições de fila do Service Broker, que é como o Database Mail é implementado), vejo filas chamadas InternalMailQueue e ExternalMailQueue, e ambas têm max_readers definidas como 1. Observando seus procedimentos de ativação (sp_ExternalMailQueueListener e sp_sysmail_activate) não sugere que exista algo sofisticado acontecendo em termos de encadeamento. O primeiro faz algum tratamento de erros e limpeza de conversas, e o último faz o envio de mensagens reais via master..xp_sysmail_activate, que parece ser uma chamada de bloqueio que produz um código de retorno.

Então, tanto quanto eu posso ver, não há nenhuma tentativa real de multithreading por causa do envio de muitas mensagens simultaneamente. Faz apenas filas assíncronas para que seu aplicativo não precise esperar que as mensagens sejam enviadas antes de continuar.

    
por 23.03.2011 / 13:18