Quantcast
Channel: SQL Service Broker forum
Viewing all articles
Browse latest Browse all 461

Performance In Simple Scenarios

$
0
0

I have done some performance testing to see if asynchronous triggers performs any better than synchronous triggers in a simple audit scenario -- capturing record snapshots at insert, update and delete events to a separate database within the same instance of SQL Server.

 

Synchronous triggers performed 50% better than asynchronous triggers; this was with conversation reuse and the receive queue activation turned off, so the poor performance was just in the act of forming and sending the message, not receiving and processing.  This was not necessarily surprising to me, and yet I have to wonder under what conditions would we see real performance benefits for audit scenarios.

 

I am interested if anyone has done similar testing, and if they received similar or different results.  If anyone had conditions where asynchronous triggers pulled ahead for audit scenarios, I would really like to hear back from them.  I invite any comments or suggestions for better performance.

 

The asynchronous trigger:

Code Snippet

ALTER TRIGGER TR_CUSTOMER_INSERT ON DBO.CUSTOMER
FOR INSERT AS
BEGIN
  DECLARE
    @CONVERSATION UNIQUEIDENTIFIER ,
    @MESSAGE XML ,
    @LOG_OPERATION CHAR(1) ,
    @LOG_USER VARCHAR(35) ,
    @LOG_DATE DATETIME;

 

  SELECT TOP(1)
    @CONVERSATION = CONVERSATION_HANDLE ,
    @LOG_OPERATION = 'I' ,
    @LOG_USER = USER() ,
    @LOG_DATE = GETDATE()
  FROM SYS.CONVERSATION_ENDPOINTS;

 

  SET @MESSAGE =
  ( SELECT
      CUST_ID = NEW.CUST_ID ,
      CUST_DESCR = NEW.CUST_DESCR ,
      CUST_ADDRESS = NEW.CUST_ADDRESS ,
      LOG_OPERATION = @LOG_OPERATION ,
      LOG_USER = @LOG_USER ,
      LOG_DATE = @LOG_DATE
    FROM INSERTED NEW
    FOR XML AUTO );

 

  SEND ON CONVERSATION @CONVERSATION
    MESSAGE TYPE CUSTOMER_LOG_MESSAGE ( @MESSAGE );

END;

 

 

The synchronous trigger:

Code Snippet

ALTER TRIGGER TR_CUSTOMER_INSERT ON DBO.CUSTOMER
FOR INSERT AS
BEGIN
  DECLARE
    @LOG_OPERATION CHAR(1) ,
    @LOG_USER VARCHAR(15) ,
    @LOG_DATE DATETIME;

 

  SELECT
    @LOG_OPERATION = 'I' ,
    @LOG_USER = USER() ,
    @LOG_DATE = GETDATE()

 

  INSERT INTO SALES_LOG.DBO.CUSTOMER
  SELECT
    CUST_ID = NEW.CUST_ID ,
    CUST_DESCR = NEW.CUST_DESCR ,
    CUST_ADDRESS = NEW.CUST_ADDRESS ,
    LOG_OPERATION = @LOG_OPERATION ,
    LOG_USER = @LOG_USER ,
    LOG_DATE = @LOG_DATE
  FROM INSERTED NEW

END;

 

 

 

 


Viewing all articles
Browse latest Browse all 461

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>