<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Network Monitoring Experimentations 5</title>
	<atom:link href="http://hoopercharles.wordpress.com/2010/04/27/network-monitoring-experimentations-5/feed/" rel="self" type="application/rss+xml" />
	<link>http://hoopercharles.wordpress.com/2010/04/27/network-monitoring-experimentations-5/</link>
	<description>Miscellaneous Random Oracle Topics: Stop, Think, ... Understand</description>
	<lastBuildDate>Thu, 23 May 2013 04:02:42 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: Donatello Settembrino</title>
		<link>http://hoopercharles.wordpress.com/2010/04/27/network-monitoring-experimentations-5/#comment-986</link>
		<dc:creator><![CDATA[Donatello Settembrino]]></dc:creator>
		<pubDate>Tue, 18 May 2010 13:24:48 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=1994#comment-986</guid>
		<description><![CDATA[Charles, 
sorry for my carelessness .. read the next article]]></description>
		<content:encoded><![CDATA[<p>Charles,<br />
sorry for my carelessness .. read the next article</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Charles Hooper</title>
		<link>http://hoopercharles.wordpress.com/2010/04/27/network-monitoring-experimentations-5/#comment-983</link>
		<dc:creator><![CDATA[Charles Hooper]]></dc:creator>
		<pubDate>Tue, 18 May 2010 12:52:43 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=1994#comment-983</guid>
		<description><![CDATA[Good question - that is the reason why I created the follow-up blog article (click the &quot;Forward to the Next Post in the Series&quot; link at the top of this blog article).  

In the follow-up article, table T6 was created with unique (distinct) values in each of the rows - thus there was less chance (maybe no chance) for SQL*Net compression.  There is a summary table near the bottom of the follow-up article that compares the transfer time of tables T5 and T6 using 6 different computer configurations and various array fetch sizes.]]></description>
		<content:encoded><![CDATA[<p>Good question &#8211; that is the reason why I created the follow-up blog article (click the &#8220;Forward to the Next Post in the Series&#8221; link at the top of this blog article).  </p>
<p>In the follow-up article, table T6 was created with unique (distinct) values in each of the rows &#8211; thus there was less chance (maybe no chance) for SQL*Net compression.  There is a summary table near the bottom of the follow-up article that compares the transfer time of tables T5 and T6 using 6 different computer configurations and various array fetch sizes.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Donatello Settembrino</title>
		<link>http://hoopercharles.wordpress.com/2010/04/27/network-monitoring-experimentations-5/#comment-981</link>
		<dc:creator><![CDATA[Donatello Settembrino]]></dc:creator>
		<pubDate>Tue, 18 May 2010 10:43:42 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=1994#comment-981</guid>
		<description><![CDATA[Hi Charles,

then, after the first row (which is transmitted in full) subsequent transmissions could take advantage of SQL * Net compression.

An observation:
but if, for example, are transmitted rows with all distinct values (ie no SQL * Net compression) and assuming that the average length of a row is 400 bytes, I assume that SDU (maximum) can transmit 8192/400 = about 20 rows. If this is true I expect that with a value Arraysize greater than 20 , not get additional benefits. this consideration is correct? or there are other factors to consider?


Thanks]]></description>
		<content:encoded><![CDATA[<p>Hi Charles,</p>
<p>then, after the first row (which is transmitted in full) subsequent transmissions could take advantage of SQL * Net compression.</p>
<p>An observation:<br />
but if, for example, are transmitted rows with all distinct values (ie no SQL * Net compression) and assuming that the average length of a row is 400 bytes, I assume that SDU (maximum) can transmit 8192/400 = about 20 rows. If this is true I expect that with a value Arraysize greater than 20 , not get additional benefits. this consideration is correct? or there are other factors to consider?</p>
<p>Thanks</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Charles Hooper</title>
		<link>http://hoopercharles.wordpress.com/2010/04/27/network-monitoring-experimentations-5/#comment-960</link>
		<dc:creator><![CDATA[Charles Hooper]]></dc:creator>
		<pubDate>Fri, 14 May 2010 11:12:23 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=1994#comment-960</guid>
		<description><![CDATA[Last night I added 2 more screen captures to this blog article that show the result of the client&#039;s second fetch call, which is the first fetch call that utilizes the specified arraysize.  It might be important to mention here that the default behavior on a TCP/IP network when transferring TCP traffic, the sender is supposed to send 2 network packets, and then the receiver is supposed to send an ACK packet to acknowledge that the previous 2 network packets were received.

The first screen capture shows the first 4 network packets that were received by the client once the specified arraysize of 10 took effect.  In the picture, you can see the first row ends at byte 03d2 (hex), the next row ends at byte 0428 (hex), which implies that each row after the first row requires about 86 bytes in the packet.  With the array fetch size of 10, the first network packet is, for all intents and purposes, fully used.  The second packet contains just 0161 (hex) bytes ~ 353 bytes, compared to the first packet which contained 05F0 (hex) bytes ~ 1520 bytes.  The second and third fetch requests with the specified arraysize resulted in packets that were only about 66% filled - 03F2 (hex) bytes ~ 1010 bytes.

Compare the above with the second screen capture that shows the first 4 network packets that were received by the client once the specified arraysize of 5,000 took effect.  In the picture, you can see the first row ends at byte 03d2 (hex), the next row ends at byte 0428 (hex), which implies that each row after the first row requires about 86 bytes in the packet.  With the array fetch size of 5000, the first network packet is, for all intents and purposes, fully used (1520 bytes).  The second, third, and fourth packets are also fully used  (1520 bytes).

The timing information appears at the top of each packet.
&lt;pre&gt;
Trace Time   Time Delta
001.230571
001.230760   0.000189
001.232660   0.001900
001.234423   0.001763
 
Trace Time   Time Delta
428.107961   
428.108409   0.000448
428.108857   0.000448
428.109397   0.000540
&lt;/pre&gt;

By the end of the fourth packet, the array fetch size of:
* 10 just finishes transferring row A0001085, with a total time delta of 0.003852 seconds.
* 5,000 was just starting to transfer row A0001114, with a total time delta of 0.001436.]]></description>
		<content:encoded><![CDATA[<p>Last night I added 2 more screen captures to this blog article that show the result of the client&#8217;s second fetch call, which is the first fetch call that utilizes the specified arraysize.  It might be important to mention here that the default behavior on a TCP/IP network when transferring TCP traffic, the sender is supposed to send 2 network packets, and then the receiver is supposed to send an ACK packet to acknowledge that the previous 2 network packets were received.</p>
<p>The first screen capture shows the first 4 network packets that were received by the client once the specified arraysize of 10 took effect.  In the picture, you can see the first row ends at byte 03d2 (hex), the next row ends at byte 0428 (hex), which implies that each row after the first row requires about 86 bytes in the packet.  With the array fetch size of 10, the first network packet is, for all intents and purposes, fully used.  The second packet contains just 0161 (hex) bytes ~ 353 bytes, compared to the first packet which contained 05F0 (hex) bytes ~ 1520 bytes.  The second and third fetch requests with the specified arraysize resulted in packets that were only about 66% filled &#8211; 03F2 (hex) bytes ~ 1010 bytes.</p>
<p>Compare the above with the second screen capture that shows the first 4 network packets that were received by the client once the specified arraysize of 5,000 took effect.  In the picture, you can see the first row ends at byte 03d2 (hex), the next row ends at byte 0428 (hex), which implies that each row after the first row requires about 86 bytes in the packet.  With the array fetch size of 5000, the first network packet is, for all intents and purposes, fully used (1520 bytes).  The second, third, and fourth packets are also fully used  (1520 bytes).</p>
<p>The timing information appears at the top of each packet.</p>
<pre>
Trace Time   Time Delta
001.230571
001.230760   0.000189
001.232660   0.001900
001.234423   0.001763
 
Trace Time   Time Delta
428.107961   
428.108409   0.000448
428.108857   0.000448
428.109397   0.000540
</pre>
<p>By the end of the fourth packet, the array fetch size of:<br />
* 10 just finishes transferring row A0001085, with a total time delta of 0.003852 seconds.<br />
* 5,000 was just starting to transfer row A0001114, with a total time delta of 0.001436.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Charles Hooper</title>
		<link>http://hoopercharles.wordpress.com/2010/04/27/network-monitoring-experimentations-5/#comment-944</link>
		<dc:creator><![CDATA[Charles Hooper]]></dc:creator>
		<pubDate>Thu, 13 May 2010 10:15:16 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=1994#comment-944</guid>
		<description><![CDATA[Donatello,

Sorry for the delay.  There is a very long &quot;Network Monitoring Experimentations 6&quot; blog article that is planned for Friday.  I don&#039;t want to give away any of the details about that article just yet, but hopefully it will be useful/helpful.

I did not have a chance to look at a network packet trace yesterday - the packet trace that I captured for tomorrow&#039;s blog article was over 2GB in size, and that caused the 32 bit client to become unstable when loading the trace file at the end of the capture (the entire trace file was lost in the process).

I think that it might be important to mention that the first row transmitted by the server contains values for all columns.  It appears that starting with the second row the server starts transmitting only those columns that change in value from the previous row.  That means that in this test case fewer rows fit into the first 8192 byte SDU unit compared to the second 8192 byte SDU unit, or for that matter the first network packet compared to the second network packet.]]></description>
		<content:encoded><![CDATA[<p>Donatello,</p>
<p>Sorry for the delay.  There is a very long &#8220;Network Monitoring Experimentations 6&#8243; blog article that is planned for Friday.  I don&#8217;t want to give away any of the details about that article just yet, but hopefully it will be useful/helpful.</p>
<p>I did not have a chance to look at a network packet trace yesterday &#8211; the packet trace that I captured for tomorrow&#8217;s blog article was over 2GB in size, and that caused the 32 bit client to become unstable when loading the trace file at the end of the capture (the entire trace file was lost in the process).</p>
<p>I think that it might be important to mention that the first row transmitted by the server contains values for all columns.  It appears that starting with the second row the server starts transmitting only those columns that change in value from the previous row.  That means that in this test case fewer rows fit into the first 8192 byte SDU unit compared to the second 8192 byte SDU unit, or for that matter the first network packet compared to the second network packet.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Donatello Settembrino</title>
		<link>http://hoopercharles.wordpress.com/2010/04/27/network-monitoring-experimentations-5/#comment-784</link>
		<dc:creator><![CDATA[Donatello Settembrino]]></dc:creator>
		<pubDate>Mon, 10 May 2010 10:02:28 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=1994#comment-784</guid>
		<description><![CDATA[Hi Charles,

&quot;That I think there is a problem with the test&quot;

I also think there is a problem with my test:)

Calculations made (109 bytes for row) are inaccurate because I considered in my calculations (Wrong) only two columns (not 8 times the column c1 and  8 times for the column c2, as in your example)

Some observations:

1) the size in bytes of the columns c1 and c2:
&lt;pre&gt;
SQL&gt; select max(vsize(c1)) , min(vsize(c1)), max(vsize(c2)), min(vsize(c2)) from t5;

MAX(VSIZE(C1)) MIN(VSIZE(C1)) MAX(VSIZE(C2)) MIN(VSIZE(C2))
-------------- -------------- -------------- --------------
             9              9            100            100
&lt;/pre&gt;
So, for me every row has 109 bytes (and hence 9 * 8 for column c1 + 100 * 8 for column c2)

the strange thing is that if I run the query in your example:
&lt;pre&gt;
SQL&gt; SELECT   &#039;A&#039;&#124;&#124;TO_CHAR(ROWNUM,&#039;0000000&#039;) as c1,  RPAD(&#039;A&#039;,100,&#039;A&#039;) as c2
  2  FROM   DUAL;

C1        C2
--------- ------------------------------------------------------------------------------------------
A 0000001 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
&lt;/pre&gt;
not seem the same as (a more space):
&lt;pre&gt;
select &#039;A&#039; &#124;&#124; &#039;0000000&#039; &#124;&#124; to_char(ROWNUM) as c1 from dual;

C1
---------------
A00000001
&lt;/pre&gt;
 
2) the test done on my DB
&lt;pre&gt;
SET ARRAYSIZE 10;

Elapsed: 00:19:31.28

Statistiche
----------------------------------------------------------
          0  recursive calls
          0  db block gets
     106432  consistent gets
          0  physical reads
          0  redo size
   90504856  bytes sent via SQL*Net to client
     699537  bytes received via SQL*Net from client
      99902  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
     999001  rows processed
&lt;/pre&gt;
 
&lt;pre&gt;
SQL&gt; SET ARRAYSIZE 50;

Elapsed: 00:05:17.81

Statistiche
----------------------------------------------------------
          0  recursive calls
          0  db block gets
      27781  consistent gets
          0  physical reads
          0  redo size
   86834056  bytes sent via SQL*Net to client
     140097  bytes received via SQL*Net from client
      19982  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
     999001  rows processed
&lt;/pre&gt;
 
&lt;pre&gt;
SQL&gt; SET ARRAYSIZE 100;

Elapsed: 00:03:25.46


Statistiche
----------------------------------------------------------
          0  recursive calls
          0  db block gets
      17950  consistent gets
          0  physical reads
          0  redo size
   86375174  bytes sent via SQL*Net to client
      70167  bytes received via SQL*Net from client
       9992  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
     999001  rows processed
&lt;/pre&gt;
 
&lt;pre&gt;
SQL&gt; SET ARRAYSIZE 500;

Elapsed: 00:02:19.06

Statistiche
----------------------------------------------------------
          0  recursive calls
          0  db block gets
      10085  consistent gets
          0  physical reads
          0  redo size
   86009809  bytes sent via SQL*Net to client
      16222  bytes received via SQL*Net from client
       2000  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
     999001  rows processed
&lt;/pre&gt;
 
&lt;pre&gt;
SQL&gt; set arraysize 1000;


Elapsed: 00:02:06.73

Statistiche
----------------------------------------------------------
          0  recursive calls
          0  db block gets
       9102  consistent gets
          0  physical reads
          0  redo size
   85963179  bytes sent via SQL*Net to client
       8230  bytes received via SQL*Net from client
       1001  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
     999001  rows processed
&lt;/pre&gt;
 
&lt;pre&gt;
SQL&gt; set arraysize 5000;

Elapsed: 00:02:10.03

Statistiche
----------------------------------------------------------
          0  recursive calls
          0  db block gets
       8315  consistent gets
          0  physical reads
          0  redo size
   85925641  bytes sent via SQL*Net to client
       1830  bytes received via SQL*Net from client
        201  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
     999001  rows processed
&lt;/pre&gt;

For example if I get the last case (ArraySize = 5000) I 85925641/999001, then about 86 bytes transmitted per row. But I know I should have 9 * 8 = 72 bytes for column c1 + 100 * 8 = 800 bytes for column c2, then a total of 872 bytes per row. In conclusion I think that takes advantage of SQL * Net compression, as discussed by J. Lewis the link you highlighted.

But what does this mean? SDU that transmits up to 8192/86, then about 95 rows?   (SDU size (8192) / 86 bytes transmitted per row)

thanks]]></description>
		<content:encoded><![CDATA[<p>Hi Charles,</p>
<p>&#8220;That I think there is a problem with the test&#8221;</p>
<p>I also think there is a problem with my test:)</p>
<p>Calculations made (109 bytes for row) are inaccurate because I considered in my calculations (Wrong) only two columns (not 8 times the column c1 and  8 times for the column c2, as in your example)</p>
<p>Some observations:</p>
<p>1) the size in bytes of the columns c1 and c2:</p>
<pre>
SQL&gt; select max(vsize(c1)) , min(vsize(c1)), max(vsize(c2)), min(vsize(c2)) from t5;

MAX(VSIZE(C1)) MIN(VSIZE(C1)) MAX(VSIZE(C2)) MIN(VSIZE(C2))
-------------- -------------- -------------- --------------
             9              9            100            100
</pre>
<p>So, for me every row has 109 bytes (and hence 9 * 8 for column c1 + 100 * 8 for column c2)</p>
<p>the strange thing is that if I run the query in your example:</p>
<pre>
SQL&gt; SELECT   'A'||TO_CHAR(ROWNUM,'0000000') as c1,  RPAD('A',100,'A') as c2
  2  FROM   DUAL;

C1        C2
--------- ------------------------------------------------------------------------------------------
A 0000001 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
</pre>
<p>not seem the same as (a more space):</p>
<pre>
select 'A' || '0000000' || to_char(ROWNUM) as c1 from dual;

C1
---------------
A00000001
</pre>
<p>2) the test done on my DB</p>
<pre>
SET ARRAYSIZE 10;

Elapsed: 00:19:31.28

Statistiche
----------------------------------------------------------
          0  recursive calls
          0  db block gets
     106432  consistent gets
          0  physical reads
          0  redo size
   90504856  bytes sent via SQL*Net to client
     699537  bytes received via SQL*Net from client
      99902  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
     999001  rows processed
</pre>
<pre>
SQL&gt; SET ARRAYSIZE 50;

Elapsed: 00:05:17.81

Statistiche
----------------------------------------------------------
          0  recursive calls
          0  db block gets
      27781  consistent gets
          0  physical reads
          0  redo size
   86834056  bytes sent via SQL*Net to client
     140097  bytes received via SQL*Net from client
      19982  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
     999001  rows processed
</pre>
<pre>
SQL&gt; SET ARRAYSIZE 100;

Elapsed: 00:03:25.46


Statistiche
----------------------------------------------------------
          0  recursive calls
          0  db block gets
      17950  consistent gets
          0  physical reads
          0  redo size
   86375174  bytes sent via SQL*Net to client
      70167  bytes received via SQL*Net from client
       9992  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
     999001  rows processed
</pre>
<pre>
SQL&gt; SET ARRAYSIZE 500;

Elapsed: 00:02:19.06

Statistiche
----------------------------------------------------------
          0  recursive calls
          0  db block gets
      10085  consistent gets
          0  physical reads
          0  redo size
   86009809  bytes sent via SQL*Net to client
      16222  bytes received via SQL*Net from client
       2000  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
     999001  rows processed
</pre>
<pre>
SQL&gt; set arraysize 1000;


Elapsed: 00:02:06.73

Statistiche
----------------------------------------------------------
          0  recursive calls
          0  db block gets
       9102  consistent gets
          0  physical reads
          0  redo size
   85963179  bytes sent via SQL*Net to client
       8230  bytes received via SQL*Net from client
       1001  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
     999001  rows processed
</pre>
<pre>
SQL&gt; set arraysize 5000;

Elapsed: 00:02:10.03

Statistiche
----------------------------------------------------------
          0  recursive calls
          0  db block gets
       8315  consistent gets
          0  physical reads
          0  redo size
   85925641  bytes sent via SQL*Net to client
       1830  bytes received via SQL*Net from client
        201  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
     999001  rows processed
</pre>
<p>For example if I get the last case (ArraySize = 5000) I 85925641/999001, then about 86 bytes transmitted per row. But I know I should have 9 * 8 = 72 bytes for column c1 + 100 * 8 = 800 bytes for column c2, then a total of 872 bytes per row. In conclusion I think that takes advantage of SQL * Net compression, as discussed by J. Lewis the link you highlighted.</p>
<p>But what does this mean? SDU that transmits up to 8192/86, then about 95 rows?   (SDU size (8192) / 86 bytes transmitted per row)</p>
<p>thanks</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Charles Hooper</title>
		<link>http://hoopercharles.wordpress.com/2010/04/27/network-monitoring-experimentations-5/#comment-767</link>
		<dc:creator><![CDATA[Charles Hooper]]></dc:creator>
		<pubDate>Sat, 08 May 2010 13:03:42 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=1994#comment-767</guid>
		<description><![CDATA[Donatello,

Thank you for posting your analysis.  Based on the graphs that were provided, I agree with you that a fetch array size of 500 seems to be ideal.

I think that there is a problem with the test, at least with the design of the data for the test.  Each row retrieved was intended to be roughly 875 bytes long (7*8 bytes for column C1 + 100 * 8 bytes for column C2 + overhead).  Your observation that each line/row is about 109 bytes disagrees with the intended row length.  So, what is happening?  

I must admit that I did not catch this earlier.  Notice in the third picture (&lt;a href=&quot;http://hoopercharles.files.wordpress.com/2010/04/networkmonitoring5-3.jpg&quot; rel=&quot;nofollow&quot;&gt;networkmonitoring5-3.jpg&lt;/a&gt;) that we see in the packet detail at the bottom of the picture a series of many letter A&#039;s immediately after a number - this is the first row of the fetch.  Compare that picture with the fourth picture (&lt;a href=&quot;http://hoopercharles.files.wordpress.com/2010/04/networkmonitoring5-4.jpg&quot; rel=&quot;nofollow&quot;&gt;networkmonitoring5-4.jpg&lt;/a&gt;) which shows one of the later packets in the fetch array size 5000 test.  The fourth picture does not show the sequence of the letter A&#039;s -  it shows a single letter A, but that is actually part of column C1.  Strange... until you read Jonathan Lewis&#039; recent blog article on the topic of &lt;a href=&quot;http://jonathanlewis.wordpress.com/2010/05/07/sqlnet-compression/&quot; rel=&quot;nofollow&quot;&gt;SQL*Net compression&lt;/a&gt;.  With Jonathan&#039;s post in mind, it now becomes a bit more clear why there was such a significant decrease in the time to fetch 50 rows at a time compared to 10 rows at a time - I would need to double-check the packets, but it looks like 49 of every 50 rows (98%) in each fetch could be compressed when the fetch array size was set to 50, while only 9 of every 10 rows (90%) in each fetch could be compressed when the fetch array size was set to 10.  That does not sound like much of a difference until you compare the uncompressed byte size with the compressed byte size.  The larger fetch array size also should have reduced the number of partially filled network packets leaving the server. 

In short, a smaller fetch array size, such as 100, may be ideal with a different data set that contains less frequently repeated data (thus less compression takes place).

---
Edit May 9, 2010: after reviewing the Wireshark packet capture, the fetch array size did not affect the SQL*Net compression - only the first row in the result set was transmitted in full, with the rest of the rows taking advantage of SQL*Net compression.]]></description>
		<content:encoded><![CDATA[<p>Donatello,</p>
<p>Thank you for posting your analysis.  Based on the graphs that were provided, I agree with you that a fetch array size of 500 seems to be ideal.</p>
<p>I think that there is a problem with the test, at least with the design of the data for the test.  Each row retrieved was intended to be roughly 875 bytes long (7*8 bytes for column C1 + 100 * 8 bytes for column C2 + overhead).  Your observation that each line/row is about 109 bytes disagrees with the intended row length.  So, what is happening?  </p>
<p>I must admit that I did not catch this earlier.  Notice in the third picture (<a href="http://hoopercharles.files.wordpress.com/2010/04/networkmonitoring5-3.jpg" rel="nofollow">networkmonitoring5-3.jpg</a>) that we see in the packet detail at the bottom of the picture a series of many letter A&#8217;s immediately after a number &#8211; this is the first row of the fetch.  Compare that picture with the fourth picture (<a href="http://hoopercharles.files.wordpress.com/2010/04/networkmonitoring5-4.jpg" rel="nofollow">networkmonitoring5-4.jpg</a>) which shows one of the later packets in the fetch array size 5000 test.  The fourth picture does not show the sequence of the letter A&#8217;s &#8211;  it shows a single letter A, but that is actually part of column C1.  Strange&#8230; until you read Jonathan Lewis&#8217; recent blog article on the topic of <a href="http://jonathanlewis.wordpress.com/2010/05/07/sqlnet-compression/" rel="nofollow">SQL*Net compression</a>.  With Jonathan&#8217;s post in mind, it now becomes a bit more clear why there was such a significant decrease in the time to fetch 50 rows at a time compared to 10 rows at a time &#8211; I would need to double-check the packets, but it looks like 49 of every 50 rows (98%) in each fetch could be compressed when the fetch array size was set to 50, while only 9 of every 10 rows (90%) in each fetch could be compressed when the fetch array size was set to 10.  That does not sound like much of a difference until you compare the uncompressed byte size with the compressed byte size.  The larger fetch array size also should have reduced the number of partially filled network packets leaving the server. </p>
<p>In short, a smaller fetch array size, such as 100, may be ideal with a different data set that contains less frequently repeated data (thus less compression takes place).</p>
<p>&#8212;<br />
Edit May 9, 2010: after reviewing the Wireshark packet capture, the fetch array size did not affect the SQL*Net compression &#8211; only the first row in the result set was transmitted in full, with the rest of the rows taking advantage of SQL*Net compression.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Donatello Settembrino</title>
		<link>http://hoopercharles.wordpress.com/2010/04/27/network-monitoring-experimentations-5/#comment-764</link>
		<dc:creator><![CDATA[Donatello Settembrino]]></dc:creator>
		<pubDate>Fri, 07 May 2010 15:20:23 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=1994#comment-764</guid>
		<description><![CDATA[Hi Charles,
When I look at the graphs I would choose a ArraySize 500. In fact, for values
less than 500 (for bytes and packets) have response times greater.
With more than 500 ArraySize values deviate less evident.
As for the latency, I note that there is a latency too long for
ArraySize 50 and 5000, while lower values for ArraySize 50, 100, 500 and 1000
(Although I note that with increasing ArraySize also increases the latency time).

So in conclusion, my answer is ArraySize = 500.

But I wanted to make a couple of considerations:
the first, I repeated the test by monitoring elapsed. Elapsed times decrease
with increasing of ArraySize. But if the response time is less, that does not mean that I believe is the most efficient, right?

I could imagine &quot;set always ArraySize 5000 and I solved my problems.&quot; Creed
not work well, because I certainly increase memory usage and then I consider the latency, which is my second consideration.

I think we must take Consider SDU which has a default value of 8K.
In tests I conducted on my DB I know that each line is 109 bytes, then
SDU is filled with rows about 8192/109 = 75 (ie SDU= 8k divided row length). If the values of your tests are not very different from mine, this should explain why it has the lowest latency for ArraySize values between 50 and 100, or wrong ....]]></description>
		<content:encoded><![CDATA[<p>Hi Charles,<br />
When I look at the graphs I would choose a ArraySize 500. In fact, for values<br />
less than 500 (for bytes and packets) have response times greater.<br />
With more than 500 ArraySize values deviate less evident.<br />
As for the latency, I note that there is a latency too long for<br />
ArraySize 50 and 5000, while lower values for ArraySize 50, 100, 500 and 1000<br />
(Although I note that with increasing ArraySize also increases the latency time).</p>
<p>So in conclusion, my answer is ArraySize = 500.</p>
<p>But I wanted to make a couple of considerations:<br />
the first, I repeated the test by monitoring elapsed. Elapsed times decrease<br />
with increasing of ArraySize. But if the response time is less, that does not mean that I believe is the most efficient, right?</p>
<p>I could imagine &#8220;set always ArraySize 5000 and I solved my problems.&#8221; Creed<br />
not work well, because I certainly increase memory usage and then I consider the latency, which is my second consideration.</p>
<p>I think we must take Consider SDU which has a default value of 8K.<br />
In tests I conducted on my DB I know that each line is 109 bytes, then<br />
SDU is filled with rows about 8192/109 = 75 (ie SDU= 8k divided row length). If the values of your tests are not very different from mine, this should explain why it has the lowest latency for ArraySize values between 50 and 100, or wrong &#8230;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Log Buffer #187, a Carnival of the Vanities for DBAs &#124; The Pythian Blog</title>
		<link>http://hoopercharles.wordpress.com/2010/04/27/network-monitoring-experimentations-5/#comment-739</link>
		<dc:creator><![CDATA[Log Buffer #187, a Carnival of the Vanities for DBAs &#124; The Pythian Blog]]></dc:creator>
		<pubDate>Fri, 30 Apr 2010 20:54:16 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=1994#comment-739</guid>
		<description><![CDATA[[...] Hooper continues experimenting with wireshark, and creates some impressive [...]]]></description>
		<content:encoded><![CDATA[<p>[...] Hooper continues experimenting with wireshark, and creates some impressive [...]</p>
]]></content:encoded>
	</item>
</channel>
</rss>
