ORACLE优化
文章平均质量分 74
道行尚浅
这个作者很懒,什么都没留下…
展开
-
执行计划-CONCATENATION释疑
SQL> set linesize 200SQL> set pagesize 20000SQL> set autotrace traceSQL> create table dao_objects as select * from dba_objects ;Table created.SQL> create index idx_obj_id on dao_object原创 2017-07-17 19:40:54 · 1632 阅读 · 0 评论 -
移柱换梁-使用outlines优化前端语言内嵌SQL
1 创建两个outline bad_outline 是当前垃圾执行计划 good_outline 是加入提示后正确的执行计划SQL> create outline bad_outline on select * from emp e, dept d where e.deptno=d.deptno ;Outline created.SQL> create outline原创 2014-12-03 11:52:00 · 947 阅读 · 1 评论 -
跟着官方文档学HINT(三)优化器特性
SQL> show parameter optimizer_features_enable NAME TYPE VALUE------------------------------------ ----------- ------------------------------optimizer_fea原创 2014-10-31 23:33:04 · 820 阅读 · 4 评论 -
使用sysbench对Oracle做基准测试(五) MEMORY
[root@localhost sysbench]# sysbench --test=memory help sysbench 0.5: multi-threaded system evaluation benchmarkmemory options: --memory-block-size=SIZE size of memory block for test [1K]原创 2014-10-20 10:21:50 · 1432 阅读 · 0 评论 -
使用sysbench对Oracle做基准测试(三) THREADS
sysbench threads的测试--感觉这个测试的是操作系统内核的效率。--测试大致思想就是创建一些线程并把它放到执行队列中去 ,--每个线程发出request request内容大体是申请mutex -yield-释放mutex --test=threads --指明测试内容为tread--num-threads=20 --创建多少个进原创 2014-10-19 14:58:28 · 1751 阅读 · 0 评论 -
使用sysbench对Oracle做基准测试(二) CPU
./sysbench --test=cpu --指明要测试的是CPU--cpu-max-prime --最大的素数--max-requests=20 --最大的请求次数,--max-time=20 --最长允许执行时间,这只是一个软阀值[root@localhost sysbench]# ./sysbench --test=cpu --cpu-max-prime=原创 2014-10-19 10:19:30 · 2721 阅读 · 0 评论 -
使用sysbench对Oracle做基准测试(四) MUTEX
--num-threads --进程的数量--mutex-num --mutex的数量--mutex-locks --每次请求的mutex lock的数量--mutex-loops --申请lock之前执行ok那个循环的次数[root@localhost sysbench]# ./sysbench --test=mutex --num-threads=12 --mutex-nu原创 2014-10-19 15:46:38 · 817 阅读 · 0 评论 -
跟着官方文档学HINT(六)连接顺序
--LEADING 指定生成的执行计划的驱动表SQL> SELECT * 2 FROM DEPT D, DAO_OBJECT1 DO, EMP E 3 WHERE D.DEPTNO = DO.OBJECT_ID 4 AND E.DEPTNO = D.DEPTNO;14 rows selected.Execution Plan------------原创 2014-11-03 20:54:38 · 851 阅读 · 1 评论 -
跟着官方文档学HINT(五)关联方式
--USE_MERGE 建议优化器将连接方式改为SORT MERGE JOINSQL> select * 2 from emp e ,dept d 3 where e.deptno=d.deptno ;14 rows selected.Execution Plan------------------------------------------------原创 2014-11-03 20:51:48 · 776 阅读 · 4 评论 -
快速收集ASH性能报告的脚本
declarebegin_time_date date := to_date('20141109 15:00:00', 'yyyymmdd hh24:mi:ss') ;end_time_date date := to_date('20141109 19:00:00', 'yyyymmdd hh24:mi:ss') ;interval_minutes number := 60 ;b原创 2014-11-10 09:49:14 · 1003 阅读 · 2 评论 -
快速收集AWR性能报告的脚本
declarebegin_time_date date := to_date('20141109 15:00:00', 'yyyymmdd hh24:mi:ss') ;end_time_date date := to_date('20141109 19:00:00', 'yyyymmdd hh24:mi:ss') ;begin dbms_output.put_line('set原创 2014-11-10 09:48:24 · 1084 阅读 · 3 评论 -
10053 事件浅析
1 session 级别设置eventSQL> ALTER SESSION SET EVENTS='10053 trace name context forever, level 1';Session altered.2 执行语句SQL> select /*+10053 test*/* 2 from dao_objects1 t1 ,dao_objects2 t2原创 2015-12-06 21:12:53 · 2633 阅读 · 0 评论 -
Direct Path Insert与 enq:TM
Direct Path Insert - APPEND HINT and TM Enqueue LOCK Behaviour (文档 ID 1317447.1)文档 1317447.1In this Document Symptoms Changes Cause So翻译 2015-09-24 10:10:25 · 641 阅读 · 0 评论 -
ORACLE SQL语句与所级别阻塞
数据库中常用功能无外乎增、删、改、查。我们来讨论下各种语句在并发上的表现单就表考虑:SELECT: 只查不改,基本无法阻止只有权限可以阻止INSERT: 表级独占锁可以阻塞UPDATE、DELETE 行级锁就可以阻塞 但是在表上加上索引以后情况会发生些许改变SQL> create table test_insert (c1 number pr原创 2015-11-09 10:41:49 · 1115 阅读 · 0 评论 -
V$SQLAREA
v$SQLAREA 是一张描述shared pool 父游标信息的视图。其含义为ColumnDatatypeDescription含义SQL_TEXTVARCHAR2(1000)First thousand characters of the SQL text for the current cursorSQL语句前1000字符原创 2015-09-28 22:53:54 · 4153 阅读 · 0 评论 -
队列阻塞及描述
select ven.EVENT#, ven.EVENT_ID, ven.NAME, ven.WAIT_CLASS_ID, ven.WAIT_CLASS, ves.EQ_NAME, ves.EQ_TYPE, ves.REQ_REASON, ves.REQ_REASON from v$原创 2015-07-12 11:11:23 · 2370 阅读 · 0 评论 -
Interpreting HANGANALYZE trace files to diagnose hanging and performance problems for 9i and 10g. (文
文档 215858.1PURPOSEThis article explains how to use the HANGANALYZE utility to diagnose hanging issues in Oracle Databases.本文解释了如何使用HANGANALYZE 以诊断Oracle数据中的hang问题。BACKGROUND翻译 2015-06-23 16:17:35 · 697 阅读 · 1 评论 -
脚本-查看当前活动session 信息
select t2.sid, t1.PID, t1.SPID, t3.SQL_ID, t2.EVENT, t2.P1, t2.P1TEXT, t2.p2, t2.P2TEXT, t2.p3, t2.P3TEXT,原创 2015-06-22 09:30:08 · 1089 阅读 · 0 评论 -
使用反CASE思想,改写SQL
下面是自己写的一个小样,只是说说原理。真实SQL比这个要复杂些,但是处理方法相同。1建表SQL> create table test_case_anti 2 as 3 select sysdate+1/24/60 d1, sysdate-356+1/24/60 d2, 1 d3 4 from dual 5 where 1=2 ;T原创 2015-06-16 21:37:36 · 697 阅读 · 0 评论 -
跟着官方文档学HINT(-)测试表准备
测试表我选择了比较有名的两张表scott.empscott原创 2014-10-31 22:27:18 · 933 阅读 · 0 评论 -
跟着官方文档学HINT(二)优化器模式
默认优化器模式为 ALL_ROWSSQL> show parameter optimizer_mode NAME TYPE VALUE------------------------------------ ----------- ------------------------------optimiz原创 2014-10-31 23:04:48 · 771 阅读 · 2 评论 -
使用dbms_stats.export导出统计信息
1 使用 dbms_stats.create_stat_table 创建统计信息表原创 2014-06-30 22:36:37 · 1304 阅读 · 2 评论 -
获得执行计划方法-一 ORACLE AUTOTRACE
AUTOTRACE 命令1 SET AUTOTRACE OFF 此为默认值,即关闭Autotrace2 SET AUTOTRACE ON 产生结果集和解释计划并列出统计3 SET AUTOTRACE ON EXPLAIN 显示结果集和解释计划不显示统计4 SETAUTOTRACE T原创 2014-06-30 20:30:53 · 801 阅读 · 5 评论 -
使用DBMS_STATS.restore 恢复统计信息
我们可以恢复之前的统计信息,生成原本的执行计划原创 2014-06-30 22:16:42 · 660 阅读 · 2 评论 -
利用DBMS_STATS包修改统计信息,欺骗优化器,生成糟糕的执行计划
在使用基于成本的优化器的优化器时,优化器生产执行计划时要估算每条SQL的执行成本,选择最佳的执行计划来执行sql语句。通过操纵统计信息就可以简介操纵执行计划的生成。当然 需要强调的一点是,这是非常危险的行为原创 2014-06-30 22:11:23 · 710 阅读 · 1 评论 -
获得执行计划方法六-dbms_xplan.diskplay_cursor
当我们知道一个SQL语句的sql_id后,可以通过使用dbms_xplan.diskplay_cursor方法来获取执行计划。FUNCTION DISPLAY_CURSOR RETURNS DBMS_XPLAN_TYPE_TABLE Argument Name Type In/Out Default? ------原创 2014-06-30 21:40:29 · 660 阅读 · 1 评论 -
获得执行计划方法五-10053事件
_optimizer_dim_subq_join_sel = true _optimizer_disable_strans_sanity_checks = 0 _optimizer_compute_index_stats = true _push_join_union_view2 = true _optimizer_igno原创 2014-06-30 21:34:59 · 1169 阅读 · 1 评论 -
获得执行计划方法四-使用10046事件
我们也可以通过设置10046事件来进行SQL跟踪,并且可以设置不同的跟踪级别,比使用SQL_TRACE获得更多的信息。10046事件不但可以跟踪用户会话(trace文件位于USER_DUMP_DEST ),也可以跟踪background进程(trace文件位于BACKGROUND_DUMP_DEST )。trace文件的大小决定于4个因素:跟踪级别,跟踪时长,会话的活动级别和MAX_DUM原创 2014-06-30 21:30:34 · 1370 阅读 · 1 评论 -
获得执行计划方法二-explain plan
EXPLAIN PLAN###############################################################################################1 安装$ORACLE_HOME/rdbms/admin/utlxplan.sql (UNIX) 脚本生成一个表这个程序会创建一个名为plan_table的表2原创 2014-06-30 21:25:27 · 818 阅读 · 1 评论 -
使用dbms_stats.export导入统计信息
1 破环现有统计信息SQL> BEGIN 2 dbms_stats.set_table_stats(ownname =>'DAO',tabname => 'TEST_STATS',numrows => 1,numblks => 1); 3 END ; 4 /2 ch原创 2014-06-30 22:41:28 · 711 阅读 · 2 评论 -
使用sysbench对Oracle做基准测试(-) 安装篇
sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。数据库目前支持MySQL/Oracle/PostgreSQL。原创 2014-10-14 16:21:03 · 7417 阅读 · 4 评论 -
Mysql热备增量备份与恢复(三)--全备+增量1恢复
1 对于全备的恢复[mysql@server ~]$ innobackupex --no-timestamp --defaults-file=/etc/my.cnf --apply-log --redo-only /home/mysql/db_full_20141103/InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 200原创 2014-11-14 11:56:21 · 1020 阅读 · 0 评论 -
跟着官方文档学HINT(四)访问路径
FULLSQL> select * from test_skip_scan where uniq=888 ; Execution Plan----------------------------------------------------------Plan hash value: 1582535247-----------------------------------原创 2014-11-02 10:21:30 · 892 阅读 · 1 评论 -
使用sysbench对Oracle做基准测试(六) FILEIO
--test=fileio 测试类型为fileio--file-num=256 测试文件数量 --file-block-size=8K 每个块大小--file-total-size=2G 测试文件总大小--file-test-mode=rndrw 测试模式 --测试前准备[root@localhost sysb原创 2014-10-24 22:31:19 · 1174 阅读 · 0 评论 -
快速收集ADDM性能报告的脚本
declarebegin_time_date date := to_date('20141109 15:00:00', 'yyyymmdd hh24:mi:ss') ;end_time_date date := to_date('20141109 19:00:00', 'yyyymmdd hh24:mi:ss') ;begin dbms_output.put_line('set原创 2014-11-10 09:50:02 · 1305 阅读 · 2 评论 -
一次简单性能诊断过程
客户每月第N天一个批量程序突然原创 2014-09-09 11:45:14 · 1093 阅读 · 3 评论 -
ORACLE11G优化器对full Outer join 的加强
SQL> alter system set optimizer_features_enable ='10.2.0.2' scope=memory ;System altered.SQL> set autotrace trace SQL> set pagesize 200SQL> set linesize 200SQL> select * 2原创 2014-08-21 23:03:06 · 1855 阅读 · 4 评论 -
SQL优化一例,由于动态性能视图统计信息不准确引起的查询缓慢
某库查询锁相关信息语句如下原创 2014-07-30 17:42:42 · 863 阅读 · 3 评论 -
获得执行计划方法三-sql_trace
SQL> alter session set sql_trace=true ;Session altered.SQL> select * from scott.emp ; EMPNO ENAME JOB MGR HIREDATE SAL COMM---------- ---------- -----原创 2014-06-30 21:27:19 · 1112 阅读 · 1 评论