Chinaunix首页 | 论坛 | 博客
  • 博客访问: 661397
  • 博文数量: 163
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1625
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-24 11:40
个人简介

资深Oracle数据库专家 OCM认证大师 10年数据库相关服务及开发经验 各类数据库相关方案的编写,管理及实施 数据中心数据库日常运维、大型项目割接、性能优化等方面有丰富的实战经验 客户包括: 电信,银行,保险,航空,国网,汽车,烟草等 想要一起学习探讨数据安全技术的请加qq群 256041954

文章分类

全部博文(163)

文章存档

2017年(2)

2016年(112)

2015年(38)

2014年(11)

我的朋友

分类: Oracle

2016-03-21 12:10:56

项目:
某**Boss项目
问题:
查询报表慢无法验收
分析及处理方法:
1:通过awr发现pga命中率很低 

PGA Cache Hit %

W/A MB Processed

Extra W/A MB Read/Written

74.97

108,656

36,272

解决过程:
查看系统总内存为32G,SGA为22G,PGA只有2G
更改数据内存:
alter system set sga_max_size=18G  scope=spfile;
alter system set sga_target=18G scope=spfile;
alter system set pga_aggregate_target=8G  scope=spfile;
2:通过trace 发现Bug 9772888 (查询报表慢,应该跟它没关,但是发现了问题,顺便解决)WARNING:Could not lower the asynch I/O limit to 160  

for SQL direct I/O. It is set to -1
解决过程:
(1):下载patch 9772888
(2):解压补丁:进入9772888目录 执行$ORACLE_HOME/OPatch/opatch apply

$ORACLE_HOME/OPatch/opatch lsinventory detail (查看命令)

3:在应用端查询报表,通过jboss后台抓取相应sql或使用sql语句抓取后台sql,查看执行计划,发现执行计划没有什么异常。再通过 中的优化工具找出等价最优sql语句,之后让开发更新程序。
4:再通过Oracle本身自带的SQL Tuning Advisor 自动优化一下相应sql
具体步骤:
(1):进入Boss系统应用用户
DECLARE 
    task_name VARCHAR2(200); 
    my_sqltext CLOB; 
    user_name VARCHAR2(30);
    sql_text VARCHAR2(5000);
    description VARCHAR2(200);
    my_task_name VARCHAR2(200);
  BEGIN 
    my_sqltext :='sql语句';
my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK( 
                            sql_text => my_sqltext, 
                            user_name => 'SMS3', 
                            scope => 'COMPREHENSIVE', 
                            time_limit => 600, 
                            task_name => 'test_sql_tuning_task1', 
                            description => 'Task to tune a query'); 
    DBMS_SQLTUNE.EXECUTE_TUNING_TASK(task_name => 'test_sql_tuning_task1');
 END; 
 /
(2):通过select task_name,ADVISOR_NAME,STATUS from user_advisor_tasks; 查看是否执行完成,如果status是EXECUTING,则表示任务正在执行,如果为completed,则任务已执行完成。
(3):查看语句优化建议
set long 999999
 set LONGCHUNKSIZE 999999
 set serveroutput on size 999999
 set linesize 200
 select dbms_sqltune.report_tuning_task('test_sql_tuning_task1') from dual;
DBMS_SQLTUNE.REPORT_TUNING_TASK('TEST_SQL_TUNING_TASK1')
(4):根据建议,优化语句。
(5):删除任务
exec dbms_sqltune.drop_tuning_task('TEST_SQL_TUNING_TASK1');
5:将优化后的sql提供给开发,打完补丁,更新到Boss应用系统后,查询时间从之前的15-20分钟,提高到1分钟以下。

阅读(1661) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~