前提・実現したいこと
MySQLを使ってデータ抽出を行なった際、以下エラーが出てきました。(GUIはSeuquel Aceを使用)
Can't create/write to file '/var/folders/nk/2w5hqm352p3_qkf6k9phrcmc0000gn/T/MYI8SOMf' (OS errno 23 - Too many open files in system)
どうやら開けるファイル数の上限値に達してしまったようです
このエラーを処理・もしくはSQL修正で、正しくデータ抽出できるようにしたいです。
発生している問題・エラーメッセージ
Can't create/write to file '/var/folders/nk/2w5hqm352p3_qkf6k9phrcmc0000gn/T/MYI8SOMf' (OS errno 23 - Too many open files in system)
該当のソースコード
select day1.col, day2.col, day3.col,・・(省略)・・, day31.col from test1 left join (select * from test1) day1 on test1.col1 = day1.col1 left join (select * from test1) day2 on test1.col1 = day2.col1 left join (select * from test1) day3 on test1.col1 = day3.col1 ・・(省略)・・ left join (select * from test1) day31 on test1.col1 = day31.col1
試したこと
①ターミナルのコマンドで「limit -n 50000」など実行
②mysqlフォルダ配下のmy.confに
[mysqld]
open_file_limit = 50000
と追記
補足情報(FW/ツールのバージョンなど)
PC環境:macOS Big Sur
チップ:Apple M1
MySQL:8.0.26
「処理」とは?
>SQL修正で
とするには情報が不足しすぎています。
せめてテーブル定義やサンプルデータは提示してもらいたいところ。
現状だとどういうデータをもとにどういうデータを抽出しようとしているのか不明瞭です。
失礼いたしました。
自分が確認した限りですと、本件はSQLではなくOS側の設定が問題となっているように見えたのでSQLは正直軽視してました。
サンプルは以下となります。
今回抽出したいデータは、ある商品の1ヶ月における販売実数を1行のレコードに抽出したいと考えています
<test>
date:日付
sid:商品ID
sale:日付の売り上げ
<SQL>※上記データに合わせて詳細に記載しました
select
test.date as yyyymm
, test.id
, test.sales as day1
, day1.sales as day2
, day2.sales as day3
・・(省略)・・
, day30.sales as day30
from test
left join (select * from test1) day2
on test1.date = DATE_ADD(day_2.date, INTERVAL -1 DAY) and test1.sid = day1.sid
left join (select * from test1) day3
on test1.date = DATE_ADD(day_3.date, INTERVAL -2 DAY) and test1.sid = day1.sid
・・(省略)・・
left join (select * from test1) day30
on test1.date = DATE_ADD(day_30.date, INTERVAL -29 DAY) and test1.sid = day1.sid
<抽出したいデータ例>
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
yyyymm sid day1 day2 day3 ・・(省略)・・ day30
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
2021-09-01 掃除機A 3 6 5 ・・(省略)・・ 8
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
サンプルデータは以上となりますが、OS設定変更ではなくSQLを修正することでどうにか回避できそうなのでしょうか?
回答1件
あなたの回答
tips
プレビュー