我在一个托管多个大型数据库的数据库服务器上工作,包括不再使用的数据库。我想删除其中一个旧数据库,它已经花费了比我预期更长的时间(超过 40 秒)然后我注意到服务器的性能受到了显着影响,甚至变得无响应。幸运的是,我最终能够终止查询并使服务器恢复稳定状态。
你能帮我理解吗:
- 性能影响的原因可能是什么?我会假设删除数据库既便宜又快速。
- 清理数据库服务器的最佳方法是什么?在删除数据库之前顺序删除每个表会更好,还是我可以做任何其他事情来安全快速地删除数据库?
谢谢!
我在一个托管多个大型数据库的数据库服务器上工作,包括不再使用的数据库。我想删除其中一个旧数据库,它已经花费了比我预期更长的时间(超过 40 秒)然后我注意到服务器的性能受到了显着影响,甚至变得无响应。幸运的是,我最终能够终止查询并使服务器恢复稳定状态。
你能帮我理解吗:
谢谢!
truncate tbl
不,这有点像和之间的区别delete from tbl
。前者只是“忘记”数据行,后者遍历每一行,记录其删除并摆脱它。如果有一个选项可以以同样的方式“忘记”数据库,那么这将是“便宜且快速”的。
短篇小说 - 没有这样的选择。
删除数据库可以摆脱一切。这将破坏磁盘并影响服务器上的所有其他内容。
这种真正“重量级”的破坏性活动是维护期的目的。
如果您有大量其他数据库或遇到某种可能导致停止的锁定问题,则删除数据库需要更新所有其他数据库
pg_catalog
模式(例如: table )中的记录。pg_catalog.pg_database
您可以通过删除数据库中的所有模式来获得删除数据库的大部分好处:
DROP SCHEMA PUBLIC CASCADE;
等等。这将在不锁定任何其他数据库的情况下运行。之后等到一个安静的时间删除数据库。现在传出数据库没有表,锁定的持续时间会更短。