【问题标题】:drop query taking too long time in postgresql?在 postgresql 中删除查询需要很长时间?
【发布时间】:2015-12-28 05:59:44
【问题描述】:

我在 postgresql 中创建了名为 genrate_report() 的函数,该函数具有各种查询,包括 create table , joins , update, alter 等,它们工作正常,并且需要大约 400 毫秒 来执行低数据并且连接更少。

现在数据正在增加,现在 300000 毫秒(大约 5 分钟),并且仍在运行。然后我停止它并开始一一运行查询。我想知道单次删除查询 drop table if exists fk_pay_cal; 需要 781650 毫秒 并且仍在运行。

这是服务器错误吗? 或者太多的postgres连接? (远程PgAdmin有4个连接)

还是别的什么?

【问题讨论】:

  • fk_pay_cal?? 中有多少行。一个原因可能是其他会话可能使用该表
  • fk_pay_cal 现在有 56001 行
  • select state, from pg_stat_activity where query ilike '%fk_pay_cal%' 的输出是什么?
  • 这意味着表仍在被另一个会话使用!
  • 如果我将删除所有会话并在一段时间内运行查询,但此错误可能会在一段时间后出现。那我需要做什么来解决它

标签: postgresql ubuntu pgadmin


【解决方案1】:

如果你想加快这个过程,那么你需要从你的表中删除所有约束,因为当你试图删除表时,它首先检查表上的约束,这需要时间。

【讨论】:

  • 该表没有任何约束
  • @ShubhamBatra:- 您是否检查过该表没有在其他会话中使用?
  • @ShubhamBatra 使用select * from pg_stat_activity 检查表(fk_pay_cal)是否正在被其他会话使用。
  • 是的,选择 genrate_report() 已激活 11 次。我怎么能暂停这个?只是改变状态或通过终端
【解决方案2】:

TRUNCATE 将处于空闲状态,直到没有其他会话使用目标表。 查看this great stackexchange answer 更详细地解释事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多