Posts

Showing posts with the label Oracle Tuning

ORACLE Find SQL script

1. 通过用户名查询SQL_ID: select SQL_ID from v$session a where  USERNAME ='HR' AND ACTION='SQL Window - New'   2. 通过SQL_ID查询具体脚本: select sql_text from v$sql where sql_id='';

ORACLE 9i statspack使用

安装 1.建一个单独的表空间用于Statspack 或建在tools表空间上(>100MB) sqlplus “/ as sysdba” create tablespace perfstat datafile ‘/oracle/oradata/perfstat.dbf’ size 500M extent management local; 2.建用户perfstat及表 @?/rdbms/admin/spcreate.sql 要求输入表空间及临时表空间. 建完后会在本目录下生成: spauto.lis spcpkg.lis spctab.lis spcusr.lis spdtab.lis spdusr.lis grep –I “ora-“ *.lis 查看是否有错。 制作报表 1. 手工采样 exec statspack.snap 隔一段时间后再次采样数据 exec statspack.snap 2. 设置自动采样 定义定时任务 修改spauto.sql内容,定义采样数据的时间间隔 例如:每分钟采样一次: variable job_no number; begin dbms_job.submit(:job_no,'statspack.snap;',sysdate,'sysdate+1/1440'); end; / 一天24小时,1440分钟,则: 每小时一次: 1/24 (建议使用) 每30分钟一次:  1/48 每10分钟一次 1/144 每5分钟一次 1/288 后执行 @?/rdbms/admin/spauto.sql 停止定时任务 sqlplus perfstat/perfstat select job,interval from user_jobs; exec dbms_job.remove(job => ?); 3. 删除历史数据 delete from stats$snapshot where snap_id<??? 4. 删除全部数据 @?/rdbms/admin/sptrunc.sql 5. 生成报表  @?/rdbms/admin/spreport.sql 报告内容 Statspack报告分为几个部分: 5. 数据库总体信息 6. 每秒每事务的资...

ORACLE 跟踪统计用户操作

Oracle 新增了 DBMS_MONITOR 包,使得用户可以更加方便的设置 TRACE 和统计信息。 查看: SELECT SID, SERIAL#, SQL_TRACE, SQL_TRACE_WAITS, SQL_TRACE_BINDS   FROM V$SESSION 如果SQL_TRACE为disable则说明没有跟踪; 建立跟踪: 1. sys用户登录; 2. 执行:EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE( SID, SERIAL# ); 关闭跟踪: 1. sys用户登录; 2. 执行:EXEC DBMS_MONITOR.SESSION_TRACE_DISABLE( SID, SERIAL# ); 查看跟踪结果: 1. 找出相关SPID SELECT SPID FROM V$PROCESS  WHERE ADDR IN  (SELECT PADDR FROM V$SESSION WHERE SID =  SID ); 2. 在trace文件夹(oracle 11g /u01/app/oracle/diag/rdbms/orcl11g/orcl11g/trace)找含有SPID的trc文件。

ORACLE Check script execution plan

三种查看方式: 1. EXPLAIN 2. AUTOTRACE; 3. PL/SQL工具   EXPLAIN: 1. 安装: UNIX: $ORACLE_HOME/rdbms/admin\ultxplan.sql Windows:%ORACLE_HOME%\rdbms\admin\ultxplan.sql   2. 建立: set feedback on; explain plan set statement_id='T_TEST' for select * from hr.employees; 3. 查看:  select * from plan_table;   AUTOTRACE: 1. 安装: UNIX: $ORACLE_HOME/rdbms/admin\ultxplan.sql Windows:%ORACLE_HOME%\rdbms\admin\ultxplan.sql   2. 建同义词,授权: create public synonym plan_table for plan_table;--建立同义词 grant all on plan_table to public;--授权所有用户   3. 运行脚本: UNIX:$ORACLE_HOME/sqlplus/admin/plustrce.sql; Windows:%ORACLE_HOME%\sqlplus\admin\plustrce.sql; grant plustrace to public;   4.使用: 查看执行计划: set autotrace on explain select * from hr.employees;   查看统计结果: set autotrace on statictics; select * from hr.employees;   删除同义词: drop public synonym <synonym name>; drop synonym <synonym name>;

ORALCE Generate AWR Report

1. 检查系统中现有参数设置 SQL>select snap_interval, retention from dba_hist_wr_control;   2. 修改系统中参数 begin dbms_workload_repository.modify_snapshot_settings ( interval => 20, retention => 2*24*60); end; / 3. 手工创造快照 begin dbms_workload_repository.create_snapshot(); end; / 4. 生成AWR REPROT @D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\awrrpt.sql; 参数: 输入report的值:html\text 输入num_days的值:1 输入begin_snap的值:15 输入end_snap的值:20 输入report_name的值:d:\awrrpt.txt 报告如果正常完成: End of Report Report written to d:\awrrpt.txt   AWR默认的采样间隔和历史快照保留时间  默认是保留七天,采集间隔是1小时,这个信息可以从DBA_HIST_WR_CONTROL视图中获得。  sys@ora10g> col SNAP_INTERVAL for a20  sys@ora10g> col RETENTION for a20  sys@ora10g> select * from dba_hist_wr_control;        DBID SNAP_INTERVAL        RETENTION            TOPNSQL  ---------- ------------...

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/S...

ORACLE LATCH

