用ruby 写了一些数据处理的脚本,连接到mysql,里面有不少find_by_id
不知道为什么总有很多 “卡”住的情况, javax.microedition.rms.InvalidRecordIDException,kill 掉重新运行,就一切正常
检查mysql ,show processlist ,经常发现,在 DESCRIBE xxx表 , checking permissions 。
MYSQL 的CPU 利用率 立即打满到100%
而且,desc 反复出现,似乎每次find操作都需要 DESCRIBE
实在想不明白,为什么这么多 DESCRIBE ?
我做过以下尝试
1,每次find 都加上:select => "所有字段"
2,以前有 对象.attributes.has_key(:字段),都改为
3,以前是放在crontabl每分钟 执行一次,现在修改为每次运行中sleep 60 ,每次启动最多可以运行30次。
也许会提高解析效果。
4,将表引擎原来是 MYISAM 修改为 INNODB
5,尽量少用关系,而采用find(:all,:select => "id",:limit => 10 ....) + find(ids)
6, java.io.IOException,在MY.cnf 中配置 table_open_cache = 2048
请问, DESCRIBE xxx 都是在什么时间调用的? 还有啥可做的?
多问一句,我这些表,采用了MYSQL 的分区,是不是有影响呢?
ruby -v
ruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux], MBARI 0x6770, Ruby Enterprise Edition 2011.03
gem list :
activerecord (3.0.5)
mysql (2.8.1)
哎
------------------------------------------------------------------------------------------------------------------
问题补充:
hi,我的问题症结也许就在这里。
我知道rails 有 development 和production 之分,不过我这个是 一段脚本,通过crontab 调用。
在程序最初就设置了 ENV['RAILS_ENV'] ||= 'production' ,似乎不对症
在什么地方可以设置一下 production ?
------------------------------------------------------------------------------------------------------------------
问题补充:
是不是 也是用
------------------------------------------------------------------------------------------------------------------
问题补充:
这样写才能执行。。。不知道是否有效
------------------------------------------------------------------------------------------------------------------
问题补充:
似乎无效。。。。
MYSQL 更加变态 ,desc 超过120秒
| Id | User | Host | db | Command | Time | State | Info |
| 68676 | syncer | localhost | info | Query | 123 | checking permissions | describe `v_publish_info` |
------------------------------------------------------------------------------------------------------------------
问题补充:
ruby -h
Usage: ruby [switches] [--] [programfile] [arguments]
-e 'command' one line of script. Several -e's allowed. Omit [programfile]
------------------------------------------------------------------------------------------------------------------
问题补充:
查看 rails 的config/environments/下
是不是与 cache_classes 有关?在脚本方式下,如何做到?
------------------------------------------------------------------------------------------------------------------
问题补充:
这条路 走下去,似乎要 重读一遍 rails application 的代码。。。
------------------------------------------------------------------------------------------------------------------
问题补充:
以DEBUG 方式执行 脚本
每个insert 前都有。
对应着一个个 xxx.new
印象中activerecord 会做 SQL CACHE ,打印出来,应该是
为什么 我现在没有cache ?
------------------------------------------------------------------------------------------------------------------
问题补充:
烦劳您 告诉我,如何强制为 production环境,作为独立程序而 不是在rails。
知其然不知其所以然,没有解决方案
------解决方案--------------------------------------------------------
DESCRIBE xxx只在development环境里才会反复调用,production环境中只在启动时调用一次。因此不用过分担心。
------解决方案--------------------------------------------------------
可参考:
问一个比较郁闷的有关问题!有关mysql数据更新的 http://www.myexception.cn/java-web/10700.html
相关的主题文章:
不知道为什么总有很多 “卡”住的情况, javax.microedition.rms.InvalidRecordIDException,kill 掉重新运行,就一切正常
检查mysql ,show processlist ,经常发现,在 DESCRIBE xxx表 , checking permissions 。
- | Id | User | Host | db | Command | Time | State | Info |
- | 68645 | syncer | localhost | info | Query | 38 | checking permissions | describe `v_publish_text` |
MYSQL 的CPU 利用率 立即打满到100%
而且,desc 反复出现,似乎每次find操作都需要 DESCRIBE
实在想不明白,为什么这么多 DESCRIBE ?
我做过以下尝试
1,每次find 都加上:select => "所有字段"
2,以前有 对象.attributes.has_key(:字段),都改为
@attributes = nil
@attributes = bb.attributes.clone if @attributes.nil?
@attributes.has_key?(:country_id)
3,以前是放在crontabl每分钟 执行一次,现在修改为每次运行中sleep 60 ,每次启动最多可以运行30次。
也许会提高解析效果。
4,将表引擎原来是 MYISAM 修改为 INNODB
5,尽量少用关系,而采用find(:all,:select => "id",:limit => 10 ....) + find(ids)
6, java.io.IOException,在MY.cnf 中配置 table_open_cache = 2048
请问, DESCRIBE xxx 都是在什么时间调用的? 还有啥可做的?
多问一句,我这些表,采用了MYSQL 的分区,是不是有影响呢?
ruby -v
ruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux], MBARI 0x6770, Ruby Enterprise Edition 2011.03
gem list :
activerecord (3.0.5)
mysql (2.8.1)
哎
------------------------------------------------------------------------------------------------------------------
问题补充:
isimon 写道
DESCRIBE xxx只在development环境里才会反复调用,production环境中只在启动时调用一次。因此不用过分担心。
hi,我的问题症结也许就在这里。
我知道rails 有 development 和production 之分,不过我这个是 一段脚本,通过crontab 调用。
在程序最初就设置了 ENV['RAILS_ENV'] ||= 'production' ,似乎不对症
在什么地方可以设置一下 production ?
------------------------------------------------------------------------------------------------------------------
问题补充:
是不是 也是用
ruby -e production xxx.rb
?
------------------------------------------------------------------------------------------------------------------
问题补充:
ruby xxx.rb -e production
这样写才能执行。。。不知道是否有效
------------------------------------------------------------------------------------------------------------------
问题补充:
似乎无效。。。。
MYSQL 更加变态 ,desc 超过120秒
| Id | User | Host | db | Command | Time | State | Info |
| 68676 | syncer | localhost | info | Query | 123 | checking permissions | describe `v_publish_info` |
------------------------------------------------------------------------------------------------------------------
问题补充:
ruby -h
Usage: ruby [switches] [--] [programfile] [arguments]
-e 'command' one line of script. Several -e's allowed. Omit [programfile]
------------------------------------------------------------------------------------------------------------------
问题补充:
isimon 写道
DESCRIBE xxx只在development环境里才会反复调用,production环境中只在启动时调用一次。因此不用过分担心。
查看 rails 的config/environments/下
development.rb: config.cache_classes = false
production.rb: config.cache_classes = true
test.rb: config.cache_classes = true
是不是与 cache_classes 有关?在脚本方式下,如何做到?
------------------------------------------------------------------------------------------------------------------
问题补充:
这条路 走下去,似乎要 重读一遍 rails application 的代码。。。
------------------------------------------------------------------------------------------------------------------
问题补充:
以DEBUG 方式执行 脚本
每个insert 前都有。
D, [21:37:33#11964] DEBUG -- : SQL (1.0ms) describe `tasks`
对应着一个个 xxx.new
印象中activerecord 会做 SQL CACHE ,打印出来,应该是
CACHE (0.0ms) describe `tasks`
为什么 我现在没有cache ?
------------------------------------------------------------------------------------------------------------------
问题补充:
isimon 写道
DESCRIBE xxx只在development环境里才会反复调用,production环境中只在启动时调用一次。因此不用过分担心。
烦劳您 告诉我,如何强制为 production环境,作为独立程序而 不是在rails。
知其然不知其所以然,没有解决方案
------解决方案--------------------------------------------------------
DESCRIBE xxx只在development环境里才会反复调用,production环境中只在启动时调用一次。因此不用过分担心。
------解决方案--------------------------------------------------------
可参考:
问一个比较郁闷的有关问题!有关mysql数据更新的 http://www.myexception.cn/java-web/10700.html
相关的主题文章: