ORACLE Database Design

系统设计阶段决定数据库是否存在性能问题。
 
系统设计:软件设计,硬件设计,数据库设计
 
软件设计:
1. 软件架构设计:三层架构(应用层+中间件层+数据库层)
2. 软件代码设计:
a. 人为添加Hint约束SQL的执行计划;
b. 不必要的外连接操作;
c. CBO下优化器模式选择:
    i. OLAP,报表作业: 设置all_rows;
    ii. 分页操作较多的网站类数据库:设置first_rows;
    iii. 如果既有报表作业,又有分页操作:选择使用Hint;
    例如: select * from
                (select /*+ first_rows(10) */ a.*,rownum rnum from
                (select /*+ first_rows(10) */ id,name from t1 order by id) a
                where rownum <=10)
                where rnum >=1;
d. 绑定变量:适用于OLTP系统,因为可以节省语法,语义分析及生成执行计划;
e. 使用存储过程代替PL/SQL 包,因为PL/SQL需要做语法,语义分析。
 
数据库设计:
1. 确定数据库类型:OLTP(在线事物处理系统), OLAP(在线分析系统),DSS(决策支持系统)
OLTP:    数据库对用户操作的快速响应 --> 尽量使数据可以再内存中做处理 --> SGA(data buffer, shared pool) PGA(排序区,Hash区) --> 注重数据库内存效率;内存各指标命中率,绑定变量,并发操作;
 
OLAP:    数据分析;SQL执行时长 --> 瓶颈磁盘I/O,CPU处理速度,SQL优化;分区表
 
分区优劣:
1. 当查询的范围正好在某个分区 --> 分区高于没有分区;
2. 当查询的范围跨越几个分区 -->  跨越的分区越多,分区越慢;
 
硬件设计:
1.  存储容量:
表容量=记录数*字段长度
 
字段长度获得:
create table t as select * from dba_objects;
exec dbms_stats.gather_table_stats('TEST', 'T', method_opt => 'FOR ALL');
select avg_row_len from user_tables where table_nam='T';
 
索引容量获得:
create index t_ind on t(object_id);
select segment_name,segment_type, bytes from user_segments where segment_name in ('T','T_IND');
查询结果:
SEGMENT_NAME                SEGMENT_TYPE            BYTES
T                                           TABLE                            6291456
T_IND                                   INDEX                            1048576
 
select trunc((1048576/6291456)*100) ind_pct from dual;
查询结果:
IND_PCT
16
索引容量=字段长度*16%
表总容量=字段长度*(1+16%)
 
备份容量:防灾类型(数据库损毁;硬盘损毁;主机损毁)
 
2. 数据安全:
a. Dataguard --> 人工切换;保证数据不丢失或尽量少丢失;数据库级别冗余结构
b. RAC --> 无缝自动切换;实例级别冗余结构
c. RMAN+归档 --> 回复需要较长时间
d. 导入导出 -->无法保证数据安全

Comments

Popular posts from this blog

Nginx Proxy & Load Balance & LNMP

Snort+barnyard2+Snorby CentOS 6.5_64 Installation

ORACLE Error