目前我正在运行多个查询,这些查询将输出假脱机到一个文件,这可能是一个漫长的过程,下面是我在sqlplus中的当前设置。
set feedback off
set heading off
set echo off
set termout OFF
set linesize 150
set long 1999999
set longchunk 1999999
set pagesize 0
spool results.sql
@queries.sql
spool off
set termout on
set echo on
set heading on
set feedback on
我想知道我是否有办法加速这个过程?或者是否有更快的方法使用sqlplus将查询输出发送到文件?
由于
答案 0 :(得分:0)
能否请您澄清以下内容
ora
和datafiles
)?< / li>
fetch first n rows
减小结果集的大小来测试查询吗? 您为什么认为瓶颈在绕线?在得出有关性能下降原因的任何结论之前,您可能需要尝试收集有关查询的一些计时统计信息。我将修改您的查询以仅返回一部分行
SELECT * FROM scott.dept FETCH FIRST 10000 rows
优化查询在很大程度上取决于数据的结构和例程的运行方式,因此,为了进行优化,您需要能够对性能变化进行基准测试。
然后您将要检查以下两个参数
SHOW PARAMETER statistics_level
SHOW PARAMETER timed_statistics
而且您还想安排查询时间
SET TIMING ON
请记住,所有这些只是为了基准性能,您将需要在生产中还原这些设置。
请记住,由于池化/缓冲/缓存/等原因,多次运行相同的查询会导致不一致的性能指标。您应该查询v$statistics_level
并进行调查
我会SHUTDOWN IMMEDIATELY; STARTUP MOUNT;
,然后多次对您的查询进行解释。
EXPLAIN PLAN FOR SELECT * FROM SCOTT.DEPT;
检查后续计划中的说明计划是否正在更改。
此外,在某些情况下,您可以通过运行来强制对表进行缓存
SELECT * FROM SCOTT.DEPT CACHE;
然后将其与的性能指标进行比较
SELECT * FROM SCOTT.DEPT NOCACHE;
您可能还希望将表无限期地保留在内存中
ALTER TABLE *scott.dept* STORAGE (buffer_pool keep)
如果没有发现任何明显的问题,请运行explain plan for
您的查询。连续多次运行解释以查看是否有任何更改。
除此之外,您还应该记住,多次运行查询而不刷新缓冲区/清除缓存会给您不可靠的读数。如果您不确定假脱机是否是瓶颈,我还建议您运行一个explain plan for your
查询
还有一些技巧可以随着时间的推移提高性能(假设此例程定期运行)。如果使用alter table *table_name* cache
,则在不假脱机到文件的情况下运行查询,然后再次使用假脱机运行alter table *table_name* nocache
,则性能可能更高,但是是否可行完全取决于您的用例。< / p>
虽然我怀疑您的问题是否可以通过任何设置的组合来解决,但以下几项可能会带来边际收益
set trimspool on
删除假脱机文件中的空白以填充行大小
这可能毫无意义,具体取决于您的例程是全自动的还是交互式的
set verify off
这将从假脱机中删除替换变量,但可以大大加快您的处理过程……再次取决于您的数据
set autoprint off
这是另一个变量设置。默认设置为“关闭”,但是您可以确保我会明确设置
set serveroutput off
SET TRIMOUT ON
删除输出文件上的空白填充行大小
set arraysize N
您肯定会修改这个。 N是一次获取的行数。它的大小取决于表的结构
虽然这些设置可能可以提高例程的速度,但是性能通常特定于您的体系结构和数据集。