LoginSignup
0
0

【MySQL】エラー「Recursive limit 0 (as set by the max_sp_recursion_depth variable) was exceeded...」の原因

Posted at

概要

MySQLデータベースでストアドプロシージャを実行したら、以下のエラーが発生しました。

ERROR 1456 (HY000) at line 1: Recursive limit 0 (as set by the max_sp_recursion_depth variable) was exceeded for routine TestProcedure01

原因と解決方法

Recursive limit 0は再帰呼び出しの制限を示しています。
ERROR 1456は再帰呼び出しの制限に関連するエラーらしい)

再帰?と思って該当のプロシージャをよく見ると、以下がエラーの原因でした。

  -- 次のプロシージャを呼び出す
  CALL TestProcedure01();

TestProcedure01が終わったらTestProcedure02を呼び出すようにしていたのですが、誤って、ここを自身のプロシージャ名にしていました...。つまり、自身を再帰的に呼び出していたことが原因でこのエラーが発生したのです。

ということで、上記を修正したらエラーは無くなりました。

備考

大量のテーブルを一つのプロシージャで削除しようとすると、大規模なトランザクションとなり、データベースに対するロックが長時間続く可能性があり、パフォーマンスに問題を引き起こすことがあるよう。
そんな時、プロシージャを複数のステップに分割すると良い(もちろん、CPU、メモリ、ストレージなどのスペックにもよる)。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0