问题描述
您好,我是Oracle新手,在Oracle 11g上遇到以下问题:
我想复制一张表
该表有一个BLOB列和不到900万条记录,该过程在2,5小时后没有完成。这是正常现象还是我有奇怪的设置?
我想复制一张表
INSERT INTO table1 (SELECT "column1", "column2" FROM table2);
该表有一个BLOB列和不到900万条记录,该过程在2,5小时后没有完成。这是正常现象还是我有奇怪的设置?
专家解答
2.5小时插入900万行听起来太长。如果斑点很大,可能会有很多数据要传输。
为了让它更快,你需要理解why目前很慢。
目标表上有触发器吗?如果是这样,请查看这些功能; 删除这些功能可能会带来良好的性能提升
是否有任何其他未提交的插入添加相同的主键/唯一值?如果是这样,请承诺!
如果这些都不适用,请查看报表计划,看看它在做什么工作。
有几种方法可以做到这一点:
-如果您获得了适当的许可 (诊断和调整包),则查看SQL monitor报告将显示您希望该语句正在执行
-如果您没有获得许可,则可以通过以下方式获取插入的执行计划:
-跟踪会话并使用tkprof解析输出
然后在数据库服务器上找到跟踪文件,并将其变成更具可读性的东西:
tkprof <跟踪 _ 文件 _ 名称> <输出 _ 文件 _ 名称>
如果您需要了解输出的帮助,请在此处发布,我们将为您提供帮助。
有关这些方法的更多信息,请参见https://blogs.oracle.com/sql/how-to-create-an-execution-plan
为了让它更快,你需要理解why目前很慢。
目标表上有触发器吗?如果是这样,请查看这些功能; 删除这些功能可能会带来良好的性能提升
是否有任何其他未提交的插入添加相同的主键/唯一值?如果是这样,请承诺!
如果这些都不适用,请查看报表计划,看看它在做什么工作。
有几种方法可以做到这一点:
-如果您获得了适当的许可 (诊断和调整包),则查看SQL monitor报告将显示您希望该语句正在执行
-如果您没有获得许可,则可以通过以下方式获取插入的执行计划:
set serveroutput off alter session set statistics_level = all;select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));
-跟踪会话并使用tkprof解析输出
exec DBMS_monitor.session_trace_enable ( null, null, true, true ); ***your code here*** exec DBMS_monitor.session_trace_disable;
然后在数据库服务器上找到跟踪文件,并将其变成更具可读性的东西:
tkprof <跟踪 _ 文件 _ 名称> <输出 _ 文件 _ 名称>
如果您需要了解输出的帮助,请在此处发布,我们将为您提供帮助。
有关这些方法的更多信息,请参见https://blogs.oracle.com/sql/how-to-create-an-execution-plan
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




