oracle 11g partitioning

Upload: kuldeepkumar12

Post on 05-Apr-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/31/2019 Oracle 11g Partitioning

    1/11

    PARTITIONING

    Business applications are growing at a faster rate than salaries, and so is the data supporting

    them, especially e-business applications where the data growth has been around 20-30 percent or

    more annually. Oracle came up with the idea of PARTITIONING the Tables.

    Yes! The name sounds right Partitioning, the literal meaning of Partitioning is The Act of

    dividing something into parts and in our case that something is nothing but Data.Oracle introduced partitioning with 8.0. With this version only, RANGE-Partitioning was

    supported. Then with Oracle 8i HASH and COMPOSITE Partitioning was also introduced and with

    9i LIST Partitioning. Each method of partitioning has its own advantages and disadvantages and the

    decision which one to use will depend on the data and type of application. Also you can MODIFY,

    RENAME, MOVE, ADD, DROP, TRUNCATE, SPLIT partitions.

    Partitioning allows a table, index, or index-organized table to be subdivided into smaller pieces,

    where each piece of such a database object is called a partition. Each partition has its own name, and

    may optionally have its own storage characteristics.

    Above image shows both partitioned and non-partitioned tables, each can have partitioned or non-

    partitioned indexes.

    Note: All partitions of a partitioned object must reside in tablespaces of a single block size.

    Note: To reduce disk usage and memory usage (specifically, the buffer cache), you can store tablesand partitions of a partitioned table in a compressed format inside the database. This often leads to a

    better scale up for read-only operations. Table compression can also speed up query execution. There

    is, however, a slight cost in CPU overhead.

    Note: LONG or LONG RAW datatypes must not used as a column datatype for partition. You can,

    however, use columns with CLOB or BLOB datatypes.

  • 7/31/2019 Oracle 11g Partitioning

    2/11

    Partitioning Key

    Each row in a partitioned table is unambiguously assigned to a single partition. The partitioning key is

    comprised of one or more columns that determine the partition where each row will be stored. Oracle

    automatically directs DML operations to the appropriate partition through the use of the partitioningkey. The partition key is a set of from 1 to 16 columns that determines the partition for each row.

    Advantages of using Partitions in Table

    1. Partition increases the manageability.2. Partition Reduced recovery time3. Failure impact is less4. Import / Export can be done at the Partition Level".5. Partition enhances the performance6. Partition increases the availability.7. Partitions work independent of the other partitions.8. Partitions reduce the total cost of ownership for storing large amounts of data

    When to Partition a Table

    1. Tables greater than 2 GB should always be considered as candidates for partitioning2. When the contents of a table need to be distributed across different types of storage devices3. Tables containing historical data, in which new data is added into the newest partition. A

    typical example is a historical table where only the current month's data is updatable and the

    other 11 months are read only.

    When to Partition an Index

    1. Avoid rebuilding the entire index when data is removed.2. Perform maintenance on parts of the data without invalidating the entire index.3. Reduce the impact of index skew caused by an index on a column with a monotonically

    increasing value.

    Partitioned Index-Organized Tables

    1. Partition columns must be a subset of the primary key columns2. Secondary indexes can be partitioned (both locally and globally)3. OVERFLOW data segments are always equi-partitioned with the table partitions

    Partitioning and LOB Data

    Unstructured data (such as images and documents) which is stored in a LOB column in the database

    can also be partitioned. When a table is partitioned, all the columns will reside in the tablespace for

    that partition, with the exception of LOB columns, which can be stored in their own tablespace.

  • 7/31/2019 Oracle 11g Partitioning

    3/11

    This technique is very useful when a table is comprised of large LOBs because they can be stored

    separately from the main data. This can be beneficial if the main data is being frequently updated but

    the LOB data isn't. For example, an employee record may contain a photo which is unlikely to change

    frequently. However, the employee personnel details (such as address, department, manager, and so

    on) could change. This approach also means that cheaper storage can be used for storing the LOB

    data and more expensive, faster storage used for the employee record.

    Single-Level Partitioning

    1. Range PartitioningRange partitioning maps data to partitions based on ranges of values of the partitioning key that you

    establish for each partition. It is the most common type of partitioning and is often used with dates.

    For a table with a date column as the partitioning key, the January-2005 partition would contain rowswith partitioning key values from 01-Jan-2005 to 31-Jan-2005.

    Each partition has a VALUES LESS THAN clause, which specifies a non-inclusive upper bound for

    the partitions. Any values of the partitioning key equal to or higher than this literal are added to the

    next higher partition. All partitions, except the first, have an implicit lower bound specified by the

    VALUES LESS THAN clause of the previous partition.

    A MAXVALUE literal can be defined for the highest partition. MAXVALUE represents a virtual

    infinite value that sorts higher than any other possible value for the partitioning key, including the

    NULL value.

    When to Use Range Partitioning: Use range partitioning to map rows to partitions based on ranges of

    column values. This type of partitioning is useful when dealing with data that has logical ranges into

    which it can be distributed; for example, months of the year. Performance is best when the data

    evenly distributes across the range. If partitioning by range causes partitions to vary dramatically in

    size because of unequal distribution, you may want to consider one of the other methods of

    partitioning.

  • 7/31/2019 Oracle 11g Partitioning

    4/11

    When creating range partitions, you must specify:

    Partitioning method: range Partitioning column(s) Partition descriptions identifying partition bounds

    The example below creates a table of four partitions, one for each quarter of sales. The columns

    sale_year, sale_month, and sale_day are the partitioning columns, while their values constitute

    the partitioning key of a specific row. The VALUES LESS THAN clause determines the partition

    bound: rows with partitioning key values that compare less than the ordered list of values specified

    by the clause are stored in the partition. Each partition is given a name (sales_q1, sales_q2, ...), and

    each partition is contained in a separate tablespace (tsa, tsb, ...).

    CREATE TABLE sales( invoice_no NUMBER,sale_year NUMBER NOT NULL,sale_month NUMBER NOT NULL,sale_day NUMBER NOT NULL)

    PARTITION BY RANGE (sale_year, sale_month, sale_day)( PARTITION sales_q1 VALUES LESS THAN (1999, 04, 01) TABLESPACE tsa,PARTITION sales_q2 VALUES LESS THAN (1999, 07, 01) TABLESPACE tsb,PARTITION sales_q3 VALUES LESS THAN (1999, 10, 01) TABLESPACE tsc,PARTITION sales_q4 VALUES LESS THAN (2000, 01, 01) TABLESPACE tsd);

    A row with sale_year=1999, sale_month=8, and sale_day=1 has a partitioning key of(1999, 8,

    1) and would be stored in partition sales_q3.

    2. Hash Partitioning

    Hash partitioning maps data to partitions based on a hashing algorithm that Oracle applies to thepartitioning key that you identify. The hashing algorithm evenly distributes rows among partitions,

    giving partitions approximately the same size.

    Hash partitioning is the ideal method for distributing data evenly across devices. Hash partitioning is

    also an easy-to-use alternative to range partitioning, especially when the data to be partitioned is not

    historical or has no obvious partitioning key.

    When to Use Hash Partitioning: Use hash partitioning if your data does not easily lend itself to range

    partitioning, but you would like to partition for performance and manageability reasons. Hash

  • 7/31/2019 Oracle 11g Partitioning

    5/11

    partitioning provides a method of evenly distributing data across a specified number of partitions.

    Rows are mapped into partitions based on a hash value of the partitioning key. Creating and using

    hash partitions gives you a highly tunable method of data placement, because you can influence

    availability and performance by spreading these evenly sized partitions across I/O devices (striping).

    To create hash partitions you specify the following:

    Partitioning method: hash Partitioning column(s) Number of partitions or individual partition descriptions

    The following example creates a hash-partitioned table. The partitioning column is id, four partitions

    are created and assigned system generated names, and they are placed in four named tablespaces(gear1, gear2, ...).

    CREATE TABLE scubagear(id NUMBER,name VARCHAR2 (60))

    PARTITION BY HASH (id)PARTITIONS 4STORE IN (gear1, gear2, gear3, gear4);

    3. List PartitioningList partitioning enables you to explicitly control how rows map to partitions by specifying a list of

    discrete values for the partitioning key in the description for each partition. The advantage of list

    partitioning is that you can group and organize unordered and unrelated sets of data in a natural way.For a table with a region column as the partitioning key, the North America partition might contain

    values Canada, USA, and Mexico.

    The DEFAULT partition enables you to avoid specifying all possible values for a list-partitioned

    table by using a default partition, so that all rows that do not map to any other partition do not

    generate an error.

  • 7/31/2019 Oracle 11g Partitioning

    6/11

    When to Use List Partitioning: Use list partitioning when you require explicit control over how rows

    map to partitions. You can specify a list of discrete values for the partitioning column in the

    description for each partition. This is different from range partitioning, where a range of values is

    associated with a partition, and from hash partitioning, where the user has no control of the row to

    partition mapping.

    The list partitioning method is specifically designed for modeling data distributions that followdiscrete values. This cannot be easily done by range or hash partitioning because:

    Range partitioning assumes a natural range of values for the partitioning column. It is notpossible to group together out-of-range values partitions.

    Hash partitioning allows no control over the distribution of data because the data isdistributed over the various partitions using the system hash function. Again, this makes it

    impossible to logically group together discrete values for the partitioning columns into

    partitions.

    Further, list partitioning allows unordered and unrelated sets of data to be grouped and organized

    together very naturally.

    Unlike the range and hash partitioning methods, multicolumn partitioning is not supported for list

    partitioning. If a table is partitioned by list, the partitioning key can consist only of a single column of

    the table. Otherwise all columns that can be partitioned by the range or hash methods can bepartitioned by the list partitioning method.

    When creating list partitions, you must specify:

    Partitioning method: list Partitioning column Partition descriptions, each specifying a list of literal values (a value list), which are the

    discrete values of the partitioning column that qualify a row to be included in the partition

    The following example creates a list-partitioned table. It creates table q1_sales_by_region which is

    partitioned by regions consisting of groups of states.

    CREATE TABLE q1_sales_by_region(deptno number,deptname varchar2(20),quarterly_sales number(10, 2),state varchar2(2))

    PARTITION BY LIST (state)(PARTITION q1_northwest VALUES ('OR', 'WA'),PARTITION q1_southwest VALUES ('AZ', 'UT', 'NM'),PARTITION q1_northeast VALUES ('NY', 'VM', 'NJ'),

    PARTITION q1_southeast VALUES ('FL', 'GA'),PARTITION q1_northcentral VALUES ('SD', 'WI'),PARTITION q1_southcentral VALUES ('OK', 'TX'));

    A row is mapped to a partition by checking whether the value of the partitioning column for a rowmatches a value in the value list that describes the partition.

    For example, some sample rows are inserted as follows:

  • 7/31/2019 Oracle 11g Partitioning

    7/11

    (10, 'accounting', 100, 'WA') maps to partition q1_northwest (20, 'R&D', 150, 'OR') maps to partition q1_northwest (30, 'sales', 100, 'FL') maps to partition q1_southeast (40, 'HR', 10, 'TX') maps to partition q1_southwest (50, 'systems engineering', 10, 'CA') does not map to any partition in the table and raises an

    error

    Unlike range partitioning, with list partitioning, there is no apparent sense of order between partitions.

    You can also specify a default partition into which rows that do not map to any other partition are

    mapped. If a default partition were specified in the preceding example, the state CA would map to

    that partition.

    Composite Partitioning

    Composite partitioning is a combination of the basic data distribution methods; a table is partitioned

    by one data distribution method and then each partition is further subdivided into sub partitions using

    a second data distribution method. All sub partitions for a given partition together represent a logical

    subset of the data.

    Composite partitioning supports historical operations, such as adding new range partitions, but also

    provides higher degrees of potential partition pruning and finer granularity of data placement throughsub partitioning. Above figure offers a graphical view of range-hash and range-list composite

    partitioning, as an example.

    1. Composite Range-Range PartitioningComposite range-range partitioning enables logical range partitioning along two dimensions; for

    example, partition by order_date and range sub partition by shipping_date.

  • 7/31/2019 Oracle 11g Partitioning

    8/11

    2. Composite Range-Hash PartitioningComposite range-hash partitioning partitions data using the range method, and within each partition,

    sub partitions it using the hash method. Composite range-hash partitioning provides the improved

    manageability of range partitioning and the data placement, striping, and parallelism advantages of

    hash partitioning.

    When to Use Composite Range-Hash Partitioning: Range-hash partitioning partitions data using the

    range method, and within each partition, sub partitions it using the hash method. These composite

    partitions are ideal for both historical data and striping, and provide improved manageability of range

    partitioning and data placement, as well as the parallelism advantages of hash partitioning.

    When creating range-hash partitions, you specify the following:

    Partitioning method: range Partitioning column(s) Partition descriptions identifying partition bounds Sub partitioning method: hash Sub partitioning column(s) Number of sub partitions for each partition or descriptions of sub partitions

    The following statement creates a range-hash partitioned table. In this example, three range partitions

    are created, each containing eight sub partitions. Because the sub partitions are not named, system

    generated names are assigned, but the STORE IN clause distributes them across the 4 specified

    tablespaces (ts1, ...,ts4).

    CREATE TABLE scubagear (equipno NUMBER, equipname VARCHAR(32), price NUMBER)PARTITION BY RANGE (equipno) SUBPARTITION BY HASH(equipname)SUBPARTITIONS 8 STORE IN (ts1, ts2, ts3, ts4)(PARTITION p1 VALUES LESS THAN (1000),PARTITION p2 VALUES LESS THAN (2000),PARTITION p3 VALUES LESS THAN (MAXVALUE));

  • 7/31/2019 Oracle 11g Partitioning

    9/11

    The partitions of a range-hash partitioned table are logical structures only, as their data is stored in the

    segments of their sub partitions. As with partitions, these sub partitions share the same logical

    attributes. Unlike range partitions in a range-partitioned table, the sub partitions cannot have different

    physical attributes from the owning partition, although they are not required to reside in the same

    tablespace.

    3. Composite Range-List PartitioningComposite range-list partitioning partitions data using the range method, and within each partition,sub partitions it using the list method. Composite range-list partitioning provides the manageability of

    range partitioning and the explicit control of list partitioning for the sub partitions.

    When to Use Composite Range-List Partitioning: Like the composite range-hash partitioning method,

    the composite range-list partitioning method provides for partitioning based on a two level hierarchy.

    The first level of partitioning is based on a range of values, as for range partitioning; the second levelis based on discrete values, as for list partitioning. This form of composite partitioning is well suited

    for historical data, but lets you further group the rows of data based on unordered or unrelated column

    values.

    When creating range-list partitions, you specify the following:

    Partitioning method: range Partitioning column(s) Partition descriptions identifying partition bounds Sub partitioning method: list Sub partitioning column Sub partition descriptions, each specifying a list of literal values (a value list), which are the

    discrete values of the sub partitioning column that qualify a row to be included in the sub

    partition

    The following example illustrates how range-list partitioning might be used. The example tracks sales

    data of products by quarters and within each quarter, groups it by specified states.

    CREATE TABLE quarterly_regional_sales(deptno number, item_no varchar2(20),

  • 7/31/2019 Oracle 11g Partitioning

    10/11

    txn_date date, txn_amount number, state varchar2(2))TABLESPACE ts4PARTITION BY RANGE (txn_date)SUBPARTITION BY LIST (state)(PARTITION q1_1999 VALUES LESS THAN (TO_DATE('1-APR-1999','DD-MON-YYYY'))

    (SUBPARTITION q1_1999_northwest VALUES ('OR', 'WA'),SUBPARTITION q1_1999_southwest VALUES ('AZ', 'UT', 'NM'),

    SUBPARTITION q1_1999_northeast VALUES ('NY', 'VM', 'NJ'),SUBPARTITION q1_1999_southeast VALUES ('FL', 'GA'),SUBPARTITION q1_1999_northcentral VALUES ('SD', 'WI'),SUBPARTITION q1_1999_southcentral VALUES ('OK', 'TX')),

    PARTITION q2_1999 VALUES LESS THAN ( TO_DATE('1-JUL-1999','DD-MON-YYYY'))(SUBPARTITION q2_1999_northwest VALUES ('OR', 'WA'),SUBPARTITION q2_1999_southwest VALUES ('AZ', 'UT', 'NM'),SUBPARTITION q2_1999_northeast VALUES ('NY', 'VM', 'NJ'),SUBPARTITION q2_1999_southeast VALUES ('FL', 'GA'),SUBPARTITION q2_1999_northcentral VALUES ('SD', 'WI'),SUBPARTITION q2_1999_southcentral VALUES ('OK', 'TX')),

    PARTITION q3_1999 VALUES LESS THAN (TO_DATE('1-OCT-1999','DD-MON-YYYY'))(SUBPARTITION q3_1999_northwest VALUES ('OR', 'WA'),

    SUBPARTITION q3_1999_southwest VALUES ('AZ', 'UT', 'NM'),SUBPARTITION q3_1999_northeast VALUES ('NY', 'VM', 'NJ'),SUBPARTITION q3_1999_southeast VALUES ('FL', 'GA'),SUBPARTITION q3_1999_northcentral VALUES ('SD', 'WI'),SUBPARTITION q3_1999_southcentral VALUES ('OK', 'TX')),

    PARTITION q4_1999 VALUES LESS THAN ( TO_DATE('1-JAN-2000','DD-MON-YYYY'))(SUBPARTITION q4_1999_northwest VALUES ('OR', 'WA'),SUBPARTITION q4_1999_southwest VALUES ('AZ', 'UT', 'NM'),SUBPARTITION q4_1999_northeast VALUES ('NY', 'VM', 'NJ'),SUBPARTITION q4_1999_southeast VALUES ('FL', 'GA'),SUBPARTITION q4_1999_northcentral VALUES ('SD', 'WI'),SUBPARTITION q4_1999_southcentral VALUES ('OK', 'TX'))

    );

    A row is mapped to a partition by checking whether the value of the partitioning column for a row

    falls within a specific partition range. The row is then mapped to a sub partition within that partitionby identifying the sub partition whose descriptor value list contains a value matching the sub partition

    column value.

    For example, some sample rows are inserted as follows:

    (10, 4532130, '23-Jan-1999', 8934.10, 'WA') maps to subpartition 1_1999_northwest (20, 5671621, '15-May-1999', 49021.21, 'OR') maps to subpartition q2_1999_northwest (30, 9977612, ,'07-Sep-1999', 30987.90, 'FL') maps to subpartition q3_1999_southeast (40, 9977612, '29-Nov-1999', 67891.45, 'TX') maps to subpartition q4_1999_southcentral (40, 4532130, '5-Jan-2000', 897231.55, 'TX') does not map to any partition in the table and

    raises an error

    (50, 5671621, '17-Dec-1999', 76123.35, 'CA') does not map to any subpartition in the tableand raises an error

    The partitions of a range-list partitioned table are logical structures only, as their data is stored in the

    segments of their subpartitions. The list subpartitions have the same characteristics as list partitions.You can specify a default subpartition, just as you specify a default partition for list partitioning.

  • 7/31/2019 Oracle 11g Partitioning

    11/11

    4. Composite List-Range PartitioningComposite list-range partitioning enables logical range sub partitioning within a given list partitioning

    strategy; for example, list partition by country_id and range sub partition by order_date.

    5. Composite List-Hash PartitioningComposite list-hash partitioning enables hash sub partitioning of a list-partitioned object; forexample, to enable partition-wise joins.

    6. Composite List-List PartitioningComposite list-list partitioning enables logical list partitioning along two dimensions; for example,

    list partition by country_id and list sub partition by sales_channel.