♣ 题目部分 在Oracle中,SPM(SQL Plan Management,SQL计划管理)是什么? ♣ 答案部分 Outline的缺点是太过死板,当数据量大幅度变化时无法做出相应的改变。...在Oracle 11g中,Oracle提供DBMS_SPM包来管理SQL Plan,SPM是一种预防机制,它记录并评估SQL的执行计划,将已知的高效的SQL执行计划建立为SQL计划基线。...如果SQL改变后的执行计划是安全的,那么SQL就使用新的执行计划,因此,Oracle维护单个SQL执行计划的历史信息,Oracle维护的SQL执行计划的历史仅仅针对重复执行的SQL,SQL计划基线可以手工...(2)成批加载(Manual Plan Loading): 使用DBMS_SPM程序包可以加载SQL计划基线。该程序包支持手动管理SQL计划基线。...在SQL计划基线的演变阶段,Oracle评估新的计划的性能并将性能较好的计划存放在SQL计划基线中,可以使用DBMS_SPM包的EVOLVE_SQL_PLAN_BASELINE过程用户将新的SQL PLAN
随着Oracle数据库版本的不段推进,其CBO的算法、功能也在一直不断进化和增加,所以同样的SQL有可能在新版本的Oralce数据库中执行效率更高,如果我们使用了SQL Profile(特别是使用了Manual...而SPM的推出可以说彻底解决了执行计划稳定性的问题,它既能主动地稳定执行计划,又保留了继续使用新的执行效率可能更高的执行计划的机会。...从上述测试结果可以看出,实际上我们可以轻易地在目标SQL的多个执行计划中切换,所以SPM确实是既能够主动地稳定执行计划,又保留了继续使用新的执行计划的机会,并且我们很容易就能启用新的执行计划。...手工生成目标SQL的SQL Plan Baseline的具体步骤为: 1)针对目标SQL使用DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE手工生成其初始执行计划所对应的SQL...,然后对改写后的SQL使用DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE手工生成新的执行计划所对应的SQL Plan Baseline。
♣ 题目部分 在Oracle中,SPM的使用有哪些步骤?...因为只有标记为ENABLE和ACCEPT的plan才可以被使用。 下面示例将我们的第一个走全表扫描的执行计划标记为fixed。标记为fixed的执行计划会被优先使用。...FIXED表示优化程序仅考虑标记为FIXED的计划,而不考虑其它计划。例如,如果有10个基线计划,其中的三个计划被标记为FIXED,则优化程序将仅使用这三个计划中的最佳计划,而忽略其它所有计划。...如果某个SQL计划基线至少包含一个已启用的已修复计划,则该SQL计划基线就是FIXED的。如果在修复的SQL计划基线中添加了新计划,则在手动将这些新计划声明为FIXED之前,无法使用这些新计划。...fixed,所以优先使用这个执行计划。
而SQL语句的执行 计划则决定了SQL语句将会采用何种方式从数据库提取数据并返回给客户端,本文描述的将是如何通过EXPLAIN PLAN 获取SQL语句执行计划来获 取SQL语句的执行计划。...一、获取SQL语句执行计划的方式 使用explain plan 将执行计划加载到表plan_table,然后查询该表来获取预估的执行计划 查询动态性能视图vsql_plan,vsql_plan_statistics...,v 查询自动工作量资料库(Automatic Workload Repository)或查询Statspack,即从资料库中获取执行计划 启用执行计划跟踪功能,即autotrace功能 使用PL/SQL...Developer提供的获取执行计划方法 使用Toad工具来获取执行计划 二、explain plan工作实质、前提及操作方法 1....工作实质 将SQL语句预估的执行计划加载到表plan_table,是对表plan_table 执行了DML操作,故不会执行隐式提交 可以对select,insert,update,merge,delete
♣ 题目部分 在Oracle中,如何获取SQL历史执行计划?...♣ 答案部分 历史执行计划只能从AWR中获取,如果AWR没有记录的话,那么就无法获取历史执行计划了,获取历史执行计划的命令如下所示: SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR...('&sqlid')); 对于历史计划,可以生成SQL报告,命令如下所示: SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_SQL_REPORT_HTML...下面的例子可以直接从AWR中获取SQL_ID为“bsa0wjtftg3uw”的执行计划,可以看到历史有2种执行计划,一个是全表扫描,一个是索引范围扫描: SYS@RAC2LHR1> SELECT * FROM...本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。
二个oracle instance,如果需要在一个instance上,直接查询另一个instance上的数据,就要用到db-link 创建: create public database link 链接名...CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcltest) ) )'; 这样就创建了一个db-link...,上面的“链接名”、“用户名”、"密码"等参数,大家自己调整一下(注:用户名/密码指连接到另一台instance上的连接用户名/密码) 使用: select * from 表名@链接名; 如果觉得"@
♣ 题目部分 在Oracle中,固定SQL执行计划的方法有哪些?...此时如果更改SQL,那么可能需要重新修改源程序以及重新编译程序。如果修改源程序的成本比较大,那么可以使用一些方法在不改变源应用程序的情况下更改特定SQL的执行计划并固定下来。...因为在SQL语句的执行计划发生更改时,可能存在性能风险。SQL计划发生更改的原因有很多,如优化程序版本、优化程序统计信息、优化程序参数、方案定义、系统设计和SQL概要文件创建等。...有4种方式可以固定和控制执行计划,分别是使用Hint(提示)、OUTLINE(存储概要)、SQL PROFILE(SQL概要文件)和SPM(SQL Plan Management,SQL计划管理),如下表所示...本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。
为了缓解这个问题Oracle 12c推出了SQL指令计划(SQL Plan Directives 以后简称SPD)功能,保存为了以后生成最优执行计划的一些指令和附加信息到字典表中,达到持久化的目的。...SQL计划指令(SPD)的保存 Oracle数据库会自动地维护SQL计划指令(SPD)相关信息。 ?...Oracle的后台进程会每隔15分钟把SQL计划指令(SPD)相关信息从共享池中保存到SYSAUX表空间内相关的字典表中。...当由于扩展统计信息(特别是列组信息)缺失,SQL计划指令(SPD)被使用并且能够解决基数不准确预估的问题的情况时,在下一次统计信息收集时(自动或者手动收集),Oracle会在相应的表上自动创建列组信息。...如果表上创建了相关列组信息,以后的解析中将使用该列组信息,而其相应的SQL计划指令(SPD)会被标记为[SUPERSEDED]不再被使用,并且根据SQL计划指令(SPD)的保存期间进行自动删除。
编者按: 本文作者系Scott(中文名陈晓辉),现任大连华信资深分析师 ,ORACLE数据库专家,曾就职于甲骨文中国。...个人主页:segmentfault.com/u/db_perf ,经其本人授权发布。...今天我们来做一个使用SqlPatch固定执行计划的TEST. 1.做TEST用TABLE. create table tab2(c1 number, c2 number, c3 varchar2(10)...C3"[VARCHAR2,10] 37行 3.通过Hint做成使用Index Scan的SQLPLAN SQL> explain plan for select /*+ index(tab2 ind2...SQL> conn test/test SQL> set lin 120 pages 999 SQL> set autot on explain SQL> select * from tab2 where
--========================================== --使用OEM,SQL*Plus,iSQL*Plus 管理Oracle实例 --================...========================== /* 一、管理组件 Oracle 10g数据库管理包含三个组件,本文主要介绍Database Control,SQL*Plus及iSQL*Plus...使用emca命令来重建EM档案库,关于emca的用户,使用emca -h 来查看详细说明 */ [oracle@robinson scripts]$ emca -config dbcontrol db...三、使用SQL*Plus及iSQL*Plus管理Oracle SQL*Plus及iSQL*Plus同样可以完成Oracle的管理工作,能够通过命令的方式来执行查询,更新,删除等操作 1.SQL*Plus...使用相关账户登陆到到实例,启动数据库,完成相关的管理任务 */ [oracle@robinson scripts]$ sqlplus / as sysdba SQL*Plus: Release
♣ 题目部分 在Oracle中,如何使用STA来生成SQL Profile? ♣ 答案部分 利用STA对语句进行优化后,STA会对语句进行分析,采用最优的优化策略,并给出优化后的查询计划。...这个时候就可以利用Sql Profile,将优化策略存储在Profile中,Oracle在构建这条语句的查询计划时,就不会使用已有相关统计数据,而使用Profile的策略,生成新的查询计划。...第一步:给用户赋权限 [ZHLHRSPMDB2:oracle]:/oracle>sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production...但上述方法主要是依赖sql tuning advisor,如果它无法生成你想要的执行计划.你还可以通过手动的方式,通过sql profile把hint加进去.复杂的SQL的hint可以采用脚本coe_xfr_sql_profile.sql...使用PLSQL DEVELOPER 11查看执行计划,如下图,新版本的好处: ? 本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。
♣ 题目部分 在Oracle中,什么是执行计划? ♣ 答案部分 执行计划指示Oracle如何获取和过滤数据、产生最终结果集,这是影响SQL语句执行性能的关键因素。...在深入了解执行计划之前,首先需要知道执行计划是在什么时候产生的,以及如何让SQL引擎为语句生成执行计划。 在Oracle中,任何一条语句在解析过程中都会生成一个唯一的数值标识,即SQL_ID。...而同一条语句,在解析过程中,可能会因为执行环境的改变(例如某些优化参数被改变)而生成多个版本的游标,不同的游标会有不同的执行计划。...每个游标都会按顺序赋予一个序列号,即CHILD_NUMBER,一条语句生成的第一个游标的CHILD_NUMBER为0;相应的,Oracle会为每个执行计划生成一个HASH值以作区分。...而多个不同版本的游标,其执行计划可能会相同,也可能不同。 本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。
♣ 题目部分 在Oracle中,如何从执行计划初步判断SQL的性能问题?...♣ 答案部分 从以下几点去考虑: l 执行计划关注点 l 预估返回行数 l 真实返回行与逻辑读比率 l 预估行数和真实返回行数的差异 l Predicate Information部分是否有隐式类型转换...A-Time时间列 l 注意Pstart、Pstop、PARTITION RANGE ALL l 注意MERGE JOIN CARTESIAN l 注意REMOTE分布式查询 l 注意动态采样 l 是否使用了某种固定执行计划的策略...,最主要的是找出SQL的性能瓶颈。...本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。
SQL计划管理(SPM)提供了这样一个框架,并允许完全控制计划的演化 。优化器使用SPM自动管理执行计划并且确保已知的和已经验证过的执行计划被使用。...最后一部分提供了如何一步一步使用SPM在一些艰难的任务中比如升级提升数据库和应用的性能。 SQL计划管理 SQL计划管理(SPM)确保运行时性能不会因执行计划更改而降低。...可以通过四种不同的方式手工加载计划,使用dbms_spm包或通过Oracle企业管理器使用的功能(EM)进行配置: SQL Tuning集 游标缓存 AWR资料库(12CR2版本) 从staging表取出...还有一个每周定期清理进程(mmon)管理SPM在SQL管理库中使用的磁盘空间。...可以使用dbms_xplan.display_sql_plan_baseline过程或者ORACLE企业管理器EM去监控所有SQL计划基线的详细执行计划。
张大朋(Lunar)Oracle 资深技术专家 Lunar 拥有超过十年的 ORACLE SUPPORT 从业经验,曾经服务于ORACLE ACS部门,现就职于 ORACLE Sales Consultant...在这个演示过程中,使用SQL Tuning Advisor来进行辅助,在 Oracle 数据库中,SQL Tuning Advisor 的智能化程度可能超过很多人的想象,应该多学习和使用。...首先收集统计信息,再接受建议的执行计划,现在看看 SQL 执行的情况: 这里我们看到,这个执行计划中已经使用了索引,并且逻辑读从49降低为14。...结论:虽然这个SQL的hint中指定了no index,即不使用索引,但是SQL语句仍然按照SYS_SQLPROF_015236655fb80000指定的profile使用了index。...这说明dbms_sqltune.accept_sql_profile方式绑定的执行计划优先级高于hint指定是否使用索引的方式。
上次,将MySQL数据迁移到Oracle介绍了如何使用oracle sql developer连接mysql。同样,sql server的连接也比较相似。 具体也可以点击这里查看。...它的jar使用了jtds,具体可以点击这里查看。 ?...不过,Microsoft发布了sql server jdbc driver 2.0/3.0,他们可以使用于sql server 2005/2008/2008 r2。...是否可以添加sqljdbc4.jar来通过oracle sql developer连接sql server呢?经过测试,目前的oracle sql developer版本无法使用。...这里说明一些使用jtds连接sql server 遇到的问题。
在早期的ELK系统中,常采用Logstash进行日志的采集,但Logstash性能消耗较大,后来就出现了轻量级的Beat模块进行日志或性能数据的采集,这里使用Filebeat进行日志的采集。...Logstash配置文件主要由三部分构成,其中input部分定义kafka的topic,并使用json进行解析,否则将无法得到Filebeat的部分Field数据。...日志整合系统中的kafka和Elasticsearch在面对多个服务日志分析时,如何监控其性能并做出应对就极为必要,这里推荐两个监控管理软件: https://github.com/yahoo/kafka-manager...如果这种探索分析简单,Kibana就足够了,如果要探索分析的数据和行为复杂,就需要用户熟练使用Kibana的图形界面和Elasticsearch提供的DSL语言,在Kibana上逐步地进行探索分析。...系统架构和性能服务团队,目前在Oracle公司数据库研发部门工作。
♣ 题目部分 在Oracle中,如何在不执行SQL的情况下获取执行计划? ♣ 答案部分 1、“EXPLAIN PLAN FOR SQL”不实际执行SQL语句,生成的计划未必是真实执行的计划。.../rdbms/admin/utlxplan.sql”来创建。 2、SQL*Plus的AUTOTRACE功能,命令:SET AUTOTRACE TRACEONLY EXPLAIN。...除SET AUTOTRACE TRACEONLY EXPLAIN外其它的AUTOTRACE方式均实际执行SQL。...但是,如果该命令后执行的是DML语句,那么该DML语句是确实被Oracle实际执行过的。 本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。
首先,通过现有的vm1「在上篇文章 使用KVM创建OEL虚拟机 已创建」克隆出一个vm,名字叫做db1,然后修改一些配置,使其更适用于Oracle DB的主机。...使用virt-manager图形进入终端,修改IP地址之后就可以ssh连接IP地址登陆了,再来配置解决virsh console db1 问题; 1)在 /etc/securetty 文件尾部追加内容...,回车后输入账号密码登录,如果要退出执行 Ctrl+] [root@bogon ~]# virsh console db1 连接到域 db1 换码符为 ^] Oracle Linux Server...running CPU: 2 CPU 时间: 184.7s 最大内存: 2097152 KiB 使用的内存: 2097152 KiB 持久: 是 自动启动: 禁用 管理的保存...running CPU: 4 CPU 时间: 30.1s 最大内存: 16777216 KiB 使用的内存: 16777216 KiB 持久: 是 自动启动: 禁用 管理的保存
Hash Join 是不使用索引等价结合时,最有效的结合方式,所以,使用的机会非常之多。 Hash Join 是在内存中作出 Hash Table 用来存放结合数据。...指定 Hash Join 顺序) SWAP_JOIN_INPUTS Hint(指定 Build 表) NO_SWAP_JOIN_INPUTS Hint(指定 Probe 表) USE_HASH (指定使用...); insert into t2 values (1,2); insert into t3 values (1,3); commit; Case 1: 结合顺序是 A->B(Build 表)->C SQL...C1") Case 3: 结合顺序是 A->C(Build表)->B SQL> select /*+ leading(a c b) USE_HASH(c b) swap_join_inputs(c) *...SQL> select /*+ leading(c b a) USE_HASH(c b) */ * from t1 a, t2 b, t3 c where a.c1=b.c1 and a.c1=c.c1