Save 
Join IIUG
 for   
 

Informix News
29 July 09 - Wall Street Journal - IBM to Acquire SPSS, Adding to Acquisitions... Read
11 February 09 - InformationWeek - IBM Drifts Slowly Toward Mainstream Cloud Computing... Read
11 February 09 - CNNMoney.com - IBM to Deliver Software via Cloud Computing With Amazon Web Services... Read
07 January 09 - Huliq News - IBM Power Servers Helps Bank of Chengdu Build Up Core Banking System.. Read
04 December 08 - Steeleye - Multicarta achieves 99.997% uptime for its Informix-based Credit Card Authorization Centre... Read
16 October 08 - VendorRate - Informix Earns Top Customer Satisfaction Score on VendorRate in Q3... Read
14 August 08 - IIUG.org - Sellout Expected for the 2009 IIUG Informix Conference... Read
29 April 08 - IntelligentEnterprise.com - IBM Informix Upgrade Enhances Clustering, Database Management... Read
29 April 08 - itweek.com - IBM 'Cheetah 2' mauls data costs... Read
28 April 08 - eWeek.com - IBM Uncages Cheetah 2 Data Server... Read
28 April 08 - CNNMoney.com - IBM Helps Clients Reduce Data Management Costs With New Informix Dynamic Server... Read
09 April 08 - CNNMoney.com - MediaSpan Embeds IBM Informix Dynamic Server Software for Delivering News to Print, Web and Wireless Devices... Read
08 April 08 - IT-Director.com - Informix seeks developers... Read
18 February 08 - marketwire.com - Icarus Studios Partners With IBM to Upgrade Performance, Availability for Its Online Games... Read
17 January 08 - eWeek.com - IBM Adds Mac Support to IDS for Higher Education... Read
17 January 08 - informationweek.com - Lotus Notes For iPhone Signals Closer Ties Between IBM, Apple... Read
16 January 08 - marketwire.com - IBM Informix Dynamic Server to Deliver Support for Mac OS X... Read
16 January 08 - internetnews.com - IBM's IDS to Support Mac Platform... Read
28 June 07 - REG Developer - IBM and Informix tie down Cheetah... Read
27 June 07 - CBRonline.com - IBM corrects its own Informix customer figures... Read
14 June 07 - vnunet.com - IBM changes spots with Informix 'Cheetah' database... Read
14 June 07 - eChannelLine - IBM expands scope for IDS... Read
14 June 07 - Resellernews - IBM: Informix database alive and kicking... Read
13 June 07 - DB2 Magazine - Cheetah is now out of the gate... Read
12 June 07 - IBM - IDS 11 release announcement (pdf)... Read
12 June 07 - ChannelWeb Network - IBM Uncages IDS 11, Aka Cheetah, Database... Read
12 June 07 - eWeek.com - IBM's 'Cheetah' Ready to Pounce... Read
12 June 07 - InformationWeek - IBM Unleashes 'Cheetah' Database... Read
12 June 07 - WebWire - IBM Strengthens Database Portfolio With New Informix Dynamic Server... Read
12 June 07 - Intelligent Enterprise - IBM Unveils Informix Upgrade... Read
12 June 07 - ComputerWeekly.com - IBM's Cheetah IDS makes leap to better data centre clustering... Read
12 June 07 - ebiz - IBM Unveils Next Generation Informix Dynamic Server... Read
12 June 07 - computerworld.com - Will 'Cheetah' help IBM's Informix chase down market share?... Read
12 June 07 - Internetnews.com - No Data Can Outrun This 'Cheetah'... Read
12 June 07 - de.internet.com - IBM neuer Datenbank-Server mit Codenamen Cheetah ist fertig... Read
12 June 07 - verifox.de - IBM stärkt Datenbank-Portfolio mit neuem Informix Dynamic Server... Read
12 June 07 - golem.de - Informix 11 vorgestellt... Read
12 June 07 - Computerwoche.de - IBM stellt neue Informix-Version vor... Read
12 June 07 - IBM.de - IBM stärkt Datenbank-Portfolio mit neuem Informix Dynamic Server... Read
12 June 07 - Heise - IBM gibt Informix 11 frei... Read
25 May 07 - Taiwan.CNET.com - Local Taiwan Informix user group established... (Chinese language) ... Read
18 May 07 - ChannelWeb Network - IBM Musters Partners For Cheetah Release... Read
18 May 07 - eWeek.com - IBM Looks to 'Cheetah' to Speed Up Blade Servers... Read
7 May 07 - DB2 Magazine - SQL Shortcuts - Use these tricks to generate IDS SQL scripts... Read





