假设所有容器构建都在 Google Container Builder(GCB)上进行的工作流程,Dockerfile 是否必要?
例如,要构建自定义容器,我们希望在其中安装一些软件包或从本地文件系统复制文件,我看到大多数示例 GCB 仍在使用 Dockerfile(例如https://github.com/GoogleCloudPlatform/cloud-builders) - 是这样因为不可能使用 cloudbuild.yaml 吗?
当我使用默认的enable_nestloop = true和enable_nestloop = false(~10秒)运行它时,我的查询运行速度慢了很多(约5分钟).
解释两种情况的分析结果:
机器A nestloop = true - http://explain.depesz.com/s/nkj0(~5分钟)机器a nestloop = false - http://explain.depesz.com/s/wBM(~10秒)
在另一个稍慢的机器上,复制数据库并保留默认的enable_nestloop = true需要大约20秒.
机器B nestloop = true - (~20secs)
对于上述所有情况,我确保在运行查询之前进行了ANALYZE.没有其他查询并行运行.
两台机器都在运行Postgres 8.4.机器A运行Ubuntu 10.04 32位,而机器B运行Ubuntu 8.04 32位.
这里提供了实际查询.它是一个具有许多连接的报告查询,因为数据库主要用于事务处理.
如果不采用像物化视图这样的东西,我可以做些什么来让规划师通过设置enable_nestloop = false来完成我所做的事情?
从我所做的研究来看,计划者选择看似不理想的查询的原因似乎是因为估计行与实际行之间存在巨大差异.我怎样才能让这个数字更接近?
如果我应该重写查询,我应该改变什么?
为什么规划师似乎正在为机器B做正确的事情.我应该在两台机器上进行比较?