Oracle - expensive DML operation & 性能如何优化
2013-08-15 10:26
253 查看
提问 如何做数据库优化
1. 硬件和操作系统的影响,内存分配,网速
1. 数据库配置优化,如共享池,数据缓冲区
2. 分析表和索引
3. SQL语句优化,使用binding 减少无必要的hard parse。减少动态SQL的使用。。。
1. index 索引 安排到不同的表空间
2. partition 分区到不同的表空间 - this can reduce I/O blocking to improve throughput
3. 分析ststspack 统计数据
4. Schedule housekeeping job during non-business hours:
(提示,可以写plsql 每100条commit一次。)
This use many minutes to complete. Try to rollback , it spends 61.666 seconds.
1. DB redolog increase
2. DB server memory issue
With sufficient privilege, you can run below SQLs to check memory / DB rubbish if your DML really impacts:
select * from V$MYSTAT;
select * from v$session;
--11-Nov-13 : take notes at HZ
http://space.itpub.net/17203031/viewspace-696917
system OS - top - 进程SID
Oracle -> spid -> sqlText
1. 硬件和操作系统的影响,内存分配,网速
1. 数据库配置优化,如共享池,数据缓冲区
2. 分析表和索引
3. SQL语句优化,使用binding 减少无必要的hard parse。减少动态SQL的使用。。。
1. index 索引 安排到不同的表空间
2. partition 分区到不同的表空间 - this can reduce I/O blocking to improve throughput
create table schema1.test ( msg_id number(12,0) not null enable, ctry_cde varchar2(2) not null enable, msg_type varchar2(20), capture_date date, constraint test_pk primary key (msg_id) using index tablespace "app01s001" --use diff space (for all index) against data space ) enable primary key using index partition by hash (ctry_cde) ( partition "n1" tablespace "app01s011", partition "n2" tablespace "app01s012" --data is in the 2 spaces ) ; --start to create index with no logging mode --about nologging mode, it can save redo log and fast when indexing is BIG, please refer to http://docs.oracle.com/cd/B28359_01/server.111/b28310/indexes002.htm#ADMIN11719 CREATE INDEX SCHEMA1.TEST_MSG_TYPE_IDX ON SCHEMA1.TEST (MSG_TYPE) NOLOGGING TABLESPACE "APP01S001"; CREATE INDEX SCHEMA1.TEST_CAPTURE_DATE_IDX ON SCHEMA1.TEST (CAPTURE_DATE) NOLOGGING TABLESPACE "APP01S002"; alter schema1.test_msg_type_idx rebuild tablespace "APP01S002" nologging;
3. 分析ststspack 统计数据
4. Schedule housekeeping job during non-business hours:
-- Display the existing USER_JOBS SELECT * FROM USER_JOBS; DECLARE jobno NUMBER; BEGIN -- DBMS_JOB to execute PL_DAILY_HOUSEKEEP DBMS_JOB.SUBMIT (JOB => jobno, WHAT => 'BEGIN PK_APP_UTILITY.PL_DAILY_HOUSEKEEP; END;', NEXT_DATE => TRUNC(SYSDATE)+22/24, INTERVAL => 'TRUNC(SYSDATE) + 1 + 22/24'); COMMIT; END; /
(提示,可以写plsql 每100条commit一次。)
This use many minutes to complete. Try to rollback , it spends 61.666 seconds.
insert, delete is expensive which will cause DB performance issue when you are doing BIG data set manipulation . example: insert into app_msg_log_lisa select * from app_msg_log_02 where 1 = 1 and log_key like '%OS%TKY%SAT%%Snd_TKY_RealtimeMessage%' or log_key like '%TKY%SAT%%Rec_TKY_RealtimeMessage%%' or log_key like '%TKY%SAT%%Rec_SSS_%%' --and UTL_RAW.CAST_TO_VARCHAR2(dbms_lob.substr(inpt_msg,2000,1)) like '%3799366%' and capture_ts > to_date('14AUG 08:00','DDMON HH24:MI');--116,707 rows inserted.
1. DB redolog increase
2. DB server memory issue
With sufficient privilege, you can run below SQLs to check memory / DB rubbish if your DML really impacts:
select * from V$MYSTAT;
select * from v$session;
--11-Nov-13 : take notes at HZ
How to improve: | |||||
try1 | build index | ||||
try2 | partition | ||||
try3 | if query view by view(即多张view), materialzied view | ||||
try4 | 限定查询条件 - 近一个月 | ||||
try5 | 分析数据块大小 / 数据表数据量,及时housekeeping |
About how to find the solution? - analysis the DDL, DML SQL |
1. Check the counts of each table |
2. If counts big, check the where clause - any column has no index? |
3. Try to build index for those has no index |
4. Check the application logic, to see if any subsequent aggreate operation. Such as sum() range table, surely cost a lot! |
Oracle数据库服务器CPU占用率很高,通过PID 查找正在执行的sql--转载
http://hi.baidu.com/hlg_fd/item/b8f298d36d079e3ce3108fdc如何诊断和解决CPU高度消耗(100%)的数据库问题
http://www.eygle.com/case/how.to.getsql.which.cost.most.CPU.htmsystem OS - top - 进程SID
Oracle -> spid -> sqlText
相关文章推荐
- 如何使用Oracle中autotrace来实现性能优化
- Java Jdbc减少与Oracle之间交互提升批量处理性能,到底该如何优化才好?
- Java Jdbc减少与Oracle之间交互提升批量处理性能,到底该如何优化才好?
- 如何利用oracle第三方工具做数据库的性能优化
- Oracle PL/SQL编程之如何实现程序来统计另一个程序的性能(接上一篇 优化后)
- 如何优化JavaScript脚本的性能[装载]
- Oracle SQL性能优化
- JQuery each()函数如何优化循环DOM结构的性能
- 简述项目中优化sql的方法,从哪些方面,sql语句性能如何分析?
- Oracle性能优化之统计信息管理_超越OCP精通Oracle视频教程培训32
- 如何进行oracle capability i/o(压力测试数据库服务器i/o性能)
- 让Oracle跑得更快—Oracle 10g性能分析与优化思路
- 如何优化JAVA程序设计和编码,提高JAVA性能
- Oracle性能优化实战 修改版(改正原有测试的指标数据)
- Oracle性能优化 之 库缓存命中率及等待事件
- 如何优化JAVA程序开发,提高JAVA性能?
- APP性能终极优化之如何提高终端适配率
- oracle高水位线及性能优化
- 如何对网页的加载进行性能优化
- oracle性能优化sql注意