0

我找到了很多关于如何删除数据库及其所有表的答案,但没有任何关于为什么每个表需要约 3-4 秒才能删除的答案,似乎是在 SERIAL 中(一个接一个)。

我有一个数据库,其中有 2,414 个外部表指向镶木地板位置,并且DROP DATABASE <db> CASCADE;可能需要 1-2 小时才能删除数据库的元数据。

在一个单独的会话中,我可以反复SHOW TABLES IN <deleted DB>;观察桌子的数量以每 3-4 秒大约 1 个的速度下降。在会话释放删除之前这需要 2 小时以上,并允许我们用新数据库替换数据库......

504 rows selected (0.29 seconds)
...
503 rows selected (0.17 seconds)
...
502 rows selected (0.29 seconds)
...

是什么让 Hive 花了这么长时间?有没有我可以用来让它更快的配置?有没有办法告诉我在那段时间它在做什么?

如果它更常见,我认为其他人会遇到这个问题,所以这让我觉得我有一个设置可以调整来解决这个问题(?)......

在删除的数据库下似乎没有删除镶木地板,因此它似乎与 hdfs/parquet 文件没有任何关系,除非出于任何原因删除外部表检查它们...

任何想法为什么它会这么慢?

4

1 回答 1

0

AFAIK,它必须放弃所有的参考资料。它可以是外部表,但如果 Metastore 中有很多分区、统计信息等。此外,如果它有很多行,则需要获取特定的锁。您可能需要检查元存储(mysql 或等效),看看您是否可以引入任何索引或定期收集统计信息。

于 2020-03-14T23:14:18.110 回答