【问题标题】:Dropping thousands tables make database slow删除数千个表会使数据库变慢
【发布时间】:2012-07-13 10:25:46
【问题描述】:

我正在处理一些问题,我正在创建数千个表并进行一些测试。

在下一次迭代中,我将删除这些表并再次重新生成它。但是通过这些步骤,我的数据库变得非常慢。

即使它是我只在其中工作的本地数据库,所以它的唯一效果是多次删除表。

任何人都想在这种情况下提高数据库性能。我正在使用 UI 从 PL/SQL 开发人员那里删除这些表。

我正在使用 Oracle 11g。 谢谢

【问题讨论】:

  • 您是否使用 PURGE 选项删除它们?
  • 我在 PL/SQL developer 中选择那些列并使用右键单击,执行 Drop 选项。我不知道 PL/SQL 在内部是怎么做的。
  • 为什么要创建数千张表?你需要一些临时表吗?如果您来自 SQL Server 背景并且习惯于创建和删除临时表 - 不要在 Oracle 中这样做。改用“真正的”临时表。
  • @CrazyC:您正在创建什么类型的表。它是一个简单的表格还是有关系的表格?
  • 为什么需要数千张表?很抱歉好奇,但这一切有什么意义?

标签: database oracle oracle11g


【解决方案1】:

主要瓶颈可能是 PL/SQL Developer GUI。处理大量对象或窗口时可能会很慢。

例如,当我创建了 1000 个表时:

begin
    for i in 1 .. 1000 loop
        execute immediate 'create table table'||lpad(i,4,'0')||'(a number)';
    end loop;
end;
/

从 GUI 中删除它们需要 70 秒,但使用此脚本只需 20 秒:

begin
    for i in 1 .. 1000 loop
        execute immediate 'drop table table'||lpad(i,4,'0');
    end loop;
end;
/

【讨论】:

  • +1。如果您不打算再次这样做,请使用 GUI 进行操作。否则编写脚本以备将来重新运行。当然,询问您为什么要反复创建和删除 1000 个表也是一个好主意 :)
猜你喜欢
  • 2017-04-03
  • 2018-12-27
  • 2014-03-20
  • 2016-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
相关资源
最近更新 更多