2

Aメモリ一時テーブルを作成し、標準カーソルの結果をループしてデータを格納するストアド プロシージャを作成しました。データベースにある他の MyISAM テーブルからのいくつかの結合を介して、一時テーブルにデータが選択されます。SP は正常に動作しますが、完全なテーブル メモリの制限に達していました。これを解決するために、メモリ制限を上げました。

set @@tmp_table_size=127108864; (121MEGs)
set @@max_heap_table_size=127108864; (121MEGs)

これは、SP を正常に実行するために必要なことです。A( select * from A を介して) 作成されて返されるテーブルのサイズはわずか 16MEG であるため、これは奇妙に思えます。約 100MEG のメモリ要件の他の部分を引き起こしている原因はわかりません。SP が必要以上のメモリを使用しているようです。私の推測では、カーソル ループの一部として SP で実行される結合は、実行後に一時テーブルを残し、SP の実行が終了するまでこれらはクリーンアップされません。これは、結合された一時テーブルの巨大なスタックがメモリ内に浮遊していることを意味します。これを停止する方法、または SP カーソル ループ内で実行されるこれらの結合によって余分なメモリが消費されていることを確認する方法はありますか? この記憶は別のものから来ているのでしょうか?助けてくれた人に感謝します。

4

1 に答える 1