リリース予定のコードにてエラーが発生してしまい、原因の究明を行ったのですが、
具体的な解決策が見つからなかったのでご質問させていただきます。
ITの世界に入ったばかりで具体的な説明ができていないかもしれませんが、アドバイスいただければ幸いです。
概要
今回、サーバに配置しているRailsで構成したシステムを利用してDB(MySQL)からデータを集計するモジュールの開発を行いました。
集計するデータはmodelファイルに直接SQLを書いて投げており、取得レコードは大体60万レコード程度を想定しています。
副問い合わせやトランザクションは使っておらず以下SQLのように単純に日付を指定してデータを取得しています。※参考になるかわかりませんがSQLを記載します
SELECT result_file.id, approval_id, RIGHT(ctarget_file_name,instr(REVERSE(target_file_name),('.'))) AS target_extension, RIGHT(detect_file_name,instr(REVERSE(detect_file_name),('.'))) AS detect_extension, file_status FROM approval,result_file WHERE 1 AND application_at >= '2019-01-01 00:00:00' AND application_at < '2019-02-01 00:00:00' AND approval.id = result_file.approval_id ORDER BY approval_id;
負荷テストとして、MySQLサーバに直節上記SQLを入力したところ、想定通りの結果だったのですが、Railsから処理を行った所以下のエラーが発生してしまいました。
[ERROR] :2019-02-25 13:25:30: : EB2099:システムエラーが発生しました。[#<ActiveRecord::StatementInvalid: Mysql2::Error: MySQL client is not connected: ROLLBACK>] [WARN] :2019-02-25 13:25:30: : /opt/local/rtc/csc/centeraudit/httpd-2.4.27/rails/rcas_20190225_1/vender/bundle/ruby/2.4.0/gems/mysql2-0.5.1/lib/mysql2/client.rb:131:in `_query' /opt/local/rtc/csc/centeraudit/httpd-2.4.27/rails/rcas_20190225_1/vender/bundle/ruby/2.4.0/gems/mysql2-0.5.1/lib/mysql2/client.rb:131:in `block in query' ...以下省略...
処理の構成としては、以下になります
- Cronにてバッチ実行
- Rakeファイルにて集計(その中でmodelファイルに記載した集計SQLをfind_by_sqlで取得)←ここでエラー
3.集計したデータでCSVファイルを作成しViewに渡す
一応少ないレコードの取得(5万レコード程度)でも集計処理を実行したところ、こちらは問題なく行えました。
どうやら6万レコード程度の所が境界値になっているのか、6万レコード程度で実行してみたところ同じエラーが出てしまいました。。。
聞きたいこと
Railsでデータを処理する際には処理上限数などが設定されていて、ある程度のデータ処理数(今回の場合万レコード程)を超過した際にはエラーを吐く、ような振る舞いがされるのでしょうか?
当方プログラミングの経験が浅くActiveRecordがどういうことをやっているかなどもよく理解しておらず、的外れな質問をしているかもしれませんが、何卒ご容赦ください。
回答1件
あなたの回答
tips
プレビュー