Re: PCTFREE/PCTUSED for table with updates to LOBs?

From: neil kodner <nkodner_at_gmail.com>
Date: Wed, 14 May 2008 10:53:53 -0700 (PDT)
Message-ID: <af50666c-4df3-454e-b44b-5fe19ec04490@34g2000hsh.googlegroups.com>


On May 14, 11:45 am, Mark D Powell <Mark.Pow..._at_eds.com> wrote:
> On May 13, 2:11 pm, neil kodner <nkod..._at_gmail.com> wrote:
>
>
>
> > Hopefully I'm giving enough detail here.  I have a table, letter_bin,
> > which contains two CLOBS and a VARCHAR2(4000).  On insert, the two
> > clobs are NULL, the VARCHAR2 may or may not be populated.
>
> > SQL> desc letter_bin
> >  Name                                      Null?    Type
> >  ----------------------------------------- --------
> > ----------------------------
> >  LTR_BIN_BARCODE_ID                        NOT NULL NUMBER(18)
> >  LETTER_DETAIL                                      VARCHAR2(4000)
> >  CONTENT                                            CLOB
> >  LTR_XML                                            CLOB
>
> > AVG(LENGTH(LETTER_DETAIL))   COUNT(*) MAX(LENGTH(LETTER_DETAIL))
> > -------------------------- ---------- --------------------------
> >                 325.608595    1606180                       1374
>
> > AVG(LENGTH(CONTENT))   COUNT(*) MAX(LENGTH(CONTENT))
> > -------------------- ---------- --------------------
> >           364.742673      82638                37248
>
> > AVG(LENGTH(LTR_XML))   COUNT(*) MAX(LENGTH(LTR_XML))
> > -------------------- ---------- --------------------
> >           2131.86929    1308347                 5265
>
> > (handful of number/date columns omitted for simplicity)
>
> > TABLE_NAME  AVG_ROW_LEN   PCT_FREE   PCT_USED   NUM_ROWS  FULL_SIZE
> > ACTUAL_SIZE       DIFF     WASTED
> > ----------- ----------- ---------- ---------- ---------- ----------
> > ----------- ---------- ---------
> > LETTER_BIN         1639         40               2168152 5577326592
> > 3553601128 2023725464  809490186
>
> > It appears that this table is a good candidate for reorg.  Since it
> > has the LOBs, its not a valid candidate for shrink space.
> > Fortunately, I'm going to me moving this schema to another instance; I
> > will get to expdp/impdp over the weekend.  I also have about 250k
> > chained rows.
>
> > I'm sure that setting the pct_free much higher will take care of the
> > chained rows but what about the wasted space part?  I have a few days
> > to tune this table's storage parameters before the move; I'd like to
> > right any wrongs so this doesn't become an issue again.
>
> > Not all of the CLOBS are populated so its hard to pin down a one-size-
> > fits-all solution for this table.  Here are some details on the CLOB
> > fields, and the varchar2.  I thought 40% pct_free would be OK since
> > not all of the LOBs are populated but I guess I'm off, considering my
> > 250k chained rows.
>
> > AVG(LENGTH(LETTER_DETAIL))   COUNT(*) MAX(LENGTH(LETTER_DETAIL))
> > -------------------------- ---------- --------------------------
> >                 325.608595    1606180                       1374
>
> > AVG(LENGTH(CONTENT))   COUNT(*) MAX(LENGTH(CONTENT))
> > -------------------- ---------- --------------------
> >           364.742673      82638                37248
>
> > AVG(LENGTH(LTR_XML))   COUNT(*) MAX(LENGTH(LTR_XML))
> > -------------------- ---------- --------------------
> >           2131.86929    1308347                 5265
>
> > Finally, here is the result of dbms_space.space_usage, which is even
> > more confusing-It says I have only a (relatively)few blocks that are
> > candidates for reorg.
>
> > FS1 Blocks = 0 Bytes = 0
> > FS2 Blocks = 1 Bytes = 8192
> > FS3 Blocks = 3 Bytes = 24576
> > FS4 Blocks = 45 Bytes = 368640
> > Full Blocks = 680777 Bytes = 5576925184
>
> > So now, I'm thoroughly confused-Am I misunderstanding the issue, or
> > does the game change once LOBs are worked into the equation?
>
> Remember that Oracle creates a LOB table for every LOB column and all
> data over 2000 bytes is directed to the LOB table.
>
> To avoid table fragmentation and row migration problems on the base
> table I would declare both LOBs as no inline storage then all the LOB
> data will be in the associated LOB table for each column, if
> fragmentation and row migration were determined to be a problem.  What
> does an analyze show for chained rows?  Then you would only have to
> worry about setting the pctfree to handle the effect from the
> letter_detail column.
>
> HTH -- Mark D Powell --

Currently the LOBs are stored inline, as the lob sizes are (relatively) small. I made this decision based on a LOB tuning white paper from Oracle.com. Is the lob storage something I can change with an alter table move command, or do I need to rebuild/repopulate the table? Received on Wed May 14 2008 - 12:53:53 CDT

Original text of this message