End of Support Dates

[ View Thread ] [ Post Response ] [ Return to Index ] [ Read Prev Msg ] [ Read Next Msg ]

IDS Forum

Re: Question about sysindexes.clust

Posted By: Eric Rowell
Date: Wednesday, 19 November 2008, at 9:28 a.m.

In Response To: Re: Question about sysindexes.clust (Art Kagel)

Art,

Thank you for your analysis we came up with the same thing but backed
into this via watching the page reads on the table during the applications
run. We happened to find this as a production issue when trying to
normalize this table in development so that the large highly repeated
varchar coud be moved to another table.

What was odd to me was that the Buffer Turn Over, Buffer Wait, and Read
Ahead Utilization all doesn't appear to change for the worse, just the
runtime and page reads (note we don't report on total page reads until now
since day to day useage is different).

I was embarrased at first about not monitoring this value but the more
people tell me that they don't watch this value the more I understand it is
not do to my own lack of trying. It appears that most people don't look at
the sysindexes.clust value since like any go DB/SA data is moved around and
reloaded for other reasons as a course of normal business. We too haven't
run into this because we normally migration to new hardware every 3 years
and about every 1 1/2 year find a reason to reload this table. At the end
of last year we should have looked at reloading some tables since the
migration to new hardware wasn't required. This would be way we haven't
seen this before.

It's now time for us to come up with some matrix to monitor this over
time to see when this value indicates the need to reload or cluster a table
just incase for the future. But it looks like a table by table a different
value wouldn't indicate this need.

Thanks again for all that replied,

Eric B. Rowell

On Tue, Nov 18, 2008 at 4:28 PM, Art Kagel <art.kagel@gmail.com> wrote:

