@phantom999

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

【MySQL】ストアドプロシージャのタイムアウトについて

解決したいこと

MySQL(10.6.15-MariaDB-cll-lve)のストアドプロシージャで、
1分のsleepを10回入れたいのですが、5分でエラーとなってしまいます。
テストとして次のようなソースを書いてみましたが、タイムアウトにならない
方法をご教授いただけると幸いです。
※PHPのバージョンは7.4.33です。

発生している問題・エラー

Procedure execution failed
700 Invalid response: 500

該当するソースコード

PHP8

BEGIN
DECLARE tmp_stairs_id INT default 0;

SET tmp_sleep = 60;
insert into tbl_temp (str) values ("START");

loop1: LOOP
	IF tmp_stairs_id > 10 THEN
		insert into tbl_temp (str) values ("END");
		LEAVE loop1;
	END IF;

	set tmp_log_date = now();
	insert into tbl_temp (str) values (tmp_log_date);
	DO SLEEP(tmp_sleep);
	SET tmp_stairs_id = tmp_stairs_id + 1;

END LOOP loop1;

END

0 likes

2Answer

MySQLのストアドプロシージャでは、デフォルトでクエリの実行時間が制限されていることがあります。これが原因で、一定の時間以上の処理が行われるとタイムアウトエラーが発生します。

この制限を解除するには、max_execution_timeと呼ばれる設定を変更する必要があります。ただし、MySQLサーバーの設定や権限が必要となるため、これは注意が必要です。

  1. MySQLサーバーの設定ファイル (my.cnfmy.ini) を開きます。
  2. max_execution_timeの値を適切な大きな値に変更します。
  3. 保存し、MySQLサーバーを再起動します。
1Like

Comments

  1. @phantom999

    Questioner

    ありがとうございます。max_execution_timeというのがあるのですね。
    レンタルサーバーのため、どこまで変更可能かわかりませんが、調べてみます。
    詳しい手順まで記載いただき、ありがとうございました!

そもそもトランザクションでも(標準設定では)タイムアウトになるような長い時間完了しないストアドプロシージャというのが無謀だと思います…

0Like

Comments

  1. @phantom999

    Questioner

    ありがとうございます。そうですね。CRONやイベントで複数処理をする方法が良いかもしれませんね。。

Your answer might help someone💌