<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Understanding the effect of MQ persistence on disk performance</title>
	<atom:link href="http://altentee.com/2007/understanding-mq-persistence-on-disk-performance/feed/" rel="self" type="application/rss+xml" />
	<link>http://altentee.com/2007/understanding-mq-persistence-on-disk-performance/</link>
	<description>Performance and Test Automation Experts</description>
	<lastBuildDate>Tue, 02 Mar 2010 14:15:20 +1100</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Steve</title>
		<link>http://altentee.com/2007/understanding-mq-persistence-on-disk-performance/comment-page-1/#comment-33</link>
		<dc:creator>Steve</dc:creator>
		<pubDate>Tue, 28 Oct 2008 18:43:49 +0000</pubDate>
		<guid isPermaLink="false">http://90kts.com/blog/2007/understanding-mq-persistence-on-disk-performance/#comment-33</guid>
		<description>Question

How I can read the MQ logs to check if messages are persistent or not

steve</description>
		<content:encoded><![CDATA[<p>Question</p>
<p>How I can read the MQ logs to check if messages are persistent or not</p>
<p>steve</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tim</title>
		<link>http://altentee.com/2007/understanding-mq-persistence-on-disk-performance/comment-page-1/#comment-32</link>
		<dc:creator>Tim</dc:creator>
		<pubDate>Fri, 18 Apr 2008 22:26:17 +0000</pubDate>
		<guid isPermaLink="false">http://90kts.com/blog/2007/understanding-mq-persistence-on-disk-performance/#comment-32</guid>
		<description>First, I would make sure that your bottleneck is actually a server resource (as we might expect) by collecting some disk stats (and CPU/et/mem just to be safe) using perfmon.

For disk, you might want to use a free tool like IOMeter simply to provide some rough benchmarks on what speed your disks are capable of reading/writing at... Particularly with disk IO on windows, look at avg read&#124;writes/sec, avg. disk sec/read&#124;write, disk queue length and also avg disk bytes reads&#124;writes/sec.. Post back your results here if you&#039;re keen.

Now assuming you can&#039;t change your disk subsytem to a faster array, the following recommendations  are what I&#039;d suggest in getting the most out of persistent messages:.

1. Since you&#039;re aiming to write 1,000 x 3KB + 750B per message per second, you&#039;re looking at something between 3.5 - 4 MB/sec. This may be close to your disk subsystem limits depending on what that actually is. For example, on a beefed up SAN I&#039;ve clocked over 40MB/sec, however on a clients production web server with a SATA RAID 5 array, they could only get 6MB/sec. On my Mac VM I can only get 2MB/sec :) So it really is important to balance the theoretical performance of your subsystems before going nuts with tuning parameters...

2. Having said all that though, you have increased the LogFilePages=16384 which will make your individual log files bigger (approx 64MB). This will cut down on the rate MQ needs to open close files under load. I&#039;ve seen this have a significant impact on performance. You should check date time stamps on these log files to see  how quickly MQ is circling through those . I imagine at a target rate of 4MB/sec, you are probably cycling through at a rate of 1 log file every 16 seconds :-)

3.I wasn&#039;t aware you could use 4096 for LogBufferPages (I thought max was 512) ie. 512x4 = 2MB buffer max. So maybe just double check that setting is valid.

4. Have you tried the following tuning parameters?
DefaultQBufferSize=1048576
DefaultPQBufferSize=1048576

These may have an impact although can&#039;t comment on their effectiveness.

At the end though, you need to establish if it IS a disk performance bottleneck as you might expect. For what it&#039;s worth, in the past I have run many different tests/configurations on clients systems regarding MQ persistence performance and have found that you can get very high rates.

To illustrate, on a particular client&#039;s subsytem I was getting 1,500 trans/sec for a single thread message producer using messgae persistence (around 300B per messsage). Simply by increasing concurrency, at around 30 threads we were able to double that throughput (it wasn&#039;t necessarily SAN performance as we first thought, although we established that one thread had its maximums for other reasons). In the same environment, we also wrote to a SCSI disk and RAM (just for comparison) with a single thread, and got 300 trans/sec and 3,000+ trans/sec respectively. So no denying disk subsystem configuration has a huge effect on overall performance. Sometimes you can work around this with higher levels of concurrency.

Hope that helps. Regards,
Tim Koopmans</description>
		<content:encoded><![CDATA[<p>First, I would make sure that your bottleneck is actually a server resource (as we might expect) by collecting some disk stats (and CPU/et/mem just to be safe) using perfmon.</p>
<p>For disk, you might want to use a free tool like IOMeter simply to provide some rough benchmarks on what speed your disks are capable of reading/writing at&#8230; Particularly with disk IO on windows, look at avg read|writes/sec, avg. disk sec/read|write, disk queue length and also avg disk bytes reads|writes/sec.. Post back your results here if you&#8217;re keen.</p>
<p>Now assuming you can&#8217;t change your disk subsytem to a faster array, the following recommendations  are what I&#8217;d suggest in getting the most out of persistent messages:.</p>
<p>1. Since you&#8217;re aiming to write 1,000 x 3KB + 750B per message per second, you&#8217;re looking at something between 3.5 &#8211; 4 MB/sec. This may be close to your disk subsystem limits depending on what that actually is. For example, on a beefed up SAN I&#8217;ve clocked over 40MB/sec, however on a clients production web server with a SATA RAID 5 array, they could only get 6MB/sec. On my Mac VM I can only get 2MB/sec <img src='http://altentee.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  So it really is important to balance the theoretical performance of your subsystems before going nuts with tuning parameters&#8230;</p>
<p>2. Having said all that though, you have increased the LogFilePages=16384 which will make your individual log files bigger (approx 64MB). This will cut down on the rate MQ needs to open close files under load. I&#8217;ve seen this have a significant impact on performance. You should check date time stamps on these log files to see  how quickly MQ is circling through those . I imagine at a target rate of 4MB/sec, you are probably cycling through at a rate of 1 log file every 16 seconds <img src='http://altentee.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>3.I wasn&#8217;t aware you could use 4096 for LogBufferPages (I thought max was 512) ie. 512&#215;4 = 2MB buffer max. So maybe just double check that setting is valid.</p>
<p>4. Have you tried the following tuning parameters?<br />
DefaultQBufferSize=1048576<br />
DefaultPQBufferSize=1048576</p>
<p>These may have an impact although can&#8217;t comment on their effectiveness.</p>
<p>At the end though, you need to establish if it IS a disk performance bottleneck as you might expect. For what it&#8217;s worth, in the past I have run many different tests/configurations on clients systems regarding MQ persistence performance and have found that you can get very high rates.</p>
<p>To illustrate, on a particular client&#8217;s subsytem I was getting 1,500 trans/sec for a single thread message producer using messgae persistence (around 300B per messsage). Simply by increasing concurrency, at around 30 threads we were able to double that throughput (it wasn&#8217;t necessarily SAN performance as we first thought, although we established that one thread had its maximums for other reasons). In the same environment, we also wrote to a SCSI disk and RAM (just for comparison) with a single thread, and got 300 trans/sec and 3,000+ trans/sec respectively. So no denying disk subsystem configuration has a huge effect on overall performance. Sometimes you can work around this with higher levels of concurrency.</p>
<p>Hope that helps. Regards,<br />
Tim Koopmans</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: alex</title>
		<link>http://altentee.com/2007/understanding-mq-persistence-on-disk-performance/comment-page-1/#comment-31</link>
		<dc:creator>alex</dc:creator>
		<pubDate>Fri, 18 Apr 2008 20:24:53 +0000</pubDate>
		<guid isPermaLink="false">http://90kts.com/blog/2007/understanding-mq-persistence-on-disk-performance/#comment-31</guid>
		<description>I&#039;m trying to get MQ 6.0.2 on windows 2k3 with persistence on to give me 1000 msgs per sec (approx 3kb in size) but can&#039;t seem to get more than 400-500 msgs per sec.  My settings:
64 MB log file sizes @ 10 primary , 10 secondary
log buffer pages = 4096
Max Handles: 1000
Log:
circular logging with sing write integrity
Channels:
max channels=1000
pipeline length=2
batch size=1000

Any tweak thoughts would be helpful.</description>
		<content:encoded><![CDATA[<p>I&#8217;m trying to get MQ 6.0.2 on windows 2k3 with persistence on to give me 1000 msgs per sec (approx 3kb in size) but can&#8217;t seem to get more than 400-500 msgs per sec.  My settings:<br />
64 MB log file sizes @ 10 primary , 10 secondary<br />
log buffer pages = 4096<br />
Max Handles: 1000<br />
Log:<br />
circular logging with sing write integrity<br />
Channels:<br />
max channels=1000<br />
pipeline length=2<br />
batch size=1000</p>
<p>Any tweak thoughts would be helpful.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tim</title>
		<link>http://altentee.com/2007/understanding-mq-persistence-on-disk-performance/comment-page-1/#comment-30</link>
		<dc:creator>Tim</dc:creator>
		<pubDate>Tue, 09 Oct 2007 04:34:41 +0000</pubDate>
		<guid isPermaLink="false">http://90kts.com/blog/2007/understanding-mq-persistence-on-disk-performance/#comment-30</guid>
		<description>I found out another way to determine how big the block sizes are when writing to disk on a Solaris subsystem, but it requires root access or at least mqm access in order to run.

Essentially, if I truss the MQ queue manager pid whilst under load (with persistence) it will produce this sort of output

&lt;code&gt;truss Ã¢â‚¬â€œD Ã¢â‚¬â€œp &lt;pid&gt;
0.0002 write(3, &quot; A A A A A A A A A A A A&quot;.., 8192)    = 8192
 0.0001 write(3, &quot; A A A A A A A A A A A A&quot;.., 8192)    = 8192
 0.0002 write(3, &quot; A A A A A A A A A A A A&quot;.., 8192)    = 8192
 0.0001 write(3, &quot; A A A A A A A A A A A A&quot;.., 8192)    = 8192
 0.0001 write(3, &quot; A A A A A A A A A A A A&quot;.., 8192)    = 8192
 0.0001 write(3, &quot; A A A A A A A A A A A A&quot;.., 8192)    = 8192
 0.0001 write(3, &quot; A A A A A A A A A A A A&quot;.., 8192)    = 8192
 0.0001 write(3, &quot; A A A A A A A A A A A A&quot;.., 8192)    = 8192
 0.0001 write(3, &quot; A A A A A A A A A A A A&quot;.., 8192)    = 8192
 0.0002 write(3, &quot; A A A A A A A A A A A A&quot;.., 8192)    = 8192
 0.0001 write(3, &quot; A A A A A A A A A A A A&quot;.., 8192)    = 8192&lt;/code&gt;

But you do need root access. The 8KB observed above was from my own perl script which aims to simulate the effect of MQ persistence on a disk subsystem, without having to install MQ in the first place ...</description>
		<content:encoded><![CDATA[<p>I found out another way to determine how big the block sizes are when writing to disk on a Solaris subsystem, but it requires root access or at least mqm access in order to run.</p>
<p>Essentially, if I truss the MQ queue manager pid whilst under load (with persistence) it will produce this sort of output</p>
<p><code>truss Ã¢â‚¬â€œD Ã¢â‚¬â€œp
<pid>
0.0002 write(3, " A A A A A A A A A A A A".., 8192)    = 8192<br />
 0.0001 write(3, " A A A A A A A A A A A A".., 8192)    = 8192<br />
 0.0002 write(3, " A A A A A A A A A A A A".., 8192)    = 8192<br />
 0.0001 write(3, " A A A A A A A A A A A A".., 8192)    = 8192<br />
 0.0001 write(3, " A A A A A A A A A A A A".., 8192)    = 8192<br />
 0.0001 write(3, " A A A A A A A A A A A A".., 8192)    = 8192<br />
 0.0001 write(3, " A A A A A A A A A A A A".., 8192)    = 8192<br />
 0.0001 write(3, " A A A A A A A A A A A A".., 8192)    = 8192<br />
 0.0001 write(3, " A A A A A A A A A A A A".., 8192)    = 8192<br />
 0.0002 write(3, " A A A A A A A A A A A A".., 8192)    = 8192<br />
 0.0001 write(3, " A A A A A A A A A A A A".., 8192)    = 8192</pid></code></p>
<p>But you do need root access. The 8KB observed above was from my own perl script which aims to simulate the effect of MQ persistence on a disk subsystem, without having to install MQ in the first place &#8230;</p>
]]></content:encoded>
	</item>
</channel>
</rss>
