Is It Possible To Disable Poison Message Detection?
Aug 3, 2006
Hi,
I'm using the Service Broker to parallize my processes (I know that the Service Broker was not designed for that purpose), however it's working quite well.
I use the broker procedure to start procedures which all process all a part of the workload. When the procedure fails because of a lock timeout (or for that concern, for whatever reason), I rollback the transaction (which also roll back my message received on the queue so that it can be retried at a later time.). And this is where my problem lies, if there are 5 sequential rollbacks of messages then the poison message detection kicks in and disables the queue, stopping all the processing. :(
Is there a way to disable poison message detection? I have implemented my own stop-mechanism through a counter system on a per sub-task system so if I could disable poison message detection that would be ideal.
If this is not possible is there a way to turn the queue back on automatically so that it will continue processing the messages on the queue?
Hallo, I have some problems to handle the poison messages.
Messages are exchanged between 2 databases on the same SQL Server instance. I created a Trigger on the insert , that call the sp that begin the conversation(10 minutes Timeout) and send the message to the target queue.
On the target queue I activated a SP and the main code is:
BEGIN TRANSACTION
WAIT FOR (Receive (1) ..) timeout 5000
IF (@ErrorSave <> 0)
BEGIN
INSERT INTO [TestSender].[dbo].[tblErrorXMLMessages] VALUES ();
END
ELSE
if (@messagetypeName = N'Message')
BEGIN
exec [dbo].[sp_ProcessMessage] @message_body
END
ELSE IF (@messagetypeName = N'EndOfStream')
BEGIN
END CONVERSATION @dialog
END
COMMIT TRANSACTION
My communication has a strange behaviour:
if I type
Begin
insert into TriggerTable values(XMLMessage)
insert into TriggerTable values(XMLMessage)
....
insert into TriggerTable values(XMLMessage)
end
Everything work fine but If I write an insert of 1000 message coming from an another table and I use the
cursor login after I while the transmission stop because the Target queue become inactive. I can see my messages stuck in the Initiator transmission_queue so I think that there is some Poison message that cause 5 rollback and disable the receiver queue.
First I would like to isolate the wrong message and carry on with the insert, my application doesn't have to stop the conversation or return any error, but If I use the Sql server Debugger I'm not able to debug the Target queue's stored procedure.
I suppose that some error happens on the Target queue's stored procedure but how can I first at all find it out?
Maybe it has something to do with the transition wrapped around the RECEIVE command?
I know I have to build in some ability to deal with a posion message. I was thinking that (sort of mentioned in the article http://msdn2.microsoft.com/en-us/library/ms166137.aspx) I would write a special stored procedure that would handle this situation. I don't know how I could activate this. I don't want to poll of course in a waitfor.
Hi! I have crl stored procedure with distributed transaction in it. I really need such transaction. When a poison message occurs 5 time my queue is turned off. I've read about handling poison messages in msdn (save transaction and rollback part of it), but it works only with local transaction. What should I do? An important point is that messages shoold be processed in right order, I can't receive message and put it to the end of queue. I want to try process poison message constantly. I doesn't want to stop receiving messages in that queue. Thanks.
I am getting the following Error and I can't find it in the Manual.
Failure to send an event notification instance of type 'BROKER_QUEUE_DISABLED' on conversation handle '{5D273374-E84F-DB11-B3BC-0004239AB15C}'. Error Code = '8429'.
I have checked the service name for the notification and it appears to be okay.
Hi all, i searched everywhere but couldn't find any info on the following error that i'm currently receiving:
"The conversation endpoint is not in a valid state for SEND. The current endpoint state is 'DI'."
I understand that this is due to some problem in my send/receive protocol but how do i fix this problem so that i can continue with my testing? Right now i'm forced to drop my entire test database and reinstall everytime this message shows up because i can't send/receive any messages at that point. Is there anyway to get rid of it?
Hi,I have a few create table statements which create temporary tablesthat has row definitions which exceeds the 8060 size limit, this causesa warning message being generated (Message 1708).Is there a way I can disable/avoid the warning message from beingprinted ?Thanks,joe
Hello again, I have some poison message detection in place, based on the BOL sample. My problem is that after the 5th message retry my queue goes down - that is the fifth retry on any message. In actuallity, the first message is retried 3 times and it is taken off the queue [for real], the second message comes in and on the second retry - pooof - the queue is down.
I though the poison mechanism should work on a per message basis. It there a setting for the queue I missed? Is my only chance for to fix this: re-enable the queue upon BROKER_QUEUE_DISABLED event notification?
In the "Example: Detecting a Poison Message" section, it reads: This Transact-SQL example shows a simple, stateless service that includes logic for handling poison messages. Before the stored procedure receives a message, the procedure saves the transaction. When the procedure cannot process a message, the procedure rolls the transaction back to the save point. The partial rollback returns the message to the queue while continuing to hold a lock on the conversation group for the message.
Hi, We recently had one of our drives (RAID5) replaced because of failure. This has resulted in a torn page being detected on one of our smaller SQL 2000 databases. We have one or two larger SQL databases (30-70GB) on the same drive amongst several others and are now concerned that we may have a problem with these databases also. (The original torn page only came to light when a query was run on one of the tables). Is there anyway I can run a procedure on each of the databases to find out if we have any problems with torn pages? I obviously don't want to restore the databases as this will take a substantial amount of time that we just don't have at the moment. Any ideas that could put our minds at rest would be much appreciated. Many thanks.
I want to switch this setting off on all db's - that's easy.
But I presume that means the problem could occur without me knowing for weeks (maybe due to a defective disk driver). So is there a way I can schedule a maintainance task that will check for this problem out of hours? (Maybe by switching the DB option on for a while and then back off? If you switch the option on, does it check the whole database? Or does it just do checks during the actual update?) Hopefully there is a better way than that to do it...
Also, am I right in saying that CHECKSUM is new to 2005? And what do you guys use: Checksum, Torn Page Detection or None?
Hello faculties,i'm encountering a strange a deadlock problem on my remote serverwhich is used to give application demo to the client. It has happenedthat on one of the databases a deadlock situation is taking place.What is the most detailed way to detect such the cause of such adeadlock to the innermost level of detail, like what statements, storedprocedures and locks are causing the deadlock to occur.Guys! please help me out!Thanks in advanceDebian*** Sent via Developersdex http://www.developersdex.com ***
I have been trying to use the Clustering algorithm for Anomaly Detection, but it has been quite difficult to get correct results for PredictCaseLikelihood. Using a very large number of clusters helped, but there are other problems. The algorithm does not take into account all the columns in my nested table, but only uses Exists/Not Exists for the nested table key column. In my case the nested table contains also a column with a count of key attribute.
I am about to abandon the Sql Data Mining.
Does anyone have more insights into tuning the Clustering algorithm for anomaly detection?
The following was found as a solution to detecting non-printable characters in a string. I can find no explanation of how the COLLATE function is used.
how the COLLATE function affects the search string to find the non-printable characters?
patindex('%[^ !-~]%' COLLATE Latin1_General_BIN, titlel) as [Position]
I have inherited a database which started life under SQL 7 (where Torn page Detection was OFF by default), and I'd like to turn it on. Will this reshuffle all the pages to make room for the extra check-sum, or is that stored in a single block somewhere else such that it can easily be added?
Is the change going to block access for long? (DB = between 2~5GB)
what are the best ways to action on the Deadlock issues. I am aware how a deadlock is occurred and we can get the queries causing by the Trace, and Profiler. What will en best steps to Investigate from DBA end later collecting the stats.What steps will ensure to get these deadlocks addressed.
Hi, I'm would like know if the analysis service data mining enables to detect anomalies from "normal" behavior/patterns of data (1), and alert about such anomalies when detected (2). both above sql server relational DB (3).
I am trying to install RS on Vista. I notice that the list of IIS features to turn on, listed in the KB article and blog entries, mentions a "Windows Authentication" IIS feature to check under Security. I don't have that (although I have one labeled "Basic Authentication") -- I'm on a "workgroup" computer at home.
Does this mean that you simply can't install RS on Vista unless you're joined to a domain? Thanks,
Hello everybody,First: SQL Server 2000 sp3a, HP cluster server, MS 2003 server,database recovery model simpleTorn page detection:When I have this option turned on, processes conected with updating andwriting in database, was MUCH more slower, than if I've this optionturned off.It seams to me, that when this option is turned on, the sqlserver ismuch more slower by any operation connected with writing, than withoutthis option.This option is required for ensurance, that the data are writtenproperly on the media.My question is:if I have my database running under cluster, with RAID hd system, whichcontains write cache, with additional checking, that the data will bewritten correctly, is it necessary for me to keep this option turnedon?Auto shrink:When it is turned on, does it affect performance?Personaly, I don't think so, but somebody is insysting on it, and Iwould like to have an information from independent source about that.Best regardsMatik
I am monitoring my replication process and I have a problem with the loop detection, I can see origined transacctions in the server, executed in the same for the replication.
The subscriptions configuration is sp_helpsubscription
Our application installation setup needs to be able to detect:
Is SQL Server 2005 Express Installed?
If false, run the SP2 Installation Is SQL Server 2005 Express or SQL Express SP1 Installed?
If false, run the SP2 Installation with Update Switch Is SQL Server 2005 (not Express) Installed
If true, abort installation with a mesage.
Can you direct me to some documentation about testing for these environments or just if someone has some scripts that will run in InstallShield, that would be great.
ALSO, can you direct me to information about using the command line update switch for the Express SP2 Installer?
I run SB between 2 SQL servers. In profiler on an initiator side I see next error: 'This message could not be delivered because its message timestamp has expired or is invalid'. For the conversation we use best practice, i.e. target closes a conversation. Target side succeed to close conversation, but initiator still stay in DO (disconnect_outbound). What is a reasone for the error? What to do?
I see in profiler this error: "This message could not be delivered because its message timestamp has expired or is invalid" What is a reason for error?
Please help,I am trying to install MSDE 2000 so that Backup exec will run on thisserver. I have gotten so far as to find an entry in my SQLSTP.TXT filethat says that c:mssql7 was detected so the install fails.Now, to start with there is no directory called C:mssql7 on thisserver. I have gone through all MS articles on manual removal of SQLserver and instances. I have searched the registry for mssql7 andremoved any keys that matched, as per MS article I have searched onSQLBOOT.dll and it is not present anywhere on my system and I still getthe same results.2:07:44 Begin Action: Detection12:07:44 SQL Server version already installed: 7.00.62312:07:44 Previous Install SQL Path: C:MSSQL712:07:44 Previous Install SQL Data Path: C:MSSQL712:07:44 End Action Detection12:07:44 Begin Action: ODBCLocked12:07:44 End Action ODBCLocked12:07:44 GetDefinition returned: 112:07:44 Previous SQL Server ProductType: MSDE [0x4]12:07:44 This combination of Package and Operating System allows a fullproduct install.can anyone think of anything here..what else could be causing the server to think there is a previousversion of SQL 7 on this box!!!?