Re: Chained Rows

  • From: Tim Gorman <tim@xxxxxxxxx>
  • To: oracle-l@xxxxxxxxxxxxx
  • Date: Thu, 24 Apr 2014 05:52:16 -0600

Ken,

Coming into this thread late, so I've not seen your original post in the thread.

Since the table has so many columns, and if there is the possibility that not all of those columns are used, have you tried re-organizing the table so that the most likely NULL columns trail, and the most likely NOT NULL columns lead? I have a PL/SQL stored procedure called CARL (file "carl.sql" at "http://evdbt.com/scripts/";) which is designed to answer the "what if" question about using "trailing NULL columns" compression, much the same as the DBMS_COMPRESSION package is designed to answer the "what if" question about whether or not to use different types of compression (i.e. basic, oltp, hcc, etc). The big difference is that CARL does not temporarily create a compressed table as DBMS_COMPRESSION does, but calculates everything using gathered statistics residing in the DBA_TAB_COLUMNS view, so you'd want good statistics.

It may not help your problem, but it'll tell you pretty quickly whether it is worth trying.

Hope this helps.

Thanks!

-Tim

On 4/24/2014 3:34 AM, Kenny Payton wrote:

Yes. We are at 8k and I suspect a 16k block size would reduce the rate by 1/2. We have talked about doing this for some time. Unfortunately the most widely affected areas of the database is 20T of data out of 160T of databases. Also efficiently managing multiple buffer pools becomes difficult.

What I find challenging is that I don't see a way to avoid it all together. If you have a table with more than 255 columns and you use any of the columns beyond 255 this is going to happen at some difficult to predict rate.

Ideally I would want Oracle to put all row pieces in a single block if they would fit. If not then consider them chained and break it up. It seems to treat each row piece independently from the start.

On Apr 24, 2014 1:42 AM, "Hans Forbrich" <fuzzy.graybeard@xxxxxxxxx <mailto:fuzzy.graybeard@xxxxxxxxx>> wrote:

    Is this possibly a valid use case for larger tablespace block size?

    On 23/04/2014 4:29 PM, Kenny Payton wrote:

    Thanks.

    Unfortunately the data and access patterns change pretty
    frequently.   Another reason we find ourselves in this situation.

    On Apr 23, 2014 6:02 PM, "Sayan Malakshinov" <xt.and.r@xxxxxxxxx
    <mailto:xt.and.r@xxxxxxxxx>> wrote:


        On Thu, Apr 24, 2014 at 12:56 AM, Kenny Payton
        <k3nnyp@xxxxxxxxx <mailto:k3nnyp@xxxxxxxxx>> wrote:

            I know a lot of the tricks for avoiding chained rows and
            migrated rows but the only trick I know of to element
            these intra or inter block chained rows is to break the
table into multiple tables or the row into multiple rows.Â

        Sometimes might be helpful to redefine table with moving
        less-used columns to the ends of rows. It allows to reduce
        extra-work if most queries use only the first columns


Other related posts: