Contents
AYY Oracle 上午会议
大表未分区,系统IO等待严重
合理使用分区
杜绝使用DELETE FROM GDAYY_GOODSSALEFLOW WHERE FILDATE <= TRUNC(:B1)-60 类似语句的出现。
- SQL中需要加入时间段过滤条件。
大表分区
- 目标表的选择(已完成,buy2s等)
- 分区字段选择( 查询的时候要使用, 删除历史数据或归档的时候要使用 )
- 分区类型的选择( 日期分区,interval自动生成 )
- 索引的处理 (原来表大部分有主键,为了避免重复,分区后仍保留(global), 清理历史数据要重建,其它索引建local)
- 原来使用这些表的SQL,需要加上分区字段上的限制条件。
统计信息问题
- 需要开启信息收集进程(前提为表已分区,IO压力减轻)
高并发问题
- 高并发导致数据库hang (2018.4.11)
减少RMAN增量备份的IO读取量
代码效率问题
- 业务: 硬解析问题, 硬解析+表上无统计信息,加剧系统压力,必须调整。
- 报表: 需要改写来提高效率,当前已完成两天培训,需要进一步优化,当前已给出多个修改范例。
部分SQL没有使用绑定变量,避免不必要的SQL使用
- 频繁执行的SQL必须使用绑定变量。
索引问题
- 统计信息必须要有。
游标问题使用
- 用with改写得到提升。
- 在某些场景,去掉游标,性能提升上百倍。
报表SQL大量update语句
明确实施计划
尽快进行大表分区
- 评估表的分类,确认表分区的优先级。
- 结合表分区测试时间,预估时间,充许的停机时间进行维护窗口的评估。
- 回退方案: 表分区时执行异常,表分区执行失败,分区成功后异常。
游标&索引问题处理
- 由袁工理出来,让相应的开发人员跟进处理。
Oracle 报表优化培训下午
result_cache
- 适合变动很少的表,加入result_cache
# before select count(distinct BaseCurrency) From VENDOR; #after select /*+ result_cache */ count(distinct BaseCurrency) From VENDOR;
pivot
SQL语句优化
零售消息推送(凯德WEBSERVICE销售数据接口
Begin select count(1) into VRET from v_store_notify s where s.gid = vStoredGid;
parallel
SQL> alter session enable parallel DML; SQL> alter session enable parallel DDL; 执行当前session会话或关掉会话之后,需要disable.
logging 是否开启
在实施DataGuard之前需要关闭
索引问题
- 100个SQL语句使用到索引CSL中的TIME字段, 但只有一个SQL语句进入了TOP 5 SQL。
索引优化十分重要
- 建立索引的标准为返回少量值/记录,哪怕是只有一条记录的表。
- 静态表尽量建立索引。
- 动态表谨慎建立索引。
- 上千万的数据却只有一个值, 也可以建立索引, 使用roomnumber ?
- 执行不频繁可以无需建立索引。