> OK Clown, you asked for my analysis, you got it. There are:
>
> 69million rows
> rowsize ranges from 155 to 244 bytes (e to a varchar column) (8-12 rows fit
> per page on 2K pages) assume an average of 10 rows per page
> Estimated number of data pages: 7 million
> Estimated number of index pages for table qty_det for the selected index:
> 410,000 with FILLFACTOR = 100
>
> FILLFACTOR = 50: 820,000 pages of index (168 keys per page: 2020/
> (4byte key + 4byte rowid + 50% internal overhead))
>
> Those facts in mind we can analyse what may be happening during this query
> before and after CLUSTERING or sorting the incoming data which accomplishes
> the same thing as long as the data load is single threaded.
>
> Searching the index for this table for the estimated 1,094,000 rows of
> table
> qty_head which match the selection criteria (I'm assuming that the
> optcombo_qty table adds little filter value since it is searched AFTER the
> join between qty_head and qty_det) would require reading from a minimum of
> 6,500 index pages for table qty_det if ALL 1.1million matching rows had
> sequential serial numbers to 820,000 pages if the serial values are evenly
> distributed across the 69 million value range. Then if the rows are not
> stored on the same data pages there may be as many as 1.1million data pages
> to be read (minimum ~100,000 pages). That would require a cache of at least
> 106,500 pages just to hold the data and index keys for this one table plus
> additional space for the other two tables in the query and for other
> queries
> - and a maximum of 2.2 million pages. Since originally the data was likely
> to have been fairly randomely distributed across the disks due to prior
> deletions and VARCHAR row relocations, the number of pages needed in cache
> will tend towards the upper limit of 2.2 million rather than the lower
> limit. I assume that the cache on this server is not in excess of 2.5
> million pages.
>
> Now, if the rows are sorted into serial number order when loaded (or after
> CLUSTERING), then the data rows that we are most likely to be interested in
> (assuming we are interested mostly in the most recent rows added to the
> table) are all contiguous on disk as are their keys in the index. That
> means the number of disk pages needed to be read into cache (and the
> chances
> that a page needed for more than one row has to be read more than once due
> to timing out of the cache during the search) are minimized to only 106,500
> pages as compared to the worst case - that the rows we are interested in
> are
> scattered all over the disk due to the data not being sorted.
>
> Add to this the possibility that since these rows contain a VARCHAR column
> that may have grown over time, there may be many of these rows that
> required
> two IOs to fetch into memory not one before any reorganization. Now the
> actual timings show that the actual distribution of data on disk was far
> from worst case, but also far worse that the best case.
>
> So, back to the original question: Do we watch the
> sysindices/sysindexes.cluster column to determine when a table should be
> reorganized? Honestly and embarrasedly, no. Most of us have fallen away
> from that particular optimization. I used to look at this in 4.0 and 5.0
> days, but have not concerned with it for many years. One reason is that it
> is a problem that tends to affect a small subset of queries (indeed in your
> case it was killing only one particular SELECT statement) so it is one of
> the last things I check for if I cannot improve a stubborn query any other
> way. Also, other reorg opportunities tend to minimize the impact of this
> problem as we try to minimize the number of extents in very large tables.
>
> Art
>
> On Tue, Nov 18, 2008 at 3:01 PM, Obnoxio The Clown
> <obnoxio@serendipita.com>wrote:
>
> > Eric Rowell wrote:
> > > The following is the explain plain for the only query in the program
> > which
> > > isn't running correctly. The first is the plan from the normal run
> > (filter
> > > data had to be changed to project my job). The info after that is from
> a
> > > diff of the explain outs for 2 more configurations. Also during all
> tests
> > > we used a production like system (smaller CPU and slower SAN) but we
> know
> > > the approx. modifier from prod to dev. When we sorted the data by the
> > > serial_link and reloaded (changing the fragmentation as shown earlier
> > things
> > > run much better.
> > >
> > > EXPLAIN from normal run...
> > >
> > > QUERY:
> > > ------
> > > SELECT qd.option_list, oq.optid
> > > FROM qty_head qh, qty_det qd, optcombo_qty oq
> > > WHERE ((qh.set_no = "FINDA" AND qh.version = "09") OR
> > >
> > > (qh.set_no = "ORFND" AND qh.version = "01"))
> > >
> > > AND qh.serial_key = qd.serial_link
> > >
> > > AND qd.serial_key = oq.option_group_id
> > >
> > > AND qh.dept_code IN ("AAA","BBB","CCC","DDD","EEE")
> > >
> > > AND qh.community = "00"
> > >
> > > Estimated Cost: 1049986
> > > Estimated # of Rows Returned: 1083718
> > > 1) informix.qh: INDEX PATH
> > >
> > > (1) Index Keys: dept_code community set_no version phase_no lot
> > > area_group_id
> > >
> > > (Key-First) (Serial, fragments: ALL)
> > >
> > > Lower Index Filter: (informix.qh.dept_code = 'AAA' AND
> > > informix.qh.community = '00' )
> > >
> > > Index Key Filters: (( (informix.qh.set_no = 'FINDA' AND
> > > informix.qh.version = '09')
> > >
> > > OR (informix.qh.set_no = 'ORFND' AND
> > > informix.qh.version = '01')))
> > >
> > > (2) Index Keys: dept_code community set_no version phase_no lot
> > > area_group_id
> > >
> > > (Key-First) (Serial, fragments: ALL)
> > >
> > > Lower Index Filter: (informix.qh.dept_code = 'BBB' AND
> > > informix.qh.community = '00' )
> > >
> > > Index Key Filters: (( (informix.qh.set_no = 'FINDA' AND
> > > informix.qh.version = '09')
> > >
> > > OR (informix.qh.set_no = 'ORFND' AND
> > > informix.qh.version = '01')))
> > >
> > > (3) Index Keys: dept_code community set_no version phase_no lot
> > > area_group_id
> > >
> > > (Key-First) (Serial, fragments: ALL)
> > >
> > > Lower Index Filter: (informix.qh.dept_code = 'CCC' AND
> > > informix.qh.community = '00' )
> > >
> > > Index Key Filters: (( (informix.qh.set_no = 'FINDA' AND
> > > informix.qh.version = '09')
> > >
> > > OR (informix.qh.set_no = 'ORFND' AND
> > > informix.qh.version = '01')))
> > >
> > > (4) Index Keys: dept_code community set_no version phase_no lot
> > > area_group_id
> > >
> > > (Key-First) (Serial, fragments: ALL)
> > >
> > > Lower Index Filter: (informix.qh.dept_code = 'DDD' AND
> > > informix.qh.community = '00' )
> > >
> > > Index Key Filters: (( (informix.qh.set_no = 'FINDA' AND
> > > informix.qh.version = '09')
> > >
> > > OR (informix.qh.set_no = 'ORFND' AND
> > > informix.qh.version = '01')))
> > >
> > > (5) Index Keys: dept_code community set_no version phase_no lot
> > > area_group_id
> > >
> > > (Key-First) (Serial, fragments: ALL)
> > >
> > > Lower Index Filter: (informix.qh.dept_code = 'EEE' AND
> > > informix.qh.community = '00' )
> > >
> > > Index Key Filters: (( (informix.qh.set_no = 'FINDA' AND
> > > informix.qh.version = '09' )
> > >
> > > OR (informix.qh.set_no = 'ORFND' AND
> > > informix.qh.version = '01')))
> > > 2) informix.qd: INDEX PATH
> > >
> > > (1) Index Keys: serial_link (Serial, fragments: ALL)
> > >
> > > Lower Index Filter: informix.qh.serial_key = informix.qd.serial_link
> > > NESTED LOOP JOIN
> > > 3) informix.optcombo_head: INDEX PATH
> > >
> > > (1) Index Keys: serial_key option_list option_count (Serial,
> > > fragments: ALL)
> > >
> > > Lower Index Filter: informix.qd.optcombo_head_key =
> > > informix.optcombo_head.serial_key
> > > NESTED LOOP JOIN
> > > 4) product.qty_detail: INDEX PATH
> > >
> > > (1) Index Keys: serial_key (Serial, fragments: ALL)
> > >
> > > Lower Index Filter: informix.qd.serial_key =
> > > product.qty_detail.serial_key
> > > NESTED LOOP JOIN
> > > 5) informix.oq: INDEX PATH
> > >
> > > (1) Index Keys: optcombo_head_key opt_id (Key-Only) (Serial,
> > > fragments: ALL)
> > >
> > > Lower Index Filter: informix.oq.optcombo_head_key =
> > > product.qty_detail.optcombo_head_key
> > > NESTED LOOP JOIN
> > >
> > > Diff of Explain Plan after just reloading the table:
> > > < Estimated Cost: 1049986
> > > < Estimated # of Rows Returned: 1083718
> > > ---
> > >> Estimated Cost: 2348476
> > >> Estimated # of Rows Returned: 1486409
> > >
> > > Diff of Explain Plan after reloading the sorting data (using
> > serial_link):
> > > < Estimated Cost: 1049986
> > > < Estimated # of Rows Returned: 1083718
> > > ---
> > >> Estimated Cost: 851019
> > >> Estimated # of Rows Returned: 1094319
> > >
> > > The cost difference appears to be in line with the change to the
> > > sysindex.clust value for the indexes.
> >
> > And which table do you query from to see if there are missing rows and
> > insert them?
> >
> > Basically, I can't disagree with your analysis, I'm just curious as to
> > why ordering should have such a measurable impact on performance given
> > the explain plan. In general, it doesn't.
> >
> > I feel like there is something lurking in the nether hells of my brain,
> > but I can't quite drag it out. Last time I saw something like this, the
> > root cause was "XXXX in my opinion" but I can't remember what "XXXX" was.
> >
> > Give me time. Or Art will be along shortly. :o)
> >
> > --
> > Cheers,
> > Obnoxio The Clown
> >
> > http://obotheclown.blogspot.com
> >
> >
> >
> >
>
> *******************************************************************************
> > Forum Note: Use "Reply" to post a response in the discussion forum.
> >
> >
>
> --
> Art S. Kagel
> Oninit (www.oninit.com)
> IIUG Board of Directors (art@iiug.org)
>
> Disclaimer: Please keep in mind that my own opinions are my own opinions
> and
> do not reflect on my employer, Oninit, the IIUG, nor any other organization
> with which I am associated either explicitly or implicitly. Neither do
> those opinions reflect those of other individuals affiliated with any
> entity
> with which I am affiliated nor those of the entities themselves.
>
>
>
> *******************************************************************************
> Forum Note: Use "Reply" to post a response in the discussion forum.
>
>

--
Eric B. Rowell

Messages In This Thread

[ View Thread ] [ Post Response ] [ Return to Index ] [ Read Prev Msg ] [ Read Next Msg ]

IDS Forum is maintained by Administrator with WebBBS 5.12.