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
Post a Comment