<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>performance-tuning &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/performance-tuning/</link>
	<description>Feed of posts on WordPress.com tagged "performance-tuning"</description>
	<pubDate>Mon, 28 Dec 2009 06:24:53 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[RAC performance tuning: Understanding Global cache performance ]]></title>
<link>http://orainternals.wordpress.com/2009/12/23/rac-performance-tuning-understanding-global-cache-performance/</link>
<pubDate>Wed, 23 Dec 2009 19:09:01 +0000</pubDate>
<dc:creator>orainternals</dc:creator>
<guid>http://orainternals.wordpress.com/2009/12/23/rac-performance-tuning-understanding-global-cache-performance/</guid>
<description><![CDATA[Global cache performance metrics are not correctly measured. It is not understood clearly either. Th]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>
Global cache performance metrics are not correctly measured. It is not understood clearly either. There are even few blogs and web pages disseminating incorrect information. This blog entry is an attempt to offer few methods and scripts to understand global cache performance.
</p>
<p><b> Always review all instances </b></p>
<p>
  It is very important to review the performance metrics from all instances in that RAC cluster, not just one instance that you are connected. If you have access to AWR reports, then it is critical to generate AWR reports (or statspack reports) from all instances. But, the problem is that, DBAs tend to generate AWR reports after logging in to each instance iteratively, enter couple of parameters and then reports are generated. Not exactly a convenient practice.
</p>
<pre>
  REM connect to each instance separately, type in the beginning snap_id and ending snap_id for each node etc..
   sqlplus mydba@proddb1
   @$ORACLE_HOME/rdbms/admin/awrrpt.sql
   exit;
   sqlplus mydba@proddb2
   @$ORACLE_HOME/rdbms/admin/awrrpt.sql
   exit;
   sqlplus mydba@proddb3
   @$ORACLE_HOME/rdbms/admin/awrrpt.sql
   exit;
</pre>
<p>
  There are few issues with this approach. It is a cumbersome practice if the instance count is higher. In addition to that, all of AWR reports are, in turn, accessing underlying AWR tables. Physically, rows from all instances are together in the same block and so, by executing these reports connecting to various instances, Global cache traffic is increased. If the database is suffering from Global cache (GC) performance issues then generating reports connecting to various instances is probably not a grand idea.
</p>
<p>
  I have created few basic scripts to generate AWR reports from all instances in a single step. Script <a href="http://www.orainternals.com/viewfile.php?id=40"> awrrpt_all_gen.sql </a> queries AWR tables and gv$instance to access last snap_id and various instance_ids. Then this script generates AWR reports for all instances in that cluster in the current directory, for the last AWR snap. This script is quite handy while debugging RAC performance issues. Now, we have AWR reports from all instances in one directory and we can easily grep these files to understand metrics in various instances.
</p>
<pre>
@awrrpt_all_gen.sql

awrrpt_all_gen.sql v1.00 by Riyaj Shamsudeen @orainternals.com

To generate AWR Report from all RAC instances concurrently.
Creates reports using last two snap_ids.

...Generating awrrpt_all.sql script.... Please wait....
...Completed script generation.

Executing awrrpt_all.sql to generate AWR reports.
...Generates AWR reports with file name format awrrpt___.txt for each instance.
...Please wait for few minutes...

...AWR report created for instance 1. Please wait..
...AWR report created for instance 2. Please wait..
...AWR report created for instance 3. Please wait..
...AWR report created for instance 4. Please wait..

AWR reports created.
</pre>
<p>
   If you would like ability to choose the snap_ids, then use the script <a href="http://www.orainternals.com/viewfile.php?id=41"> awrrpt_all_range_gen.sql </a>
</p>
<p><b> Use granular approach to GC measurements </b></p>
<p>
   It is important to measure Global cache performance metrics correctly, especially those damned averages. Incorrect measurements of averages can lead to faulty analysis. For example, following query is retrieving average global cache CR receive time from gv$sysstat view. Problem with this SQL statement is that this statement is retrieving average global cache receive time from the restart of the instances. Global cache performance is quite sensitive to workload and querying over a wide time range, as in this query, can lead to faulty analysis.</p>
<pre>

REM This is really a bad idea!!

select b1.inst_id, b2.value "RECEIVED",
b1.value "RECEIVE TIME",
((b1.value / b2.value) * 10) "AVG RECEIVE TIME (ms)"
from gv$sysstat b1, gv$sysstat b2
where b1.name = 'gc current block receive time' and
b2.name = 'gc current blocks received' and b1.inst_id = b2.inst_id;
</pre>
<p>
  As an analogy, above query is equivalent to a patient-Doctor conversation:</p>
<p>  Patient: Doctor, I don&#8217;t feel good. I feel that I am having fever.<br />
  Doctor : Nope. Your average body temperature from the beginning of this year is around 98. So, you are doing excellent.</p>
</pre>
<p>
  It is essential to review the global cache performance metrics at a granular level. Use AWR reports or statspack reports for a short period of time. Better yet, if you want to quickly review GC performance metrics, you can use my script <a href="http://www.orainternals.com/viewfile.php?id=42">gc_traffic_print.sql</a>. This script captures various statistics relevant to Global cache performance in to a PL/SQL table, sleeps for N seconds (default N=60) and re-captures the statistics after the sleep. Then the script prints all the relevant details in easily readable tabular format. Very useful in quickly reviewing the Global cache performance metrics.
</p>
<pre>
SQL&#62; @gc_traffic_print.sql

gc_traffic_print.sql v1.20 by Riyaj Shamsudeen @orainternals.com

...Calculating GC Rx and Tx timing and blocks..
...Default collection period is 60 seconds.... Please wait for at least 60 seconds...
Enter value for sleep: 30
---------&#124;--------------&#124;---------&#124;----------------&#124;----------&#124;---------------&#124;---------------&#124;-------------&#124;
Inst     &#124; CR blocks Rx &#124; CR time &#124;  CUR blocks Rx &#124; CUR time &#124;  CR blocks Tx &#124; CUR blocks Tx &#124;Tot blocks   &#124;
---------&#124;--------------&#124;---------&#124;----------------&#124;----------&#124;---------------&#124;---------------&#124;-------------&#124;
1        &#124;         29288&#124;    12.17&#124;          14914&#124;      4.58&#124;          27059&#124;           17439&#124;        88700&#124;
2        &#124;         21201&#124;     5.75&#124;          12835&#124;      5.19&#124;          26831&#124;           16741&#124;        77608&#124;
3        &#124;         22942&#124;     4.64&#124;          11751&#124;      3.82&#124;          23918&#124;            9205&#124;        67816&#124;
4        &#124;         32075&#124;     4.78&#124;          19260&#124;      4.55&#124;          31046&#124;           19331&#124;       101712&#124;
---------&#124;--------------&#124;---------&#124;----------------&#124;----------&#124;---------------&#124;---------------&#124;-------------&#124;

PL/SQL procedure successfully completed.
</pre>
<p>
  Column key for the above script is:<br />
   CR block RX : GC CR blocks received<br />
   CR time : Average GC CR receive time<br />
   CUR blocks RX: GC CUR blocks received<br />
   CUR time: Average GC CuR receive time<br />
   CR blocks TX: GC CR blocks transmitted<br />
   CUR blocks TX: GC CUR blocks transmitted<br />
   tot blocks: Sum of transmitted + received for both CR and CUR traffic
</p>
<p><b> Breakup: global cache performance </b></p>
<p>
   Global cache processing performance can be broken down to its sub components ( excluding wire latency, but that can be calculated). Breakup of this metrics must be done at a granular level also. We can use yet another script  <a href="http://www.orainternals.com/viewfile.php?id=43">gc_traffic_processing.sql</a> to review the performance metrics for the past N seconds. For example, in the output printed below, Global cache CR processing time is broken in to various sub-components of global cache processing. Remember that these performance metrics are in the SEND side of Global cache performance metrics. Meaning, inefficient global cache <em>processing </em> in one instance affects other instances' global cache <em>receive </em> time, but not the self. For example, in the table above, GC CR receive performance was at 12.1ms for instance 1. That is due to another instance (probably node 4 in this case) suffering from high GC processing time (more specifically high 'CR block flush time' in node 4). It is far more accurate to review global cache performance issues in a granular basis. Caution though, try not to specify at least a minute so that these numbers are consistent.
</p>
<pre>
@gc_traffic_procssing.sql
gc_traffic_processing.sql v1.00 by Riyaj Shamsudeen @orainternals.com

...Prints various timing related information for the past N seconds
...Default collection period is 60 seconds.... Please wait for at least 60 seconds...
Enter value for sleep:

---------&#124;-----------&#124;---------&#124;-----------&#124;----------&#124;------------&#124;------------&#124;------------&#124;----------&#124;
Inst     &#124; CR blk Tx &#124; CR bld  &#124; CR fls tm &#124; CR snd tm&#124; CUR blk TX &#124; CUR pin tm &#124; CUR fls tm &#124;CUR snd tm&#124;
---------&#124;-----------&#124;---------&#124;-----------&#124;----------&#124;------------&#124;------------&#124;------------&#124;----------&#124;
1        &#124;      62732&#124;       .2&#124;       1.25&#124;       .21&#124;       48920&#124;        .96&#124;         .22&#124;        .22&#124;
2        &#124;      46037&#124;      .13&#124;        .76&#124;        .2&#124;       42019&#124;        .68&#124;         .17&#124;         .2&#124;
3        &#124;      72237&#124;      .63&#124;        .79&#124;       .19&#124;       22697&#124;        .44&#124;         .29&#124;        .23&#124;
4        &#124;     113816&#124;      .13&#124;       2.04&#124;       .15&#124;       51020&#124;        .87&#124;         .12&#124;        .13&#124;
--------------------------------------------------------------------------------------------------------

PL/SQL procedure successfully completed.
</pre>
<p>
  Here is the column definitions for the script output:<br />
    CR blk TX: GC CR blocks served<br />
    CR bld : Average GC CR build time/CR block served<br />
    CR fls tm: Average GC CR flush time/CR block served<br />
    CR snd tm: Average GC CR send time/CR block served<br />
    CUR blk TX: GC CUR blocks served<br />
    CUR pin tm: Average GC Current pin time /CUR block served<br />
    CUR fls tm : Average GC Current flush time/CUR block served<br />
    CUR snd tm: Average GC current send time/CUR block served
</p>
<p><b> Review histograms for GC events </b></p>
<p>
  Averages can be misleading. Revealing performance issues underneath the average is a very important task to do. For example, we see that 'gc cr block receive time' average is high. But, let's review the histogram for the gc events related to Global cache receive time. My script <a href="http://www.orainternals.com/viewfile.php?id=38">gc_event_histogram.sql</a> is quite handy to review event histograms. This script provides a difference in performance statistics between two samples and prints them in a readable format. In this case, node 1 is has 8578 waits for the event 'gc cr block 2-way' under 2ms and the sessions in instance 1 had 9851 waits between 2-4ms. Only few waits over 16ms.</p>
<pre>
@gc_event_histogram.sql

gc_event_histogram.sql v1.0 by Riyaj Shamsudeen @orainternals.com

Default collection period is sleep seconds. Please wait..
Enter value for event: gc cr block 2-way
Enter value for sleep: 60
---------&#124;-----------------------&#124;----------------&#124;----------&#124;
Inst id  &#124; Event                 &#124;wait time milli &#124;wait cnt  &#124;
---------&#124;-----------------------&#124;----------------&#124;----------&#124;
1        &#124;gc cr block 2-way      &#124;               1&#124;        98&#124;
1        &#124;gc cr block 2-way      &#124;               2&#124;      8578&#124;
1        &#124;gc cr block 2-way      &#124;               4&#124;      9851&#124;
1        &#124;gc cr block 2-way      &#124;               8&#124;      2291&#124;
1        &#124;gc cr block 2-way      &#124;              16&#124;       117&#124;
1        &#124;gc cr block 2-way      &#124;              32&#124;         6&#124;
1        &#124;gc cr block 2-way      &#124;              64&#124;         1&#124;
1        &#124;gc cr block 2-way      &#124;             128&#124;         2&#124;
1        &#124;gc cr block 2-way      &#124;             256&#124;         0&#124;
1        &#124;gc cr block 2-way      &#124;             512&#124;         0&#124;
1        &#124;gc cr block 2-way      &#124;            1024&#124;         0&#124;
1        &#124;gc cr block 2-way      &#124;            2048&#124;         0&#124;
1        &#124;gc cr block 2-way      &#124;            4096&#124;         0&#124;
1        &#124;gc cr block 2-way      &#124;            8192&#124;         0&#124;
1        &#124;gc cr block 2-way      &#124;           16384&#124;         0&#124;
2        &#124;gc cr block 2-way      &#124;               1&#124;       155&#124;
2        &#124;gc cr block 2-way      &#124;               2&#124;     10792&#124;
2        &#124;gc cr block 2-way      &#124;               4&#124;     14201&#124;
2        &#124;gc cr block 2-way      &#124;               8&#124;      3887&#124;
2        &#124;gc cr block 2-way      &#124;              16&#124;       204&#124;
...
</pre>
<p>
  But, we also need to see 3-way waits. Let's review 3-way waits with the above script. We will simply supply 'gc cr block 3-way' as the wait event. In this case, we see that there are 12,062 waits over between 4-8ms. Of course, this must be improved.</p>
<pre>

@gc_event_histogram.sql

gc_event_histogram.sql v1.0 by Riyaj Shamsudeen @orainternals.com

Default collection period is sleep seconds. Please wait..
Enter value for event: gc cr block 3-way
Enter value for sleep: 60
---------&#124;-----------------------&#124;----------------&#124;----------&#124;
Inst id  &#124; Event                 &#124;wait time milli &#124;wait cnt  &#124;
---------&#124;-----------------------&#124;----------------&#124;----------&#124;
1        &#124;gc cr block 3-way      &#124;               1&#124;         3&#124;
1        &#124;gc cr block 3-way      &#124;               2&#124;       320&#124;
1        &#124;gc cr block 3-way      &#124;               4&#124;     17017&#124;
1        &#124;gc cr block 3-way      &#124;               8&#124;     12062&#124;
1        &#124;gc cr block 3-way      &#124;              16&#124;      1725&#124;
1        &#124;gc cr block 3-way      &#124;              32&#124;       113&#124;
1        &#124;gc cr block 3-way      &#124;              64&#124;         0&#124;
1        &#124;gc cr block 3-way      &#124;             128&#124;         0&#124;
1        &#124;gc cr block 3-way      &#124;             256&#124;         0&#124;
1        &#124;gc cr block 3-way      &#124;             512&#124;         0&#124;
1        &#124;gc cr block 3-way      &#124;            1024&#124;         0&#124;
1        &#124;gc cr block 3-way      &#124;            2048&#124;         0&#124;
1        &#124;gc cr block 3-way      &#124;            4096&#124;         0&#124;
1        &#124;gc cr block 3-way      &#124;            8192&#124;         0&#124;
...
</pre>
<p>
  In essence, these four scripts will be useful in debugging Global cache performance issues. Please let me know if you encounter errors in these scripts. We will use these scripts in future discussions to show how we resolved few RAC performance issues.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[When to use Bindvariables or Literals]]></title>
