根据innotop和Cacti的说法,我的数据库服务器处理SHOW FIELDS
语句的次数是SELECT
或任何其他高效查询的8倍。我正在使用Rails 3.0,因此它应该在加载后缓存列。我已经看到MySQL需要每个SHOW FIELDS
查询的临时表的报告,我的监控数据也证实了这一点。
不可否认,我在非标准情况下使用ActiveRecord / Rails,涉及在100-200台计算机上启动大量(~400)进程,每台计算机都加载整个Rails环境。这些进程至少运行几分钟,可能超过24小时,每隔几分钟就进行一次数据库工作。请注意,这些进程不使用正常的HTTP请求/响应循环。
有什么方法可以避免这种情况吗?我们的config.cache_classes = true
文件中有config/environments/production.rb
。我实际上遇到了数据库服务器扩展问题,我认为这个问题是一个主要因素。