Potkay, Peter M (CTO and Service Mgmt)
2014-01-28 22:00:09 UTC
In a shared environment (multiple apps sharing the QM), on a QM that has multiple channels to and from other QMs, how big do you make your QM's DLQ?
For the DLQ's Max Message Size you want to be able to DLQ that occasional 10 MB message that one app sends 2 of once a month.
For the DLQ's Max Q Depth you want to be able to DLQ the 100,000 little 500 byte messages that other app sends every hour.
So in a shared environment you are forced to make the one DLQ able to handle the big messages and the numerous messages. Either use case on its own is not a problem in the DLQ - one 10 MB or 100K of the 500 bytes - who cares.
And then come along app C. The start pumping messages as fast as they can to their remote queue on QM1 aiming at QM2. And because you set their Max Q depth and Max Q size on QM2 properly, they quickly fill their queues and start spilling into the DLQ.
And now you see why I ask the question - given that you have to cater the DLQ to the occasional single big message and the occasional big group of tiny messages, the DLQ is really big, and this 3rd app has the ability to put a lot of data into the DLQ. Probably so much that the disk space fills up before the DLQ's Max Q depth is reached.
I could make the DLQ's Max Q Depth really low so if full of the biggest possible messages it won't fill disk, to protect against this 3rd app, but then that harmless batch of 100K tiny messages that we were able to DLQ easily will now cause the channel from the other QM to stop. Or, I could leave the Max Q Depth of the DLQ high and knock down the Max message Length, but then that one lonely 10 MB message that I was able to DLQ in the past will cause the channel to stop.
If you multiplied your DLQ's Max Q Depth times its Max message Size, what do you end up with? 1 GB? 10 GB? Did you just max it out at 999,999,999 of 100 Mb and cross your fingers and toes?
How do you protect against this 3rd app? You can do all you want with setting this apps Max Q Depths and Max Message Sizes, but nothing prevents the app from sending unlimited numbers of messages that are < Max Message Size of their SVRCONN channel as long as they fit into the XMITQ's Max Message Size. And then they can swamp the remote QM's DLQ.
I can set artificially low values for Size and Depth on the DLQ and the XMITQs to push the failure 'up the chain' until the problem app gets a failed MQPUT because the XMITQ behind their Remote Q def is full, but now I'm setting artificially low limits for all other well behaved apps and causing premature QM to QM channel hard stops to prevent that one app from filling a DLQ and then an XMITQ.
At MQ 7.1 I can set up a dedicated set of QM to QM channels with dedicated XMITQs for this 3rd app and set their channels to not use a DLQ and set their queues and XMITQs to an artificially low limit. That way when they fill things up they are only impacting themselves. But that's a one off and sets a bad example. Pretty soon I'm doing this for every app and I have a million SNDR/RCVR channels. Doesn't scale.
I wish we could throttle a SVRCONN channel to limit the number of bytes or number of messages an app could inject into the MQ layer per hour or per day.
Peter Potkay
************************************************************
This communication, including attachments, is for the exclusive use of addressee and may contain proprietary, confidential and/or privileged information. If you are not the intended recipient, any use, copying, disclosure, dissemination or distribution is strictly prohibited. If you are not the intended recipient, please notify the sender immediately by return e-mail, delete this communication and destroy all copies.
************************************************************
To unsubscribe, write to LISTSERV-0lvw86wZMd9k/bWDasg6f+***@public.gmane.org and,
in the message body (not the subject), write: SIGNOFF MQSERIES
Instructions for managing your mailing list subscription are provided in
the Listserv General Users Guide available at http://www.lsoft.com
Archive: http://listserv.meduniwien.ac.at/archives/mqser-l.html
For the DLQ's Max Message Size you want to be able to DLQ that occasional 10 MB message that one app sends 2 of once a month.
For the DLQ's Max Q Depth you want to be able to DLQ the 100,000 little 500 byte messages that other app sends every hour.
So in a shared environment you are forced to make the one DLQ able to handle the big messages and the numerous messages. Either use case on its own is not a problem in the DLQ - one 10 MB or 100K of the 500 bytes - who cares.
And then come along app C. The start pumping messages as fast as they can to their remote queue on QM1 aiming at QM2. And because you set their Max Q depth and Max Q size on QM2 properly, they quickly fill their queues and start spilling into the DLQ.
And now you see why I ask the question - given that you have to cater the DLQ to the occasional single big message and the occasional big group of tiny messages, the DLQ is really big, and this 3rd app has the ability to put a lot of data into the DLQ. Probably so much that the disk space fills up before the DLQ's Max Q depth is reached.
I could make the DLQ's Max Q Depth really low so if full of the biggest possible messages it won't fill disk, to protect against this 3rd app, but then that harmless batch of 100K tiny messages that we were able to DLQ easily will now cause the channel from the other QM to stop. Or, I could leave the Max Q Depth of the DLQ high and knock down the Max message Length, but then that one lonely 10 MB message that I was able to DLQ in the past will cause the channel to stop.
If you multiplied your DLQ's Max Q Depth times its Max message Size, what do you end up with? 1 GB? 10 GB? Did you just max it out at 999,999,999 of 100 Mb and cross your fingers and toes?
How do you protect against this 3rd app? You can do all you want with setting this apps Max Q Depths and Max Message Sizes, but nothing prevents the app from sending unlimited numbers of messages that are < Max Message Size of their SVRCONN channel as long as they fit into the XMITQ's Max Message Size. And then they can swamp the remote QM's DLQ.
I can set artificially low values for Size and Depth on the DLQ and the XMITQs to push the failure 'up the chain' until the problem app gets a failed MQPUT because the XMITQ behind their Remote Q def is full, but now I'm setting artificially low limits for all other well behaved apps and causing premature QM to QM channel hard stops to prevent that one app from filling a DLQ and then an XMITQ.
At MQ 7.1 I can set up a dedicated set of QM to QM channels with dedicated XMITQs for this 3rd app and set their channels to not use a DLQ and set their queues and XMITQs to an artificially low limit. That way when they fill things up they are only impacting themselves. But that's a one off and sets a bad example. Pretty soon I'm doing this for every app and I have a million SNDR/RCVR channels. Doesn't scale.
I wish we could throttle a SVRCONN channel to limit the number of bytes or number of messages an app could inject into the MQ layer per hour or per day.
Peter Potkay
************************************************************
This communication, including attachments, is for the exclusive use of addressee and may contain proprietary, confidential and/or privileged information. If you are not the intended recipient, any use, copying, disclosure, dissemination or distribution is strictly prohibited. If you are not the intended recipient, please notify the sender immediately by return e-mail, delete this communication and destroy all copies.
************************************************************
To unsubscribe, write to LISTSERV-0lvw86wZMd9k/bWDasg6f+***@public.gmane.org and,
in the message body (not the subject), write: SIGNOFF MQSERIES
Instructions for managing your mailing list subscription are provided in
the Listserv General Users Guide available at http://www.lsoft.com
Archive: http://listserv.meduniwien.ac.at/archives/mqser-l.html