<link>http://uhesse.wordpress.com/2009/12/22/when-to-use-bindvariables-or-literals/</link>
<pubDate>Tue, 22 Dec 2009 10:11:29 +0000</pubDate>
<dc:creator>Uwe Hesse</dc:creator>
<guid>http://uhesse.wordpress.com/2009/12/22/when-to-use-bindvariables-or-literals/</guid>
<description><![CDATA[From many Oracle Database Administration courses and Performance Tuning courses that I have tought i]]></description>
<content:encoded><![CDATA[From many Oracle Database Administration courses and Performance Tuning courses that I have tought i]]></content:encoded>
</item>
<item>
<title><![CDATA[Drinking our own Champagne: using RPM to optimize…RPM.]]></title>
<link>http://blog.newrelic.com/2009/12/16/drinking-our-own-champagne-using-rpm-to-optimize%e2%80%a6rpm/</link>
<pubDate>Wed, 16 Dec 2009 19:46:33 +0000</pubDate>
<dc:creator>jimgochee</dc:creator>
<guid>http://blog.newrelic.com/2009/12/16/drinking-our-own-champagne-using-rpm-to-optimize%e2%80%a6rpm/</guid>
<description><![CDATA[After the dust settled at New Relic on our complete site redesign (what we call V2), we figured it w]]></description>
<content:encoded><![CDATA[After the dust settled at New Relic on our complete site redesign (what we call V2), we figured it w]]></content:encoded>
</item>
<item>
<title><![CDATA[ASP.net application performance tuning - Part 1]]></title>
<link>http://praveshsoni.wordpress.com/2009/12/15/asp-net-application-performance-tuning-part-1/</link>
<pubDate>Tue, 15 Dec 2009 06:06:17 +0000</pubDate>
<dc:creator>pjsoni</dc:creator>
<guid>http://praveshsoni.wordpress.com/2009/12/15/asp-net-application-performance-tuning-part-1/</guid>
<description><![CDATA[In past, I&#8217;ve started developing asp.net applications with the default settings of asp.net. So]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>In past, I&#8217;ve started developing asp.net applications with the default settings of asp.net. Sometimes I found that the application is not responding quickly as it should be. I&#8217;ve digged in to this matter and figured out that the entire page is heavily loaded with the hidden page viewstate. Due to this length, the application is taking much long time to load in browser. To overcome this issue, the viewstate needs to be compressed using some kind of the compression.</p>
<p><a href="http://praveshsoni.files.wordpress.com/2009/12/image.png"><img style="display:block;float:none;margin-left:auto;margin-right:auto;border-width:0;" title="image" src="http://praveshsoni.files.wordpress.com/2009/12/image_thumb.png?w=644&#038;h=451" border="0" alt="image" width="644" height="451" /></a></p>
<p><em>Figure1: Viewstate size before compression</em></p>
<p>Below is the methods which I&#8217;ve used in my application for compressing the viewstate data.</p>
<pre class="brush: csharp;">
public static class Zip
{
    private const int BUFFER_SIZE = 65536;
    static int viewStateCompression = Deflater.NO_COMPRESSION;

    public static  int ViewStateCompression
    {
        get { return viewStateCompression; }
        set { viewStateCompression = value; }
    }

    public static byte[] Compress(byte[] bytes)
    {
        using (MemoryStream memoryStream = new MemoryStream(BUFFER_SIZE))
        {
            Deflater deflater = new Deflater(ViewStateCompression);
            using (Stream stream = new DeflaterOutputStream(memoryStream, deflater, BUFFER_SIZE))
            {
                stream.Write(bytes, 0, bytes.Length);
            }
            return memoryStream.ToArray();
        }
    }

    public static byte[] Decompress(byte[] bytes)
    {
        using (MemoryStream byteStream = new MemoryStream(bytes))
        {
            using (Stream stream = new InflaterInputStream(byteStream))
            {
                using (MemoryStream memory = new MemoryStream(BUFFER_SIZE))
                {
                    byte[] buffer = new byte[BUFFER_SIZE];
                    while (true)
                    {
                        int size = stream.Read(buffer, 0, BUFFER_SIZE);
                        if (size &#38;lt;= 0)
                            break;

                        memory.Write(buffer, 0, size);
                    }
                    return memory.ToArray();
                }
            }
        }
    }
}
</pre>
<p>System.Web.UI.Page is having two methods SavePageStateToPersistenceMedium(Object state) &#38; LoadPageStateFromPersistenceMedium() which are responsible for state management via viewstate. We need to override these methods in to our custom base class for compressing the viewstate.</p>
<pre class="brush: csharp;">
protected override void SavePageStateToPersistenceMedium(Object state)
{
    if (ViewStateCompression == Deflater.NO_COMPRESSION)
    {
        base.SavePageStateToPersistenceMedium(state);
        return;
    }

    Object viewState = state;
    if (state is Pair)
    {
        Pair statePair = (Pair)state;
        PageStatePersister.ControlState = statePair.First;
        viewState = statePair.Second;
    }

    using (StringWriter writer = new StringWriter())
    {
        new LosFormatter().Serialize(writer, viewState);
        string base64 = writer.ToString();
        byte[] compressed = Zip.Compress(Convert.FromBase64String((base64)));
        PageStatePersister.ViewState = Convert.ToBase64String(compressed);
    }
    PageStatePersister.Save();
}

protected override Object LoadPageStateFromPersistenceMedium()
{
    if (viewStateCompression == Deflater.NO_COMPRESSION)
        return base.LoadPageStateFromPersistenceMedium();

    PageStatePersister.Load();
    String base64 = PageStatePersister.ViewState.ToString();
    byte[] state = Zip.Decompress(Convert.FromBase64String(base64));
    string serializedState = Convert.ToBase64String(state);

    object viewState = new LosFormatter().Deserialize(serializedState);
    return new Pair(PageStatePersister.ControlState, viewState);
}
</pre>
<p>To enable compression we need to override OnInit method from System.Web.UI.Page class.</p>
<pre class="brush: csharp;">
protected override void OnInit(EventArgs e)
{
    Zip.ViewStateCompression = Deflater.BEST_COMPRESSION;
    base.OnInit(e);
}
</pre>
<p>I&#8217;ve used Sharp ZipLib for the compression and found the interesting results. On an average I found that the entire viewstate is compressed nearly up to 30% of the original viewstate size.</p>
<p><a href="http://praveshsoni.files.wordpress.com/2009/12/viewstate2.png"><img style="display:block;float:none;margin-left:auto;margin-right:auto;border-width:0;" title="Viewstate2" src="http://praveshsoni.files.wordpress.com/2009/12/viewstate2_thumb.png?w=644&#038;h=451" border="0" alt="Viewstate2" width="644" height="451" /></a></p>
<p><em>Figure 2: Viewstate size after compression</em></p>
<p>Below is a small piece of code which is showing the viewstate data size.</p>
<pre class="brush: csharp;">
 public class ViewstateSizeControl : Label
    {
        private const string SCRIPT = &#34;document.getElementById('{0}').innerText = 'Size of Viewstate: ' + document.getElementById('__VIEWSTATE').value.length;&#34;;

        protected override void OnLoad(EventArgs e)
        {
            if (Visible)
            {
                Page.ClientScript.RegisterStartupScript(
                    typeof(Page),
                    UniqueID,
                    string.Format(SCRIPT, ClientID),
                    true);
            }
            base.OnLoad(e);
        }

    }
</pre>
<p>To use the control, simply put the control on the aspx page and compare the size of viewstate before and after compression.</p>
<p>Hope this will help you all in your upcoming/current assignment.</p>
<p>Happy Programming..</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Script to find which Indexes need to rebuild]]></title>
<link>http://pavandba.wordpress.com/2009/12/14/script-to-find-which-indexes-need-to-rebuild/</link>
<pubDate>Mon, 14 Dec 2009 13:42:58 +0000</pubDate>
<dc:creator>Pavan Kumar</dc:creator>
<guid>http://pavandba.wordpress.com/2009/12/14/script-to-find-which-indexes-need-to-rebuild/</guid>
<description><![CDATA[DECLARE   vOwner   dba_indexes.owner%TYPE;            /* Index Owner            */   vIdxName dba_in]]></description>
<content:encoded><![CDATA[DECLARE   vOwner   dba_indexes.owner%TYPE;            /* Index Owner            */   vIdxName dba_in]]></content:encoded>
</item>
<item>
<title><![CDATA[First Week]]></title>
<link>http://christopheregan.wordpress.com/2009/12/12/first-week/</link>
<pubDate>Sat, 12 Dec 2009 03:14:36 +0000</pubDate>
<dc:creator>christopheregan</dc:creator>
<guid>http://christopheregan.wordpress.com/2009/12/12/first-week/</guid>
<description><![CDATA[This week, just did the old standby. Pick the the most expensive batch jobs and tune the heck out of]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>This week, just did the old standby.  Pick the the most expensive batch jobs and tune the heck out of them.  Counters should be integer, fix stupid SQL&#8217;s, etc.   Use BMC Data Optimizer if appropriate.  I was able to replace one SQL that had 5 likes with &#8216;=&#8217;.  Scary that someone would be that ignorant.<br />
One batch job is not tuneable at all, it has me perplexed.  The job costs a fortune.  The data comes in and you don&#8217;t know if it&#8217;s an add or update &#38; it&#8217;s posted to DB2.  Pretty straightforward.  I&#8217;ll look more at the tables and indexes and look for RI and row-level locking.</p>
<p>Found some cool internet sites.  <a href="http://videolectures.net">Videolectures.net</a> and <a href="http://video.google.com">video.google.com</a></p>
<p>Currently, I&#8217;m taking a datamining class on videolectures.<br />
As far as career changes, I&#8217;m going to get a Healthcare IT certificate at the community college.   Healthcare seems to be where all the jobs are now.</p>
<p><a href="http://www.linkedin.com/in/christopheregan">LinkedIn</a><br />
Cut IT costs, not jobs, through mainframe performance tuning</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[SIMPLE_INTEGER as performance booster [ Comparing SIMPLE_INTEGER, PLS_INTEGER, NUMBER data types ] ]]></title>
<link>http://sungur.wordpress.com/2009/12/10/simple_integer-as-performance-booster-comparing-simple_integer-pls_integer-number-data-types/</link>
<pubDate>Thu, 10 Dec 2009 13:54:32 +0000</pubDate>
<dc:creator>Ahmet Fuat Sungur</dc:creator>
<guid>http://sungur.wordpress.com/2009/12/10/simple_integer-as-performance-booster-comparing-simple_integer-pls_integer-number-data-types/</guid>
<description><![CDATA[I&#8217;ve given education about the Advanced features of PL/SQL in our company academy. While i was]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I&#8217;ve given education about the Advanced features of PL/SQL in our company academy. While i was preparing the education, simple_integer data type drawn my attention. This data type introduced with Oracle 11g. I wanted to compare this data type to pls_integer and number. </p>
<p>If you are sure with simple_integer variable that won&#8217;t be null, you can use this data type instead of pls_integer ( Also you know that pls_integer faster than number variable because it uses the hardware calculations instead of programmatic calculations like number).</p>
<p>To compare this i&#8217;ve written 3 split functions that takes an in parameter and takes an out parameter that is array of splitted parts of this string. </p>
<p>Firstly we create a string array type : </p>
<div class="plsql" style="font-family:Courier New;color:#006;background-color:#f0f0f0;border:1px dotted;font-size:12px;white-space:normal;">
CREATE OR REPLACE TYPE AQ_ADM_PRTP_V204.ARR_VARCHAR_100 IS TABLE OF VARCHAR2(100)<br />
/
</div>
<p>Secondly write 3 split functions that uses simple_integer, pls_integer, number data types respectively.</p>
<p>Procedure that uses simple_integer data types :</p>
<div class="plsql" style="font-family:Courier New;color:#006;background-color:#f0f0f0;border:1px dotted;font-size:12px;white-space:normal;">
<p>CREATE OR REPLACE PROCEDURE AQ_ADM_PRTP_V204.PROC_SPLIT_SIMPLE_INTEGER(pv_param_string VARCHAR2, strings IN OUT NOCOPY ARR_VARCHAR_100)<br />
   IS<br />
  ln_comma <b>simple_integer</b> := 1;<br />
  ln_next  <b>simple_integer</b> := 1;<br />
  ln_index <b>simple_integer</b> := 0;<br />
BEGIN</p>
<p>  ln_comma := instr(pv_param_string, &#8216;,&#8217;, 1, 1);<br />
  WHILE (ln_comma &#62; 0) LOOP<br />
    ln_index := ln_index + 1;<br />
    strings(ln_index) := substr(pv_param_string,<br />
                                ln_next,<br />
                                ln_comma &#8211; ln_next);<br />
    ln_next := ln_comma + 1;<br />
    ln_comma := instr(pv_param_string, &#8216;,&#8217;, ln_next, 1);<br />
  END LOOP;</p>
<p>  ln_index := ln_index + 1;<br />
  ln_comma := length(pv_param_string) + 1;<br />
  strings(ln_index) := substr(pv_param_string, ln_next, ln_comma &#8211; ln_next);</p>
<p>END;<br />
/</p>
</div>
<p>Procedure that uses pls_integer data types :</p>
<div class="plsql" style="font-family:Courier New;color:#006;background-color:#f0f0f0;border:1px dotted;font-size:12px;white-space:normal;">
<p>CREATE OR REPLACE PROCEDURE AQ_ADM_PRTP_V204.PROC_SPLIT_PLS_INTEGER(pv_param_string VARCHAR2, strings IN OUT NOCOPY ARR_VARCHAR_100)<br />
   IS<br />
  ln_comma <b>pls_integer</b> := 1;<br />
  ln_next  <b>pls_integer</b> := 1;<br />
  ln_index <b>pls_integer</b> := 0;<br />
BEGIN</p>
<p>  ln_comma := instr(pv_param_string, &#8216;,&#8217;, 1, 1);<br />
  WHILE (ln_comma &#62; 0) LOOP<br />
    ln_index := ln_index + 1;<br />
    strings(ln_index) := substr(pv_param_string,<br />
                                ln_next,<br />
                                ln_comma &#8211; ln_next);<br />
    ln_next := ln_comma + 1;<br />
    ln_comma := instr(pv_param_string, &#8216;,&#8217;, ln_next, 1);<br />
  END LOOP;</p>
<p>  ln_index := ln_index + 1;<br />
  ln_comma := length(pv_param_string) + 1;<br />
  strings(ln_index) := substr(pv_param_string, ln_next, ln_comma &#8211; ln_next);</p>
<p>END;<br />
/</p>
</div>
<p>Procedure that uses number data types :</p>
<div class="plsql" style="font-family:Courier New;color:#006;background-color:#f0f0f0;border:1px dotted;font-size:12px;white-space:normal;">
<p>CREATE OR REPLACE PROCEDURE AQ_ADM_PRTP_V204.PROC_SPLIT_NUMBER(pv_param_string VARCHAR2, strings IN OUT NOCOPY ARR_VARCHAR_100)<br />
   IS<br />
  ln_comma <b>NUMBER</b> := 1;<br />
  ln_next  <b>NUMBER</b> := 1;<br />
  ln_index <b>NUMBER</b> := 0;<br />
BEGIN</p>
<p>  ln_comma := instr(pv_param_string, &#8216;,&#8217;, 1, 1);<br />
  WHILE (ln_comma &#62; 0) LOOP<br />
    ln_index := ln_index + 1;<br />
    strings(ln_index) := substr(pv_param_string,<br />
                                ln_next,<br />
                                ln_comma &#8211; ln_next);<br />
    ln_next := ln_comma + 1;<br />
    ln_comma := instr(pv_param_string, &#8216;,&#8217;, ln_next, 1);<br />
  END LOOP;</p>
<p>  ln_index := ln_index + 1;<br />
  ln_comma := length(pv_param_string) + 1;<br />
  strings(ln_index) := substr(pv_param_string, ln_next, ln_comma &#8211; ln_next);</p>
<p>END;<br />
/</p>
</div>
<p>After those we write test cases :</p>
<div class="plsql" style="font-family:Courier New;color:#006;background-color:#f0f0f0;border:1px dotted;font-size:12px;white-space:normal;">
<p>DECLARE </p>
<p>    ln_iteration_no SIMPLE_INTEGER := 1000000;<br />
    strings ARR_VARCHAR_100 := ARR_VARCHAR_100();<br />
    ln_temp VARCHAR2(1000);<br />
    ln_time1 NUMBER;<br />
    ln_time2 NUMBER;<br />
    ln_time3 NUMBER;<br />
    ln_time4 NUMBER;<br />
BEGIN</p>
<p>    strings.extend(47);<br />
    ln_temp := </p>
<p>&#8216;2000,2,123553168,1,10,64895,65535,27662,64860,64895,65535,27662,64860,0,,,,,,0,0,2491039806,,,,,,,,,0,0,1,,24910391</p>
<p>06,,,,,,,&#8217; &#124;&#124;<br />
                &#8216;1&#8242; &#124;&#124; &#8216;,,,,,&#8217;;</p>
<p>    ln_time1 := DBMS_UTILITY.GET_TIME;<br />
    FOR i IN 1..ln_iteration_no<br />
    LOOP</p>
<p>        proc_split_simple_integer(ln_temp,strings);</p>
<p>    END LOOP;<br />
    ln_time2 := DBMS_UTILITY.GET_TIME;<br />
    FOR i IN 1..ln_iteration_no<br />
    LOOP</p>
<p>        proc_split_pls_integer(ln_temp,strings);</p>
<p>    END LOOP;<br />
    ln_time3 := DBMS_UTILITY.GET_TIME;<br />
    FOR i IN 1..ln_iteration_no<br />
    LOOP</p>
<p>        proc_split_number(ln_temp,strings);</p>
<p>    END LOOP;<br />
    ln_time4 := DBMS_UTILITY.GET_TIME;</p>
<p>    DBMS_OUTPUT.PUT_LINE(&#8216;Total Duration of proc_split_simple_integer procedure is : &#8216;&#124;&#124;((ln_time2-ln_time1)/100)&#124;&#124; </p>
<p>&#8216; seconds.&#8217;);<br />
    DBMS_OUTPUT.PUT_LINE(&#8216;Total Duration of proc_split_pls_integer procedure is : &#8216;&#124;&#124;((ln_time3-ln_time2)/100)&#124;&#124; &#8216; </p>
<p>seconds.&#8217;);<br />
    DBMS_OUTPUT.PUT_LINE(&#8216;Total Duration of proc_split_number procedure is : &#8216;&#124;&#124;((ln_time4-ln_time3)/100)&#124;&#124; &#8216; </p>
<p>seconds.&#8217;);</p>
<p>END;</p>
</div>
<p>results :</p>
<div class="plsql" style="font-family:Courier New;color:#006;background-color:#f0f0f0;border:1px dotted;font-size:12px;white-space:normal;">
<p>Total Duration of proc_split_simple_integer procedure is : 16,7 seconds.<br />
Total Duration of proc_split_pls_integer procedure is : 18,6 seconds.<br />
Total Duration of proc_split_number procedure is : 33,19 seconds.</p>
</div>
<p>In this example, SIMPLE_INTEGER data type is faster twice time than NUMBER data type.</p>
<p>If you do not use the native compilation method, you could see much time of previous results. Notice that as specified in document, if you do not use native compilation, procedure that uses simple_integer variable takes much time of pls_integer. </p>
<p>Interpreted compilation results :</p>
<div class="plsql" style="font-family:Courier New;color:#006;background-color:#f0f0f0;border:1px dotted;font-size:12px;white-space:normal;">
<p>Total Duration of proc_split_simple_integer procedure is : 29,1 seconds.<br />
Total Duration of proc_split_pls_integer procedure is : 27,24 seconds.<br />
Total Duration of proc_split_number procedure is : 46,42 seconds.</p>
</div>
<p>SIMPLE_INTEGER slower than PLS_INTEGER when you are not using NATIVE compilation method.</p>
<p>To get more information about NATIVE and INTERPRETED compilation, <a href="http://download.oracle.com/docs/cd/E11882_01/appdev.112/e10472/tuning.htm#LNPLS911">here</a>.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[T-SQL Tuesday #1: Date/Time Tricks]]></title>
<link>http://scarydba.wordpress.com/2009/12/08/t-sql-tuesday-1-datetime-tricks/</link>
<pubDate>Tue, 08 Dec 2009 15:44:12 +0000</pubDate>
<dc:creator>scarydba</dc:creator>
<guid>http://scarydba.wordpress.com/2009/12/08/t-sql-tuesday-1-datetime-tricks/</guid>
<description><![CDATA[I&#8217;m going to try out Adam Machanic&#8217;s idea for a blog party. The topic this month are Dat]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I&#8217;m going to try out Adam Machanic&#8217;s <a href="http://sqlblog.com/blogs/adam_machanic/archive/2009/11/30/invitation-to-participate-in-t-sql-tuesday-001-date-time-tricks.aspx">idea for a blog party</a>. The topic this month are Date/Time tricks.</p>
<p>Instead of supplying a trick for Date/Time, I&#8217;m going to caution you about the tricks that you use. Let&#8217;s take a simple issue. You want to pull back data from a table, let&#8217;s use the Production.TransactionHistoryArchive in AdventureWorks2008, for a given month of data. Before we run the query, let&#8217;s create an index on the table:</p>
<pre>CREATE INDEX ixTest ON Production.TransactionHistoryArchive
(TransactionDate)</pre>
<p>The query itself is pretty simple. This is one mechanism that will retrieve the data for the month of July in 2003:</p>
<pre>SELECT tha.TransactionID
FROM Production.TransactionHistoryArchive AS tha
WHERE DATEPART(yy,tha.TransactionDate) = 2003
AND DATEPART(mm,tha.TransactionDate) = 7</pre>
<p>In theory you should be able to use the index that was created earlier, but instead, you&#8217;ll see this execution plan:</p>
<p><a href="http://scarydba.wordpress.com/files/2009/12/scan.png"><img class="alignnone size-full wp-image-1039" title="scan" src="http://scarydba.wordpress.com/files/2009/12/scan.png" alt="" width="371" height="79" /></a></p>
<p>The problem is occuring because there is a function running against the columns. This is going to force a scan, even though you have a good index. Rewriting the query so that it looks like this:</p>
<pre>SELECT tha.ProductionID
FROM Production.TransactionHistoryArchive AS tha
WHERE tha.TransactionDate
BETWEEN '2003/7/1'
AND '2003/7/31'</pre>
<p>Eliminates the function on the column so that the execution plan is now a nice clean index seek:</p>
<p><a href="http://scarydba.wordpress.com/files/2009/12/seek.png"><img class="alignnone size-full wp-image-1040" title="seek" src="http://scarydba.wordpress.com/files/2009/12/seek.png" alt="" width="375" height="81" /></a></p>
<p>Whatever tricks you begin to apply to date/time, be careful of how you apply them. And, if you try a fix like I supplied above, be sure it returns the data you think it returns, testing is the key to applying anything you read on the internet.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Database Administration Manager / SQL - DIRECT HIRE - Fort Lauderdale, FL]]></title>
<link>http://recruiterfl.wordpress.com/2009/12/07/database-administration-manager-sql-direct-hire-fort-lauderdale-fl/</link>
<pubDate>Mon, 07 Dec 2009 15:46:49 +0000</pubDate>
<dc:creator>Ruben Rabines</dc:creator>
<guid>http://recruiterfl.wordpress.com/2009/12/07/database-administration-manager-sql-direct-hire-fort-lauderdale-fl/</guid>
<description><![CDATA[Please send resumes to rrabines@topsource.com Location: Fort Lauderdale, FL Title: Database Administ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Please send resumes to rrabines@topsource.com</p>
<p><strong>Location: Fort Lauderdale, FL</strong></p>
<p><strong>Title: Database Administration Manager / SQL</strong></p>
<p><strong>Salary: $100,00 &#8211; $130,000/year + Bonus + Benefits<br />
</strong></p>
<p>This position will be responsible for hands-on management of the installation, configuration, troubleshooting, and maintenance of the database system. Implement, configure, and troubleshoot database instances, replication, backup, partitions, storage, and access. Monitor and optimize system performance using index tuning, disk optimization, and other methods. Set user privileges within the database environment</p>
<p>Requirements:·</p>
<p>-     Expertise in installation, upgrade and configuration of MS SQL Server and databases in clustered and non-clustered environments.<br />
·     Creation of complex reports, scorecards, and dashboards utilizing SSRS.<br />
·     Excellent knowledge in Performance tuning using various SQL Server Commands and DTA (Database Tuning Advisor)<br />
·     Experience in Performance Tuning, Query Optimization, Client/Server Connectivity, Database Consistency Checks using DBCC Utilities.<br />
·     Experience in migration of Data from Excel, Flat file, and others using BCP and SSIS. ETL of data using SQL Server SSIS.<br />
·     Experience with SQL Server 2005/2008, DDL/DML Triggers, Clustering, Service Broker, Migration, Upgrading.<br />
·     Excellent knowledge in system tables and system stored procedures using T-SQL.<br />
·     Expert in Database Normalization, Optimization and Tuning, Backup/Restore, Data Import/Export, Troubleshooting, Database Objects authorization, DTS,ETL using DTS(SSIS), Objects Creation such as Tables, Views, User created Data Types, Indexes, Stored Procedures, Cursors, Triggers and more.<br />
·     Experience in implementing and supporting transactional replication.<br />
·     Hands-on working experience with analyzing query plans, using extended Stored Procedures, managing indexes and locks, troubleshooting query performance and MS SQL server bottle necks including Network Traffic, Hardware usage and Blocking.<br />
·     Experience in installation and configuration of Cluster SQL Server in Active/Passive in SQL Server 2008.<br />
·     Experience in SQL Server Reporting Services (SSRS).<br />
·     Expert in transforming complex business logic into Database design and maintaining it by using SQL tools such as Stored Procedures, User Defined Functions, Views, and DTS.<br />
·     Experience working on systems in high-availability environments.<br />
·     Self starter who can multi-task and work in a fast paced critical production support environment.<br />
·     BS computer related discipline.<br />
·     Strong analytical skills for problem resolution, database and SQL performance tuning and backups.<br />
·     Excellent verbal and written communication skills to partner with other teams and supervise a team of DBAs<br />
·     Exceptionally motivated and capable of work independently with little supervision as well as part of a team</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Don't miss our Webcast: “Heroku Add-ons: New Relic RPM" on 12/15 at 9 am PT. Hosted by Heroku and New Relic.]]></title>
<link>http://blog.newrelic.com/2009/12/04/dont-miss-our-webcast-%e2%80%9cheroku-add-ons-new-relic-rpm-on-1215-at-9-am-pt-hosted-by-heroku-and-new-relic/</link>
<pubDate>Fri, 04 Dec 2009 19:18:55 +0000</pubDate>
<dc:creator>newrelicblogs</dc:creator>
<guid>http://blog.newrelic.com/2009/12/04/dont-miss-our-webcast-%e2%80%9cheroku-add-ons-new-relic-rpm-on-1215-at-9-am-pt-hosted-by-heroku-and-new-relic/</guid>
<description><![CDATA[As we mentioned in our last blog posting, the response to the news that New Relic RPM is available t]]></description>
<content:encoded><![CDATA[As we mentioned in our last blog posting, the response to the news that New Relic RPM is available t]]></content:encoded>
</item>
<item>
<title><![CDATA[Performance Tuning Tips for SQL Server DTS]]></title>
<link>http://blog.sqldbasupport.com/2009/12/04/performance-tuning-tips-for-sql-server-dts/</link>
<pubDate>Fri, 04 Dec 2009 15:55:14 +0000</pubDate>
<dc:creator>Amit Vaid</dc:creator>
<guid>http://blog.sqldbasupport.com/2009/12/04/performance-tuning-tips-for-sql-server-dts/</guid>
<description><![CDATA[When using DTS, if you have a choice, use the native OLE DB provider instead of the ODBC provider wh]]></description>
<content:encoded><![CDATA[When using DTS, if you have a choice, use the native OLE DB provider instead of the ODBC provider wh]]></content:encoded>
</item>
<item>
<title><![CDATA[How to speed up Index creation in Oracle database]]></title>
<link>http://oraclefunda.wordpress.com/2009/12/02/how-to-speed-up-index-creation-in-oracle-database/</link>
<pubDate>Wed, 02 Dec 2009 18:48:55 +0000</pubDate>
<dc:creator>aalapsharma</dc:creator>
<guid>http://oraclefunda.wordpress.com/2009/12/02/how-to-speed-up-index-creation-in-oracle-database/</guid>
<description><![CDATA[Imagine a situation where you have to create an index on a table having 1 billion records. It might ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Imagine a situation where you have to create an index on a table having 1 billion records. It might take approximately 4-5 hours to create the index. But there are ways to fasten this process. Following are some of the tips that will help you to create indexes faster than the normal time. </p>
<p><strong>Tip#1 &#8211; PARALLEL:<br />
</strong>While creating index oracle must first collect the symbolic key/ROWID pairs with a full-table scan. When you specify Parallel option to the create index script oracle will perform a full table scan in parallel threads based on the number of CPUs, table partitioning and disk configuration and hence will reduce index creation time.</p>
<p>Following will work fine on a server that has 4 CPUs:</p>
<p>create index indx_t_doc on t_document(doc_id,doc_type) parallel 3;<br />
<strong> </strong></p>
<p><strong>Tip#2 &#8211; NOLOGGING: </strong><br />
The NOLOGGING keyword in create index command will restrict the database from generating large redo logs and will create minimal redo log. This will improve the performance of Create index command.</p>
<p>create index indx_t_doc on t_document(doc_id,doc_type) PARALLEL 3 NOLOGGING;<br />
<strong> </strong></p>
<p><strong>Tip#3 &#8211; COMPRESS:<br />
</strong>The COMPRESS option will enable key compression. It eliminates repeated occurrence of key column values and may substantially reduce storage. Use integer to specify the prefix length (number of prefix columns to compress).<br />
For unique indexes, the valid range of prefix length values is from 1 to the number of key columns minus 1. The default prefix length is the number of key columns minus 1.</p>
<p>For nonunique indexes, the valid range of prefix length values is from 1 to the number of key columns. The default prefix length is the number of key columns.</p>
<p>create index indx_t_doc on t_document(doc_id,doc_type) PARALLEL 3 NOLOGGING COMPRESS;</p>
<p>Follow these simple tips and save your time.</p>
<p>Happy Indexing <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[SQL Server XQuery For Idiots]]></title>
<link>http://scarydba.wordpress.com/2009/11/30/xquery-for-idiots/</link>
<pubDate>Mon, 30 Nov 2009 14:17:08 +0000</pubDate>
<dc:creator>scarydba</dc:creator>
<guid>http://scarydba.wordpress.com/2009/11/30/xquery-for-idiots/</guid>
<description><![CDATA[I&#8217;m still struggling with learning XQuery. My latest little revelation was small, but vital. T]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I&#8217;m still struggling with learning XQuery. My latest little revelation was small, but vital.</p>
<p>The difference between:</p>
<blockquote>
<pre>@inXML.nodes('/rss/channel/item')</pre>
</blockquote>
<p>and</p>
<blockquote>
<pre>@inXML.nodes('/rss[1]/channel[1]/item')</pre>
</blockquote>
<p>Is the difference between a 10 minute query and a 4 second query. Kind of shocking really. My understanding is that XQuery assumes there are multiple possible paths that look like &#8220;/rss/channel&#8221; so it searches over and over again through the XML to see if it can find them. But by identifying it as a root, showing that only one possible path is available, it stops stumbling around in the dark and simply reads the data.</p>
<p>It&#8217;s a little thing, but it made an enormous difference. I&#8217;ve still got a long way to go in learning how to use XPath within XQuery.</p>
<p>UPDATED: I modified the title so that it&#8217;s clear I&#8217;m talking about SQL Server here.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Viewing The SQL Statements of the CPU-Intensive Oracle Processes ]]></title>
<link>http://pavandba.wordpress.com/2009/11/30/viewing-the-sql-statements-of-the-cpu-intensive-oracle-processes/</link>
<pubDate>Mon, 30 Nov 2009 08:48:44 +0000</pubDate>
<dc:creator>Pavan Kumar</dc:creator>
<guid>http://pavandba.wordpress.com/2009/11/30/viewing-the-sql-statements-of-the-cpu-intensive-oracle-processes/</guid>
<description><![CDATA[First get the top 10 CPU-intensive Oracle processes on the operating system with the first column gi]]></description>
<content:encoded><![CDATA[First get the top 10 CPU-intensive Oracle processes on the operating system with the first column gi]]></content:encoded>
</item>
<item>
<title><![CDATA[Here we go]]></title>
<link>http://christopheregan.wordpress.com/2009/11/29/here-we-go/</link>
<pubDate>Sun, 29 Nov 2009 04:32:07 +0000</pubDate>
<dc:creator>christopheregan</dc:creator>
<guid>http://christopheregan.wordpress.com/2009/11/29/here-we-go/</guid>
<description><![CDATA[Well, I got with corporate, and they didn&#8217;t say that I couldn&#8217;t have a blog. We&#8217;re]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Well, I got with corporate, and they didn&#8217;t say  that I couldn&#8217;t have a blog.<br />
We&#8217;re budgeting for 2010.  Have a staff of three.  I&#8217;m requested to identify 1-2 million worth of savings off of mainframe processing.   This is my fourth year of working on cost savings projects, i&#8217;m not sure how to squeeze anything more out of this rock.  This year, I intend to find the experts on the internet, and I&#8217;ll log the articles in my blog.  My favorite resource so far is Willie&#8217;s DB2 z/OS blog on ittoolbox..com.<br />
I felt that the 2008 IDUG presentations on performance came up short as far as examples of successful cost cutting.<br />
Here&#8217;s an interesting article (why people view mainframe technology as expensive)</p>
<p>http://www.ibmsystemsmag.com/mainframe/administrator/17456p1.aspx</p>
<p>Thanks,<br />
Chris</p>
<p>http://www.linkedin.com/in/christopheregan</p>
<p>Cut IT costs, not jobs, through mainframe performance tuning</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Result Cache: Another brilliant 11g New Feature]]></title>
<link>http://uhesse.wordpress.com/2009/11/27/result-cache-another-brilliant-11g-new-feature/</link>
<pubDate>Fri, 27 Nov 2009 14:19:19 +0000</pubDate>
<dc:creator>Uwe Hesse</dc:creator>
<guid>http://uhesse.wordpress.com/2009/11/27/result-cache-another-brilliant-11g-new-feature/</guid>
<description><![CDATA[I have just finished an Oracle Database 11g New Features course in Vienna. There are many amazing Ne]]></description>
<content:encoded><![CDATA[I have just finished an Oracle Database 11g New Features course in Vienna. There are many amazing Ne]]></content:encoded>
</item>
<item>
<title><![CDATA[Automatic DOP in 11gR2]]></title>
<link>http://uhesse.wordpress.com/2009/11/24/automatic-dop-in-11gr2/</link>
<pubDate>Tue, 24 Nov 2009 18:22:38 +0000</pubDate>
<dc:creator>Uwe Hesse</dc:creator>
<guid>http://uhesse.wordpress.com/2009/11/24/automatic-dop-in-11gr2/</guid>
<description><![CDATA[We have a probably very needful new feature introduced in 11g Release 2, related to parallel query: ]]></description>
<content:encoded><![CDATA[We have a probably very needful new feature introduced in 11g Release 2, related to parallel query: ]]></content:encoded>
</item>
<item>
<title><![CDATA[another post]]></title>
<link>http://anuragvidyarthi.wordpress.com/2009/11/21/another-post/</link>
<pubDate>Sat, 21 Nov 2009 06:02:44 +0000</pubDate>
<dc:creator>anuragvidyarthi</dc:creator>
<guid>http://anuragvidyarthi.wordpress.com/2009/11/21/another-post/</guid>
<description><![CDATA[another post under PT]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>another post under PT</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[NetWorker 7.6 Performance Tuning Guide - No longer an embarrassment]]></title>
<link>http://nsrd.wordpress.com/2009/11/21/networker-7-6-performance-tuning-guide-no-longer-an-embarrassment/</link>
<pubDate>Fri, 20 Nov 2009 19:40:07 +0000</pubDate>
<dc:creator>Preston</dc:creator>
<guid>http://nsrd.wordpress.com/2009/11/21/networker-7-6-performance-tuning-guide-no-longer-an-embarrassment/</guid>
<description><![CDATA[While NetWorker 7.6 is not available for download as of the time I write this, the documentation is ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>While NetWorker 7.6 is not available for download as of the time I write this, the documentation <em>is</em> available on PowerLink. For those of you chomping at the bit to at least read up on NetWorker 7.6, now is the time to wander over to PowerLink delve into the documentation.</p>
<p>The last couple of releases of NetWorker have been interesting for me when it comes to beta testing. In particular, I&#8217;ve let colleagues delve into VCB functionality, etc., and I&#8217;ve stuck to &#8220;niggly&#8221; things &#8211; e.g., checking for bugs that have caused us and our customers problems in earlier versions, focusing on the command line, etc.</p>
<p>For 7.6 I also decided to revisit the documentation, particularly in light of some of the comments that regularly appear on the NetWorker mailing list about the sorry state of the Performance Tuning and Optimisation Guide.</p>
<p>It&#8217;s pleasing, now that the documentation is out, to read the revised and up to date version of the Performance Tuning Guide. Regularly critics of the guide for instance will be pleased to note that <strong>FDDI</strong> does not appear once. Not once.</p>
<p>Does it contain every possible useful piece of information that you might use when trying to optimise your environment? No, of course not – nor should it. Everyone&#8217;s environment will differ in a multitude of ways. Any random system patch can affect performance. A single dodgy NIC can affect performance. A single misconfigured LUN or SAN port can affect performance.</p>
<p>Instead, the document now focuses on providing a high level overview of performance optimisation techniques.</p>
<p>Additionally, recommendations and figures have been updated to support current technology. For instance:</p>
<ul>
<li>There&#8217;s a plethora of information on PCI-X vs PCIeXpress.</li>
<li>RAM guidelines for the server based on the number of clients has been updated.</li>
<li>NMC finally gets a mention as a resource hog! (Obviously, that&#8217;s not the words used, but it&#8217;s the implication for larger environments. I&#8217;ve been increasingly encouraging larger customers to put NMC on a separate host for this reason.)</li>
<li>There&#8217;s a whole chunk on client parallelism optimisation, both for the clients and the backup server itself.</li>
</ul>
<p>I don&#8217;t think this document is perfect, but if we&#8217;re looking at the old document vs the new, and the old document scored a 1 out of 10 on the relevancy front, this at least scores a 7 or so, which is a vast improvement.</p>
<p>Oh, one final point – with the documentation now explicitly stating:</p>
<blockquote><p>The best approach for client parallelism values is:</p>
<p>– For regular clients, use the lowest possible parallelism settings to best balance between the number of save sets and throughput.</p>
<p>– For the backup server, set highest possible client parallelism to ensure that index backups are not delayed. This ensures that groups complete as they should.</p>
<p>Often backup delays occur when client parallelism is set too low for the NetWorker server. The best approach <strong>to optimize NetWorker client performance is to eliminate client parallelism, reduce it to 1, and increase the parallelism based on client hardware and data configuration</strong>.</p></blockquote>
<p>(My emphasis)</p>
<p>Isn&#8217;t it time that the default client parallelism value were decreased from the ridiculously high 12 to 1, and we got everyone to actually <em>think</em> about performance tuning? I was overjoyed when I&#8217;d originally heard that the (previous) default parallelism value of 4 was going to be changed, then horrified when I found out it was being revised <em>up</em>, to 12, rather than down to 1.</p>
<p>Anyway, if you&#8217;ve previously dismissed the Performance Tuning Guide as being hopelessly out of date, it&#8217;s time to go back and re-read it. You might like the changes.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[On the Edge, Part 3 – New RailsLab Episode in our Scaling Rails series reviews plugins for reducing app workload]]></title>
<link>http://blog.newrelic.com/2009/11/20/on-the-edge-part-3-%e2%80%93-new-railslab-episode-in-our-scaling-rails-series-reviews-plugins-for-reducing-app-workload/</link>
<pubDate>Fri, 20 Nov 2009 18:25:50 +0000</pubDate>
<dc:creator>newrelicblogs</dc:creator>
<guid>http://blog.newrelic.com/2009/11/20/on-the-edge-part-3-%e2%80%93-new-railslab-episode-in-our-scaling-rails-series-reviews-plugins-for-reducing-app-workload/</guid>
<description><![CDATA[Gregg Pollack&#8217;s third installment of &#8220;On the Edge&#8221; is now available on RailsLab as]]></description>
<content:encoded><![CDATA[Gregg Pollack&#8217;s third installment of &#8220;On the Edge&#8221; is now available on RailsLab as]]></content:encoded>
</item>
<item>
<title><![CDATA[Load Balancing vs. Failover Clustering]]></title>
<link>http://nirajrules.wordpress.com/2009/11/20/load-balancing-vs-failover-clustering/</link>
<pubDate>Fri, 20 Nov 2009 16:22:11 +0000</pubDate>
<dc:creator>nirajrules</dc:creator>
<guid>http://nirajrules.wordpress.com/2009/11/20/load-balancing-vs-failover-clustering/</guid>
<description><![CDATA[A pending post from long time!!! At distance both look quite similar and are point of confusion for ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>A pending post from long time!!! At distance both look quite similar and are point of confusion for many. Rationale though is making Load Balancing address scalability while Failover Clustering address high availability. Load Balancing is all about improvising performance while Failover Clustering is improvising uptimes mitigating system failures. Another difference is, you would find Load Balancing happening at web/application servers (stateless hopefully) and failover clustering at database servers (state full). Industry seems to be using word “Cluster” (set of connected nodes) for both – but with different intents of Load &#38; Failover.</p>
<p>Both are also separate things in terms of configuration &#38; setup. For instance, Windows 2003 (currently that’s what we have in our production) has separate options for Load Balancing &#38; Clustering. Windows recommendation is not to mix both, i.e. you shouldn’t cluster machines for failover which are already configured for load balancing.</p>
<p>Setting up load balancing is simple &#8211; you need couple of machines connected to a common network and an additional IP where clients would connect to. This Virtual IP where the requests are made by clients, is in turn is used for Load Balancing nodes that part of this cluster (load balancing cluster). </p>
<p>Setting up failover clustering on the other hand is little complex. You need 2 networks a public and private (hear beat), a shared drive (called Quorum), and an additional Public IP (in addition to minimum &#8211; 2 public and 2 private IPs that 2 systems will have). Remember, creating a failover cluster at Windows level is a primary requirement to build a failover SQL Server cluster. Reason to create a Windows level cluster is install required cluster services and create cluster groups (logical collection of nodes). You can select a cluster group (obviously at least 2 nodes should be part of this group) and configure SQL Server Cluster or anything else on top it. SQL Server Cluster would require an additional IP, another shared disk for installation &#38; database files (this disk is a shared resource for chosen cluster group), domain account (that has administrative privileges on all nodes) &#38; group on that domain which that account has complete access. Shared Quorum and Shared Disk are normally part of SAN storage. I have also come across quite a few implementations using <a href="http://www.starwindsoftware.com/">Starwind</a> or similar tools to create these shared iSCSI targets in form of virtual disks (.img). It might be helpful to know that Windows 2003 doesn’t have the iSCSI initiator built-in and you can download the same from <a href="http://www.microsoft.com/downloads/details.aspx?familyid=12cb3c1a-15d6-4585-b385-befd1319f825">here</a>.</p>
<p>Hope above helps to some extent <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  .</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Performance counters for performance ]]></title>
<link>http://msrviking.wordpress.com/2009/11/18/performance-counters-for-performance/</link>
<pubDate>Thu, 19 Nov 2009 04:02:22 +0000</pubDate>
<dc:creator>msrviking</dc:creator>
<guid>http://msrviking.wordpress.com/2009/11/18/performance-counters-for-performance/</guid>
<description><![CDATA[I was reading through my blog roll today and saw an interesting blog by Buck Woody on how to use per]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I was reading through my blog roll today and saw an interesting blog by Buck Woody on how to use performance counters to monitor and assess performance of SQL Server system.</p>
<p>Here is the <a href="http://blogs.msdn.com/buckwoody/archive/2009/11/18/using-perfmon-with-sql-server-part-one.aspx" target="_blank">link </a>and happy learning.</p>
<p>Cheers.</p>
<p>A quick update &#8211; Buck is writing a series of posts on his blog on the topic. I would suggest please visit the other parts of the series.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[On the Edge, Part 2 – New RailsLab episode in our Scaling Rails series shows plugins for detecting memory bloat]]></title>
<link>http://blog.newrelic.com/2009/11/13/on-the-edge-part-2-%e2%80%93-new-railslab-episode-in-our-scaling-rails-series-shows-plugins-for-detecting-memory-bloat/</link>
<pubDate>Fri, 13 Nov 2009 16:21:57 +0000</pubDate>
<dc:creator>newrelicblogs</dc:creator>
<guid>http://blog.newrelic.com/2009/11/13/on-the-edge-part-2-%e2%80%93-new-railslab-episode-in-our-scaling-rails-series-shows-plugins-for-detecting-memory-bloat/</guid>
<description><![CDATA[A new Scaling Rails episode is up on RailsLab. Gregg Pollack is back with part 2 in a three part ser]]></description>
<content:encoded><![CDATA[A new Scaling Rails episode is up on RailsLab. Gregg Pollack is back with part 2 in a three part ser]]></content:encoded>
</item>
<item>
<title><![CDATA[NOS for Firefox (make firefox speed 5x)]]></title>
<link>http://networknuts.wordpress.com/2009/11/11/nos-for-firefox-networknuts-way/</link>
<pubDate>Wed, 11 Nov 2009 11:39:59 +0000</pubDate>
<dc:creator>networknuts</dc:creator>
<guid>http://networknuts.wordpress.com/2009/11/11/nos-for-firefox-networknuts-way/</guid>
<description><![CDATA[Just fit the NOS in your firefox (The Fast and the Furious) 1. Open Firefox and in the address bar t]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Just fit the NOS in your firefox (The Fast and the Furious)</p>
<p>1. Open Firefox and in the address bar type <strong>about:config</strong>.<br />
2. Click on “I’ll be careful, I promise“<br />
3. Use the search bar above to look for <strong>network.http.pipelining</strong> and double click on it to set it’s value to <strong>True</strong>.<br />
4. Create a <strong>new boolean</strong> value named <strong>network.http.pipelining.firstrequest</strong> and set that to <strong>True</strong>, as well.<br />
5. Find <strong>network.http.pipelining.maxrequests</strong>, double click on it, and change its value to <strong>8</strong>.<br />
6. Look for <strong>network.http.proxy.pipelining</strong> and set it to <strong>True</strong>.<br />
7. Create <strong>two new integers</strong> named <strong>nglayout.initialpaint.delay</strong> and <strong>content.notify.interval</strong>, set them to <strong>0</strong>.<br />
8. Restart your browser.</p>
<p>All done. You should feel the browser is 5x more responsive than before while navigating websites.</p>
<p>God Bless.</p>
<p>See you on TOP.</p>
<p>We are also in &#8220;facebook&#8221; search for &#8220;networknuts&#8221;</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Sample partition table and partition index script]]></title>
<link>http://pavandba.wordpress.com/2009/11/11/sample-partition-table-and-partition-index-script/</link>
<pubDate>Wed, 11 Nov 2009 10:41:01 +0000</pubDate>
<dc:creator>Pavan Kumar</dc:creator>
<guid>http://pavandba.wordpress.com/2009/11/11/sample-partition-table-and-partition-index-script/</guid>
<description><![CDATA[create table births_REG1(CIRCLE_NO                 NUMBER(1) NOT NULL, WARD_NO                      ]]></description>
<content:encoded><![CDATA[create table births_REG1(CIRCLE_NO                 NUMBER(1) NOT NULL, WARD_NO                      ]]></content:encoded>
</item>

</channel>
</rss>
