我一直在寻找建议,但我仍然不能 100% 确定改进这一点的最佳方法。我有一个存储大约 130K 记录的 mysql INNODB 'product' 表。杂项产品数据等大约有 80 个字段,然后我们一直在为每个供应商(成本/ID/库存)添加供应商库存数据字段 x 3,从而产生另外 35-40 个额外字段。
我们通过 loaddata 或 xml/xls 提要的 php 脚本将供应商数据提要运行到每个供应商的单独表中。然后,我们运行一个查询来更新产品中的成本/库存,并使用相关供应商表中与每个表中的 id 匹配的最新数据。然后,此过程针对我们的每个供应商提要(目前大约 15 个)运行,在某些情况下每天一次,在其他情况下两次/3/4 次,提要大小从几百到 1/3/20/30K 不等。
然后,我们运行一个脚本(由于供应商数据馈送的导入计划不同,每天运行几次)比较所有供应商的库存(来自主产品表数据),并根据当时有库存的最便宜的供应商生成价格。然后,这会更新产品表中在某处有库存的每个项目的总体最佳产品价格。
update best price 脚本从表中选择所有有库存的记录,然后进行计算,然后用价格单独更新每个产品。我们遇到的问题是,在此期间我们会变慢,有时可能只有一两分钟,但有时似乎需要 5/6 到 10 分钟,这取决于网站流量等,大概是因为产品标签正在更新和重新-索引,而每次运行最多可记录 20/30,000 条记录。
product 表是该站点最繁忙的表,当更新运行时,我们看到 cpu 上升到 300/350%。我们正在尝试确定我们最初的最佳选择是否是将存储的最佳价格和汇总库存值分离到另一个表中,并在我们提取产品数据以解决索引/锁定问题时加入该表,或者我们是否只是简单地需要迁移到仍然可以处理 db/webserver/email 等的新服务器,或者运行专用的 DB 服务器。
重新迁移或新的专用数据库服务器的问题是成本,当服务器在这些缓慢的更新周期之外以 10/20/30/40% CPU 处理良好时,这是老板的停止点。如果我们要使用数据库服务器,最简单的选择是获取一个新服务器并从中运行数据库以节省重新安装我们的自定义应用程序/邮件服务器/网站应用程序文件等。如果我们这样做,我们将能够得到放弃我们目前拥有的较低规格的服务器,或者我们真的需要考虑数据库服务器是 2 中更好的规格吗?任何帮助或一般建议将不胜感激!!!谢谢。