LATCH:oracle用于保护内存结构,保证数据在读取的时候,只能由一个会话来完成。   LATCH:轻量级锁,不会造成阻塞,会导致等待。   系统缓慢原因是LATCH: 1. 共享池中LATCH争用 --> 绑定变量;   如果字段上有索引或者字段集较大,不建议用绑定变量   a. 如何绑定变量: declare     i number; begin   for i in 1..1000 loop       insert into t values(i,i+1,i*1,i*2,i-1);   end loop; end;   或者:   declare     i number;     sqlstr varchar2(200); begin   for i in 1..1000 loop        sqlstr:='insert into 测试表 (:i,:i+1,:i*1,:i*2,:i-1) ';       execute immediate sqlstr;   end loop; end; b. 如何判断是否绑定变量:      select substr(sql_text,1,20), count(*)           from v$sqlarea          group by substr(sql_text,1,20) having count(*) > 50;    2. 数据缓冲池LATCH争用 --> 热块...

ORACLE analyze table

Table EXEC DBMS_STATS.gather_table_stats(' <table owner> ', '< table_name> '); Schema exec dbms_stats.gather_schema_stats('<schema name>',DBMS_STATS.AUTO_SAMPLE_SIZE); Database exec dbms_stats.GATHER_DATABASE_STATS(99,CASCADE=>TRUE); If after the gather statistics, still not go index, maybe the problem is the size of SGA.

ORACLE Optimization

Oracle优化器:SQL分析和执行的优化工具,负责制定SQL执行计划。   Oracle优化器类型:RBO(基于规则优化器),CBO(基于代价优化器) 说明:ORACLE10g,RBO被弃用(原因相对单板,不能很好适应实际使用)   CBO工作原理: 1. 通过已有的统计信息,进行分析,然后选择最优的执行计划。 2. 如果没有统计信息,ORACLE采用动态采样的技术。   CBO运行模式: 1. FIRST_ROW(n):    Oracle执行SQL时,有效考虑将结果集中前n条记录最快反馈 --> 分页显示的网站 2. ALL_ROWS:          Oracle执行SQL时,将SQL执行完毕,将全部结果集全部返回 --> OLAP系统   查看: show parameter optimizer_mode;   修改: 1. SQL语句级别 select /*+ first_row(10) */ name from table; select /*+ all_row */ name from table;   2. 修改PFILE参数 alter system set optimizer_mode=rule/choose/first_rows/all_rows;   3. session级别 alter session set optimizer_mode=all_rows; SQL script optimization 1. Generate the explain plan of the sql script; 2. Find out the full scan or large cost; 3. Try to create index or change script to reduce the cost.   No sql change to optimize system W...

ORACLE Optimize SQL

Example 1 original one: update acc_bill b set brand = (      select brand     from user     where serv_id = b.serv_id     ) , plan_id = (     select plan_id      from user     where serv_id = b.serv_id     ) where b.serv_id in (                         select serv_id from user                          ) optimized one: update acc_bill b set brand, plan_id = (select brand, plan_id from user where serv_id = b.serv_id) where b.serv_id in  ( select serv_id from user ) Further optimized one: update ( select a.brand brand_a, a.plan_id plan_id_a, b.brand, b.plan_id from acc_bill b, user a where b.serv_id = a.serv_id ) set brand=brand_a, plan_id=plan_id_a; Example 2 TOP 5 1. latch: cache buffers chains ...

ORACLE lock

锁定类型 : 0:none  1:null 空  2:Row-S 行共享(RS):共享表锁  3:Row-X 行专用(RX):用于行的修改  4:Share 共享锁(S):阻止其他DML操作  5:S/Row-X 共享行专用(SRX):阻止其他事务操作  6:exclusive 专用(X):独立访问使用 数字越大锁级别越高, 影响的操作越多。 如果DML没有提交情况下,另一个session提交针对同一资源的DLL,系统报错。 如果DML没有提交情况下,另一个session提交针对同一资源的DML,第二个session会hang住,等待第一个session。 死锁: 系统会系统自动处理,处理方式提出形成死锁的人,错误是ORA-00060 如果经常出现死锁,可以查看是否有子父表,即是否有某个列是另一个表的外键。 (父表主键是子表的外键)可以考虑在子表的相关列上加索引。 命令行模式处理行级锁 查看锁: select sid,lock_id from dba_locks where blocking_others='Blocking'; select  blocking_session,  sid,  serial#,  wait_class,  seconds_in_wait  from  v$session  where  blocking_session is not NULL  order by  blocking_session; blocking_session: occupied resource session id sid: waiting session id seconds_in_wait: wait for time select sid from v$lock where type='TX'; block列>0:占用资源sid block列=0:等待资源sid SELECT * FROM V$SESSION WHERE BLOCKING_SESSION IS NO...

ORACLE Performance Tuning

Application --> Database Server --> Memory --> Hard Disk Check item: 1. Application code 2. SQL code 3. Contention 4. Memory 5. Disk IO Check Steps: 1. Tune SQL and application code to reduce the logical demand      A. Choose the best data model     B. Reduce the load on the database     C. Tune the SQL statements 2. Eliminate contention points and bottlenecks     A. Avoid contention for locks and latches 3. Configure Memory to avoid as much IO as possible 4. Tune disk IO system to reduce waits for IO Tuning application: 1. Design your tables and indexes     A. Third Normal Form (3NF): "The key, the whole key and nothing bu the key"     B. Primary key: use artificial key instead of natural key     C. Use as less tables as possible      D. Null has significant performance implications:          a. NULLs don't take an...