- 浏览: 7942960 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
1 锁和阻塞
1) 当一个表有主键唯一时,一个会话在更新后,如果没COMMIT,另外一个会话也出更新
,则会发生死锁
2)查看:
select sid,type,id1,id2,lmode,request,block from v$lock where sid in
(xxx,yyy) order by sid;
其中block列=1表示这个会话正在阻塞另外一个会话;request中的值表示当前会话正
在等待另外一个lmode=XX
的锁
通过SID,可以查询出锁定的用户信息
select machine from v$session where sid in (xx,yyy0;
3)当一个表有若干分区或段的时候,每个都会加上TM表锁,比如一个表某个段加了TM
锁,则不能在其上进行DDL操作,但可以在其他分区段上进行。
4)可以通过select ...for update里阻挡另外的会话对其进行修改
5)主从表的关联查询情况,从表上的外键应该创建索引
2 LATCH和等待
当一个数据块正在被一个会话从磁盘中读到内存中时,如果另外一个会话也要读取
,则必须有机制来处理,
可以把latch理解为轻量级的锁,不会造成阻塞只会导致等待。
1)共享池中的latch争用
如果有大量的SQL被反复分析,就会造成大的latch争用
select * from v$latchname where name like 'library cache%'
2) 访问频率很高的数据块被称为热块,很多用户一起访问时,导致latch争用
当一个会话需要访问一个内存块,先要去象链表一样的结构去搜索这个数据快是否
在内存中;
当一个会话需要访问一个数据块,而这个数据块正在被另外一个用户从磁盘读取到内存中
或者正在被会话修改时,当前的会话需要等待,就产生buffer busy waits等待
A 表数据块
对于一些小表,如果频繁修改,则变成热块,可以考虑将表数据分布在更多的数据
块上,减少
数据块被多数会话同时访问的频率
alter table minimize records_per_block;
但会降低数据读取的性能
B 索引数据块
在RAC中,如果表的主键用序列递增,则多用户在RAC的不同实例中插入时,
会出现相同索引数据块在不同实例的内存中被调用,形成争用,可以使用反向索引;但会
降低性能,在范围查询时要走全表扫描
C 索引根数据块
热块可能发生在索引的根数据块中,可以把索引创建为分区索引时,索引的
根数据块会分布到更多的数据块中。
D 段头数据块
ASSM,让oracle自动管理"free lists",所谓的free lists,是每个数据段的段头
有几个free list列表,存放哪些数据块可以用,当数据块的数据达到一个比例
(pct_free)时,数据块就会从free list中删除,这个数据块不能再插入数据。
3 优化器
10G中,使用CBO(基于代价的),不用RBO(基于规则的)
当没做表分析时,会动态采样分析统计的信息,只发生在第一次,后续的不再使用
动态分析,而使用第一次硬分析时生成的计划。
CBO两种运行模式
1)first_rows(n)
2)all_rows
first_rows(n):优先返回结果集中的前n条记录以最快速度反馈回来
all_rows:意味将用最快的速度将SQL执行完,将结果集全部返回。
先创建plan_table 表
SQL>@%oracle_home%/rdbms/admin/utlxplan.sql
授权
SQL>@%oracle_home%/sqlplus/admin/plustrce.sql
这样普通用户不能用
所以要授权普通用户对 plan_table 表
SQL>conn / as sysdba
SQL>create public synonym plan_table for plan_table;
SQL>grant all on plan_table to public;
开启查询计划
SQL>set autotrace on --显示执行计划和统计信息
SQL>set autotrace on explain --只显示执行计划
SQL>set autotrace on statistics --只显示统计信息
SQL>set autotrace traceonly --同autotrace on,但不显示查询结果
SQL>set autotrace off --关闭autotrace
select /*+ dynamic_sampling(t 0) */ * from t where ...
/*+ dynamic_sampling(t 0) */ 禁止表用动态采样查询
要注意的是,在对数据UPDATE或更新后,如果不对表进行分析,表中的分析
数据CBO的,还是旧的信息,要对表进行更新。
在用explain plan for ...SQL语句后
如果发现predicate information中:
filter:类别的,表示谓词的条件值不会影响数据访问路径,只起到筛选作用;
而
access:表示谓词的条件值会影响访问路径,比如是用索引还是全表扫描。
记得如果表分析过,但数据变了,而没重新分析,则会导致错误的执行计划;
4 HINT
如果在表中指定了别名,则hint中也要使用别名,否则CBO会忽略
select /*+ full(a) */ count(*) from t a;
系统级别设置优化器:
alter session(system) set optimizer_mode=all_rows;
代码中设定:
select /*+ first_rows(20) */ * from xxxxx;
select /*+ all_rows */ * from t where id<20;
1) full hint:指定全表扫描
select /*+ full(t) */ * from t;
2)index hint,对指定的表进行扫描
select /*+ index(t t_ind)*/ * from ......;
3)不使用索引
select /*+ no_index(t t_ind)*/ * from ....
4)index_desc hint:指定索引降序
5)使用位图索引
index_combine(t t_bm)
6) index_ss_hint:当在一个联合索引中的第一列的重复率很低时,可以使用index
skip scan,效率比全表扫描高;但如果很多重复,则要用全表扫描好
7)select /*+ leading(t1,t) */,指定在多表关联时,用哪个表作为驱动表。
8)select /*+ DRIVING_SITE(departments) */ * from
employees,departments@rsite where employees.xxx=departmes.yyy
如果远端机器的departmes查询结果很大,或者本地的employess查询结果很小,
并且两者关联的结果集很小,那么可以考虑把本地的数据发送到远端,在远端执行后,再
返回给本地,速度快点
5 分析及动态采样
dbms_stats对表的分析三个层次:
1)表自身的分析,包括表中的行数,数据块行数,行长等信息
2)列的分析 3)索引的分析
dbms_stats:性能数据收集,设置,性能数据的删除,性能数据的备份和恢复
3)exec dbms_stats.gather_table_name(user,'t');
user是个变量,用来返回当前用户的信息。
4)一些重要的参数:
Estimate_percent:用多大百分比的数据来分析
FOR ALL COLUMNS:对所有的列分析
degree:使用并行度分析
granularity:分析的粒度,
例子:
exec dbms_stats.gather_table_stats(user,'t',granularity=>'GLOBAL');
如果在表分区中,新增或修改的分区,只对分区分析,没对表分析,CBO执行计划也是
错的;
5)exec dbms_stats.set_table_stats(user,'t',numrows=>10000);
//将表的记录数修改为10000条,这样CBO可以看到。
6)动态采样:有11个级别,OLTP下不应该采用动态采样,而OLAP中,可以将动态采样
的级别
设置为3或者4
6 并行和执行
1) oracle创建并行执行协调进程,将要处理的数据集分块给不同的协调进程去
处理,最后处理完后,再将每个小的集合和并为大的集合,返回给用户。
在OLAP中,并行常用,OLTP中因为多用索引,所以很少用并行。
2)当启动的时候,实例化参数
parallel_min_servers=n个进程
有时,会启动2*N个进程进行服务,比如order by时,一部分N个进程扫描,N个排序
3)在10G中,px deq credit:send blkd等待事件已不在列为空闲等待事件
其意思为:当并行服务进程向并行协调进程发 送消息时,同一时间
只有一个并行服务进程可以向上层进程发送消息,如果有其他进程也要发送,则只能等待
在那里,默认为2秒。如果太多的并行服务进程,则会有等待出现。
4)并行查询
select /*+ parallel(t 4) */........
5) 创建表或查询时,都可以用并行查询,比如
create index t_ind on t(id) parallel 4
6)并行对DML的操作中,只有操作对象为分区表时,才启用操作
7)insert /*+ parallel(t 4) */ into t select /*+ parallel(t1 4) */ from t1;
parallel_min_percent:
为一个百分数,比如设置为50,当一个SQL需要申请20个并行服务进程时,如果当前
不满足,则额外申请20*50%=10个并行服务进程
9)并行度除了通过hint指定外,可以通过
alter table t parallel 4去设置
10)直接加载可以跟并行一起执行:
insert /*+ append parallel(t,2) */ into t select * from t1;
11)直接加载使用sql loader,可以绕开解析和解析到数据缓冲区
sqlldr userid=test/aaaa control=t.ctl direct=true log=log.txt
还可以直接加载时使用并行
sqlldr userid=test/aaaa control=t.ctl direct=true parallel=true
log=log.txt
如果sql loader的并行直接加载,而且表上有索引,将导致加载失败,
但可以通过设置选项 skip_index_maintenance=true来完成加载,
索引会变成unusable,需要手工rebuild
1) 当一个表有主键唯一时,一个会话在更新后,如果没COMMIT,另外一个会话也出更新
,则会发生死锁
2)查看:
select sid,type,id1,id2,lmode,request,block from v$lock where sid in
(xxx,yyy) order by sid;
其中block列=1表示这个会话正在阻塞另外一个会话;request中的值表示当前会话正
在等待另外一个lmode=XX
的锁
通过SID,可以查询出锁定的用户信息
select machine from v$session where sid in (xx,yyy0;
3)当一个表有若干分区或段的时候,每个都会加上TM表锁,比如一个表某个段加了TM
锁,则不能在其上进行DDL操作,但可以在其他分区段上进行。
4)可以通过select ...for update里阻挡另外的会话对其进行修改
5)主从表的关联查询情况,从表上的外键应该创建索引
2 LATCH和等待
当一个数据块正在被一个会话从磁盘中读到内存中时,如果另外一个会话也要读取
,则必须有机制来处理,
可以把latch理解为轻量级的锁,不会造成阻塞只会导致等待。
1)共享池中的latch争用
如果有大量的SQL被反复分析,就会造成大的latch争用
select * from v$latchname where name like 'library cache%'
2) 访问频率很高的数据块被称为热块,很多用户一起访问时,导致latch争用
当一个会话需要访问一个内存块,先要去象链表一样的结构去搜索这个数据快是否
在内存中;
当一个会话需要访问一个数据块,而这个数据块正在被另外一个用户从磁盘读取到内存中
或者正在被会话修改时,当前的会话需要等待,就产生buffer busy waits等待
A 表数据块
对于一些小表,如果频繁修改,则变成热块,可以考虑将表数据分布在更多的数据
块上,减少
数据块被多数会话同时访问的频率
alter table minimize records_per_block;
但会降低数据读取的性能
B 索引数据块
在RAC中,如果表的主键用序列递增,则多用户在RAC的不同实例中插入时,
会出现相同索引数据块在不同实例的内存中被调用,形成争用,可以使用反向索引;但会
降低性能,在范围查询时要走全表扫描
C 索引根数据块
热块可能发生在索引的根数据块中,可以把索引创建为分区索引时,索引的
根数据块会分布到更多的数据块中。
D 段头数据块
ASSM,让oracle自动管理"free lists",所谓的free lists,是每个数据段的段头
有几个free list列表,存放哪些数据块可以用,当数据块的数据达到一个比例
(pct_free)时,数据块就会从free list中删除,这个数据块不能再插入数据。
3 优化器
10G中,使用CBO(基于代价的),不用RBO(基于规则的)
当没做表分析时,会动态采样分析统计的信息,只发生在第一次,后续的不再使用
动态分析,而使用第一次硬分析时生成的计划。
CBO两种运行模式
1)first_rows(n)
2)all_rows
first_rows(n):优先返回结果集中的前n条记录以最快速度反馈回来
all_rows:意味将用最快的速度将SQL执行完,将结果集全部返回。
先创建plan_table 表
SQL>@%oracle_home%/rdbms/admin/utlxplan.sql
授权
SQL>@%oracle_home%/sqlplus/admin/plustrce.sql
这样普通用户不能用
所以要授权普通用户对 plan_table 表
SQL>conn / as sysdba
SQL>create public synonym plan_table for plan_table;
SQL>grant all on plan_table to public;
开启查询计划
SQL>set autotrace on --显示执行计划和统计信息
SQL>set autotrace on explain --只显示执行计划
SQL>set autotrace on statistics --只显示统计信息
SQL>set autotrace traceonly --同autotrace on,但不显示查询结果
SQL>set autotrace off --关闭autotrace
select /*+ dynamic_sampling(t 0) */ * from t where ...
/*+ dynamic_sampling(t 0) */ 禁止表用动态采样查询
要注意的是,在对数据UPDATE或更新后,如果不对表进行分析,表中的分析
数据CBO的,还是旧的信息,要对表进行更新。
在用explain plan for ...SQL语句后
如果发现predicate information中:
filter:类别的,表示谓词的条件值不会影响数据访问路径,只起到筛选作用;
而
access:表示谓词的条件值会影响访问路径,比如是用索引还是全表扫描。
记得如果表分析过,但数据变了,而没重新分析,则会导致错误的执行计划;
4 HINT
如果在表中指定了别名,则hint中也要使用别名,否则CBO会忽略
select /*+ full(a) */ count(*) from t a;
系统级别设置优化器:
alter session(system) set optimizer_mode=all_rows;
代码中设定:
select /*+ first_rows(20) */ * from xxxxx;
select /*+ all_rows */ * from t where id<20;
1) full hint:指定全表扫描
select /*+ full(t) */ * from t;
2)index hint,对指定的表进行扫描
select /*+ index(t t_ind)*/ * from ......;
3)不使用索引
select /*+ no_index(t t_ind)*/ * from ....
4)index_desc hint:指定索引降序
5)使用位图索引
index_combine(t t_bm)
6) index_ss_hint:当在一个联合索引中的第一列的重复率很低时,可以使用index
skip scan,效率比全表扫描高;但如果很多重复,则要用全表扫描好
7)select /*+ leading(t1,t) */,指定在多表关联时,用哪个表作为驱动表。
8)select /*+ DRIVING_SITE(departments) */ * from
employees,departments@rsite where employees.xxx=departmes.yyy
如果远端机器的departmes查询结果很大,或者本地的employess查询结果很小,
并且两者关联的结果集很小,那么可以考虑把本地的数据发送到远端,在远端执行后,再
返回给本地,速度快点
5 分析及动态采样
dbms_stats对表的分析三个层次:
1)表自身的分析,包括表中的行数,数据块行数,行长等信息
2)列的分析 3)索引的分析
dbms_stats:性能数据收集,设置,性能数据的删除,性能数据的备份和恢复
3)exec dbms_stats.gather_table_name(user,'t');
user是个变量,用来返回当前用户的信息。
4)一些重要的参数:
Estimate_percent:用多大百分比的数据来分析
FOR ALL COLUMNS:对所有的列分析
degree:使用并行度分析
granularity:分析的粒度,
例子:
exec dbms_stats.gather_table_stats(user,'t',granularity=>'GLOBAL');
如果在表分区中,新增或修改的分区,只对分区分析,没对表分析,CBO执行计划也是
错的;
5)exec dbms_stats.set_table_stats(user,'t',numrows=>10000);
//将表的记录数修改为10000条,这样CBO可以看到。
6)动态采样:有11个级别,OLTP下不应该采用动态采样,而OLAP中,可以将动态采样
的级别
设置为3或者4
6 并行和执行
1) oracle创建并行执行协调进程,将要处理的数据集分块给不同的协调进程去
处理,最后处理完后,再将每个小的集合和并为大的集合,返回给用户。
在OLAP中,并行常用,OLTP中因为多用索引,所以很少用并行。
2)当启动的时候,实例化参数
parallel_min_servers=n个进程
有时,会启动2*N个进程进行服务,比如order by时,一部分N个进程扫描,N个排序
3)在10G中,px deq credit:send blkd等待事件已不在列为空闲等待事件
其意思为:当并行服务进程向并行协调进程发 送消息时,同一时间
只有一个并行服务进程可以向上层进程发送消息,如果有其他进程也要发送,则只能等待
在那里,默认为2秒。如果太多的并行服务进程,则会有等待出现。
4)并行查询
select /*+ parallel(t 4) */........
5) 创建表或查询时,都可以用并行查询,比如
create index t_ind on t(id) parallel 4
6)并行对DML的操作中,只有操作对象为分区表时,才启用操作
7)insert /*+ parallel(t 4) */ into t select /*+ parallel(t1 4) */ from t1;
parallel_min_percent:
为一个百分数,比如设置为50,当一个SQL需要申请20个并行服务进程时,如果当前
不满足,则额外申请20*50%=10个并行服务进程
9)并行度除了通过hint指定外,可以通过
alter table t parallel 4去设置
10)直接加载可以跟并行一起执行:
insert /*+ append parallel(t,2) */ into t select * from t1;
11)直接加载使用sql loader,可以绕开解析和解析到数据缓冲区
sqlldr userid=test/aaaa control=t.ctl direct=true log=log.txt
还可以直接加载时使用并行
sqlldr userid=test/aaaa control=t.ctl direct=true parallel=true
log=log.txt
如果sql loader的并行直接加载,而且表上有索引,将导致加载失败,
但可以通过设置选项 skip_index_maintenance=true来完成加载,
索引会变成unusable,需要手工rebuild
发表评论
-
mybatis generator中的字段大小写生成问题
2017-10-22 19:35 11402mybatis generator插件中,如果 mysql数据 ... -
MySQL统计一个列中不同值的数量
2017-07-11 14:04 16290https://yiqiwuliao.com/post/mys ... -
mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
2017-03-02 09:44 1799权限问题,授权 给 root 所有sql 权限 mysql ... -
几个不错的MYSQL 优化TIPS
2016-11-19 12:30 816图片来自http://imysql.com/的PDF分享 [ ... -
powerdesign 逆向ORACLE的坑
2016-09-27 17:08 573要注意的是,在WIN 64中,如果要用powerdesin 来 ... -
( 转)mysql中删除两条重复记录中的一条
2015-10-19 20:19 1335| id | createTime | labId | pub ... -
mysql中sql语句=,>的时候的索引设置
2015-05-02 12:27 1312在 https://www.percona.com/blog/ ... -
mysql中profile的使用
2015-04-30 11:11 2236mysql 的 sql 性能分析器主要用途是显示 sql 执行 ... -
mysql中的sql mode
2015-04-13 11:29 1159mysql sql mode小结 1 sql mode可以 ... -
PROCEDURE ANALYSE()为mysql提高性能提供建议
2015-04-02 16:37 1475procedure analyse();语法如下 select ... -
mongodb中意外退出的问题
2015-02-11 14:32 1342mongodb启动的时候,意外退出: Unclean shut ... -
mysql 5.5中保留字查询
2014-06-05 23:16 1491mysql 5.5中保留字查询 http://www.5is ... -
(转)oracle 临时表空间的增删改查
2014-03-18 12:44 1149oracle 临时表空间的增删改查 1、查看临时表空间 (d ... -
pl-sql developer安装
2014-02-07 09:16 1135一直都是机器本机上有oracle,所以装pl sql deve ... -
oracle中的nvl,nvl2等参数
2013-12-26 11:18 22871.nul函数将一个null值转换为一个实际的值。 数据类型可 ... -
Oracle中的ROWNUM rowid 以及MySQL中实现rownum功能类似的语句
2013-12-26 11:08 2366http://gong-10140.iteye.com/blo ... -
ORACLE XE版本的限制
2013-12-07 08:11 367710g中用户数据最大为4G, 11G中最大为11G,如果超出大 ... -
oracle中监控索引是否可用
2013-11-04 07:22 1086在oracle中,可以使用如下的方法监控索引是否可用: a ... -
mysql 5.6中的时间类型的新精度介绍
2013-10-28 09:33 8420留意到mysql 5.6中,可以使用select now(6) ... -
<<oracle索引技术》读书笔记1
2013-08-25 16:23 1331expert indexing in oracle datab ...
相关推荐
<br> <br> 下载包括<br> <br> Oracle Developer Tools for Visual Studio .NET 2003 10.2.0.2.20 <br><br> Oracle Developer Tools for Visual Studio 2005 10.2.0.2.20 <br><br> Oracle Data Provider for .NET 1....
<artifactId>ojdbc6</artifactId> <version>11.2.0.1.0</version> </dependency> 1.首先确定你是否有安装oracle,如果有安装的话,找到ojdbc6.jar包 D:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib\...
“让Oracle跑得更快2:基于海量数据的数据库设计与”这一主题,正是聚焦于解决这一问题,旨在通过合理的数据库设计和性能优化策略,提升Oracle在处理大规模数据集时的效率。 ### 一、海量数据处理 海量数据处理的...
<br><br>Oracle Database 10g Insider Solutions <br><br>Oracle Database 10g 内部解决方案<br><br><br>by Arun Kumar , John Kanagaraj , Richard Stroupe <br><br>Publisher: Sams Publishing<br><br>对Oracle...
《让Oracle跑得更快:Oracle 10g性能分析与优化思路》PDF版本下载
标题和描述均指向一个主题:“让Oracle跑得更快”,这显然是一份专注于提升Oracle数据库性能的资料。Oracle作为全球领先的关系型数据库管理系统之一,其性能优化对于提高数据处理速度、增强系统响应能力和确保业务...
sql fundament 读书笔记 oracle 原厂 培训 金领DBA
让Oracle跑得更快2基于海量数据的数据库设计与优化
<artifactId>sdoapi</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>com.example</groupId> <artifactId>sdoutl</artifactId> <version>1.0</version> </dependency> </...
Oracle数据库分区和压缩技术应用——让Oracle跑得更快.pdf
<br>系统设计<br> 1 jive设计思路 <br> 2 jive的工作内幕 <br> 3 Jive源代码研究 <br> 4 Jive中的设计模式 <br> 5 jive学习笔记 <br><br><br> <br>设计模式<br> 1 大道至简-Java之23种模式一点就通 <br> 2 设计模式...
北大青鸟第二学年4.0 Y2所有资料 一<br><br>我已经把第二学年所有的课件打包在一起了,一共有5部分,这是第一部分<br><br>大家下载时要记得评分,这样你们就不要资源分了<br><br>Struts&& JSF<br><br>Oracle<br><br>...
北大青鸟第二学年4.0 Y2所有资料 三<br><br>我已经把第二学年所有的课件打包在一起了,一共有5部分,这是第 三部分<br><br>大家下载时要记得评分,这样你们就不要资源分了<br><br>Struts&& JSF<br><br>Oracle<br><br>...
让Oracle跑得更快基于海量数据的数据库设计与优化].谭怀远.第2版
<artifactId>httpclient</artifactId> <version>4.5.10</version> </dependency> <dependency> <groupId>org.apache.http</groupId> <artifactId>httpcore</artifactId> <version>4.4.12</version> </...
北大青鸟第二学年4.0 Y2所有资料 五<br><br>我已经把第二学年所有的课件打包在一起了,一共有5部分,这是第五部分<br><br>大家下载时要记得评分,这样你们就不要资源分了<br><br>Struts&& JSF<br><br>Oracle<br><br>...
北大青鸟第二学年4.0 Y2所有资料 二<br><br>我已经把第二学年所有的课件打包在一起了,一共有5部分,这是第二部分<br><br>大家下载时要记得评分,这样你们就不要资源分了<br><br>Struts&& JSF<br><br>Oracle<br><br>...
<name>plane</name> <comment></comment> <projects> </projects> <buildSpec> <buildCommand> <name>org.eclipse.jdt.core.javabuilder</name> <arguments> </arguments> </buildCommand> </...
鉴于提供的文件信息中没有包含可分析的具体内容,我无法针对"让Oracle跑得更快.pdf"这一电子书提供详细的知识点。然而,基于标题中提到的“Oracle”和“跑得更快”,我可以提供一些普遍性的知识点和建议,这些建议...