ORACLE1.17-分区表物理性能

select rowid,id,display,key_value,key_type,lang from oa.dicts

 

-->>物理层面的

--从物理层面上提速

--一、内存的提升

--修改SGA

 alter system set sga_max_size=4096M scope=spfile;

 alter system set sga_target=4096M scope=spfile;

 

 内存性能是硬盘的1000倍

 内存重启后丢失(RAM)

 

 100亿记录--》》500G

 当你的SGA大于数据库本身的大小时(性能昂昂的)

 

 --二、硬盘

 --1.表空间与SSD的结合

 --2.N个硬盘(重点)

 -- oracle的分区(又一杀手锏)

 --分区又分多种

 

 

 --三、cpu

 

 

 --1、创建分区对应的表空间

--模拟3个表空间,对应3个分区

create tablespace data_p1

    logging datafile 'C:\DATA2\001.dbf'

    size 30m

    autoextend on next 5m maxsize 1024m

    extent management local

    segment space management auto;

 

 

create tablespace data_p2

    logging datafile 'C:\DATA2\002.dbf'

    size 30m

    autoextend on next 5m maxsize 1024m

    extent management local

    segment space management auto;

   

create tablespace data_p3

    logging datafile 'C:\DATA2\003.dbf'

    size 30m

    autoextend on next 5m maxsize 1024m

    extent management local

    segment space management auto;

 

-- 此3个表空间,只用于分区表

-- 不用于默认值

-- 建立一个默认的表空间

create tablespace data_default

    logging datafile 'C:\DATA2\default.dbf'

    size 30m

    autoextend on next 5m maxsize 1024m

    extent management local

    segment space management auto;

   

-- 建立一个临时表空间

create temporary tablespace cat_temp

    tempfile 'C:\DATA2\temp_001.dbf' size 30m

    autoextend on next 5m maxsize 1024m

    extent management local;

   

-- 建立用户

create user cat identified by 123456

    default tablespace data_default

    temporary tablespace cat_temp;

   

-- 授权

grant connect,resource,dba to cat;

create table t_user(

   id number primary key,

   user_name varchar2(500),

   record_date number

);

select oa.myseq.nextval from dual;

create sequence myseq2;

 

select myseq2.nextval from dual;

 

insert into t_user values (myseq2.nextval,'小明',201801);

commit;

select count(1) from t_user

 

-- 快速让我们的数据倍增

insert into t_user(

  select

    myseq2.nextval id,

    user_name,

    record_date

  from t_user

);

-- 400

 

insert into t_user(

  select

    myseq2.nextval id,

    user_name,

    201803 record_date

  from t_user

);

 

-- 算时间(耗时1.270秒)

select count(1) from t_user where record_date=201802

 

-- 创建分区表

create table t_user2(

   id number primary key,

   user_name varchar2(500),

   record_date number

)

PARTITION BY RANGE (record_date)

(

PARTITION part01 VALUES LESS THAN (201802) TABLESPACE data_p1,

PARTITION part02 VALUES LESS THAN (201803) TABLESPACE data_p2,

PARTITION part03 VALUES LESS THAN (201804) TABLESPACE data_p3

); 

-------------

insert into t_user2(

   select * from t_user

)

 

select count(1) from t_user2

 

 

alter tablespace data_default

   add datafile 'c:\data2\DEFAULT02.DBF'

   size 100m

   autoextend on next 5m maxsize 2048m;

  

  

-- 算时间(没分区:耗时1.47秒,有分区0.45秒) 

select count(1) from t_user2 where record_date=201802

 

假如淘宝1个月,数据量是1亿

1年后12亿

10年后120亿

--按时间字段分区,随着时间的流失,数据的增长,性能不会因为

--数据量的增大而下降

 

select * from dba_part_tables where table_name='T_USER2'

select * from dba_tab_partitions where table_name='T_USER2'

 

select SUM(BYTES)/1024/1024 from dba_free_space

where tablespace_name='DATA_DEFAULT'

 

select * from dba_free_space

where tablespace_name='DATA_DEFAULT'

 

select count(1) from t_user

posted @ 2018-03-21 15:11  我喜欢空格键  阅读(144)  评论(0编辑  收藏  举报