优化 SQL 文件性能 [重复]

Posted

技术标签:

【中文标题】优化 SQL 文件性能 [重复]【英文标题】:Optimize SQL file performance [duplicate] 【发布时间】:2021-08-18 14:37:24 【问题描述】:

我正在使用批处理文件生成 oracle 表的备份,该批处理文件使用 SQL PLUS 调用 .sql 文件,但生成包含 90000 多条记录的 html 备份需要将近 90 分钟。请注意,表格有很多列。

以下是 sql 文件的代码。请告知如何减少时间,因为目前需要 90 分钟。我们还可以在同一个 SQL 中生成多个文件(每个表的每个文件)吗?

SET MARKUP HTML ON SPOOL ON HEAD "<TITLE>MY TABLE</title> - <STYLE TYPE='TEXT/CSS'><!--BODY background: ffffc6 --></STYLE>"
SET ECHO OFF
SET PAGESIZE 50000
SPOOL '\\PATH\OR\URL/my_table.htm';
select /*+parallel(a,8) full(a)*/ * from my_table a;
SPOOL OFF;
SET MARKUP HTML OFF
SET ECHO ON
EXIT

【问题讨论】:

您可能希望避免使用 HTML 标记;使用 HTML 标记会增加生成的数据量,以及生成 HTML 标记的开销。您也可以尝试在您的spool 命令之前使用set termout off,以避免将输出回显到终端,并且只会将查询的输出发送到假脱机文件。 在此处使用parallel 会适得其反,因为您将大部分时间都花在了获取阶段。删除它以及@Mark Steward 所说的。话虽如此,您为什么要使用 HTML 来创建表格的备份?我试图想象这是什么原因,但我不能 您可能还想增加数组大小,例如在 spool 之前设置 arraysize 500 这能回答你的问题吗? How can I export contents of an oracle table to a file?。使用适当的工具进行数据导入/导出,而不是简单的假脱机(有很多失败的可能性) 这与标签batch-file有什么关系?你在描述中提到它,但你没有分享这样的代码…… 【参考方案1】:

在不了解使用html 创建表备份的目的的情况下,尽可能快地运行的唯一方法是这样的:

    termout 关闭将避免回显结果 parallel 删除并行提示将使获取更快,因为此查询只是获取时间。如果使用并行,则需要协调 QC 与从机,这在这种情况下是浪费时间。 增加arraysize 允许SQL*Plus 在一次提取中返回更多行,从而减少它与数据库服务器之间所需的网络往返次数。权衡是更大的数组大小设置需要更多内存。请记住这一点,以便使用更好的权衡(默认 15,限制 5000)

解释了这一点,一种选择是

SET MARKUP HTML ON SPOOL ON HEAD "<TITLE>MY TABLE</title> - <STYLE TYPE='TEXT/CSS'><!--BODY background: ffffc6 --></STYLE>"
SET ECHO OFF TERMOUT OFF ARRAYSIZE 5000 -- I put 5000 which is the maximum
SET PAGESIZE 0
SPOOL '\\PATH\OR\URL/my_table.htm';
select * from my_table a;
SPOOL OFF;
SET MARKUP HTML OFF
EXIT

【讨论】:

我不想将 PAGESIZE 设置为 0,因为它会删除标题 现在如何跟踪进度??因为cmd屏幕只显示状态“连接到oracle数据库----”然后- 嗨罗伯托,文件似乎正在生成,但无法跟踪进度 @kiss.shoremishra 查询运行时 v$session_longops 中是否有任何内容? Sqlplus 快速模式(从 12.2 开始)将为您完成数组大小和其他一些不错的事情。如果您想通过 sql*plus 尽可能快地进行假脱机,那么您现在应该使用它。对于实际的表备份,这不是一个解决方案(我不敢想象还原会是什么样子)。

以上是关于优化 SQL 文件性能 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

性能优化都不会,还敢说自己是高级工程师

使用 NOT IN(Oracle Sql Developer)的查询性能优化

优化 SQL 查询以避免重复

同一个 SQL 语句中的多个条件计数 [重复]

SQL 优化器/执行计划 - 重复子查询

Mysql高性能优化规范建议