描述一下环境:
oracle 10.2.0.1
ASM的使用如下:SQL> select g.name,d.name,g.group_number,d.path,d.header_status,d.mode_status                       
  2  from v$asm_disk d,v$asm_diskgroup g                                                            
  3  where d.group_number=g.group_number                                                            
  4  order by g.name;                                                                               NAME         NAME         GROUP_NUMBER PATH           HEADER_STATU MODE_ST
------------ ------------ ------------ -------------- ------------ -------
DATA         DATA_0000               1 /dev/raw/raw4  MEMBER       ONLINE
DATA         DATA_0001               1 /dev/raw/raw6  MEMBER       ONLINE
FLASH        FLASH_0000              2 /dev/raw/raw5  MEMBER       ONLINESQL> select t.name tablespace,t.ts#,d.name from v$tablespace t,v$datafile d                         
  2  where t.ts#=d.ts#                                                                              
  3  order by t.ts#;                                                                                TABLESPACE        TS# NAME
---------- ---------- --------------------------------------------------
SYSTEM              0 +DATA/mydata/datafile/system.259.694616135
UNDOTBS1            1 +DATA/mydata/datafile/undotbs1.260.694616187
SYSAUX              2 +DATA/mydata/datafile/sysaux.261.694616197
UNDOTBS2            4 +DATA/mydata/datafile/undotbs2.263.694616231
USERS               5 +DATA/mydata/datafile/users.264.694616241
TEST1               6 +DATA/mydata/datafile/test1.268.694877367
TEST2               7 +DATA/mydata/datafile/test2.269.694877387
TEST3               8 +DATA/mydata/datafile/test3.270.694877403问题1:我如何能控制创建的表空间去使用ASM同一个磁盘组中的某一个裸设备?比如test1去使用/dev/raw/raw4,test2去使用/dev/raw/raw6.
问题2:假如问题1无解,那么分区表在基于ASM管理创建的库中还有意义吗?
假设现在有一个表的数据量很大,最初的想法是创建分区表如下:create table test_partition (id number,name varchar2(10))
partition by hash (id)
partitions 2
store in (test1,test2);结果发现根本没法控制磁盘I/O,无法确定ASM是把test1和test2创建到那个裸设备上了,若是都创建在/dev/raw/raw4上了,那分区表还有什么意义呢......
希望高手或有经验的DBA帮忙解答一下,不胜感激!

解决方案 »

  1.   

    祼设备一般都是做了条块化(stripping),在条块化之后,磁盘在划分逻辑卷的时候,已经不是按一个接一个的物理磁盘来划分了,而是一个卷就跨了好几个物理磁盘,也就是说,I/O已经是分布在不同的磁盘上了这个I/O分布的问题不用你从建表空间的角度去考虑了。当然,如果没有做条块化的时候,就需要你自己去考虑这个问题,这个时候,一般是在建表空间的时候解决的,把一个表空间分成几个数据文件,每个数据文件在不同的裸设备上,这个是不难做到的
      

  2.   

    /dev/raw/raw4和/dev/raw/raw6因为测试,只是简单不同的卷对应单一的物理磁盘,所以没有条快化.
    ASM可以处理I/O分布,但是/dev/raw/raw6是为了测试,后加到ASM中的,我知道Asm_power_limit这个参数可以指定磁盘自动平衡负载的等级,但是ASM是何时进行的自动负载平衡的?有资料说是添加或删除磁盘的时候,是否是这个时候,我如何去确定?或者说Asm_power_limit究竟设置多少合适?
      

  3.   

    在性能方面,分区的性能的表现能力也不在于解决I/O分布,主要几个方面:
    1. 如果where条件中有分区的条件,那么,查询的时候只会从相应的分区中取数据,而不去检索其他分区,这样,可以加快速度
    2. 对于insert和update,在local index的情况下,会比不分区的情况下并发性能更好
    3. local index会减少相应的资源消耗
      

  4.   

    感谢你的帮助和解释还有其他人能分享一下ASM的使用经验吗?
      

  5.   

    上面的基本上都说到了asm的优点了,这里有以前对ASM的一点认识http://www.inthirties.com/?p=812