0

所有问题都在标题中,

如果我们在一个 1 亿行的表上杀死一个集群查询,对数据库会不会很危险?

查询现在运行了 2 个小时,我需要明天早上访问该表(希望还剩 12 小时)。

我认为它会快得多,我的数据库在 raid ssd 和 Bi-Xeon 处理器上运行。

感谢您的明智建议。

席德

4

2 回答 2

2

不,您可以毫无风险地终止集群操作。在操作完成之前,原始表和索引文件没有任何变化。从手册

使用索引扫描时,会创建一个表的临时副本,其中包含按索引顺序排列的表数据。还会创建表上每个索引的临时副本。因此,您需要磁盘上的可用空间至少等于表大小和索引大小的总和。

当使用顺序扫描和排序时,还会创建一个临时排序文件,因此峰值临时空间需求是表大小的两倍,加上索引大小。

于 2012-04-24T16:12:50.947 回答
0

正如@Frank 指出的那样,这样做完全没问题。

假设您想在将来运行此查询并假设您拥有服务窗口的奢侈并且可以承受一些停机时间,我会调整一些设置以稍微提高性能。

在您的配置中:

  1. 关闭 fsync,以获得更高的文件系统吞吐量

Fsync 代表文件系统同步。开启 fsync 后,数据库等待文件系统在每次页面刷新时提交。

  1. 最大化您的maintenance_work_mem

可以只占用所有可用内存,因为它不会在生产时间分配。我不知道你的表和你正在处理的索引有多大,当它们可以完全加载到主内存中时,它们会运行得更快。

于 2012-04-24T16:38:35.647 回答