AuroraMySQLのProcedureのメモリ制限

0

Aurora MySQLでストアドプロシージャ実行時にメモリ不足によりRDSインスタンスが落ちてしまいます。
エンジンバージョン:8.0.mysql_aurora.3.04.1

ストアドプロシージャ内で大きなテーブルのINSERT SELECTステートメントを実行しており、テーブルサイズに応じてメモリが消費されます。
(今回の場合は10GBほど消費されます。)

FreeableMemory

db.r5.xlargeのFreeableMemoryが8GB程度しかない為、メモリ不足になり、OOM KillerによってAuroraインスタンスが落ちてしまいます。

Available memory is low. Trying to avoid OOM crash:  system KB: 32387536  available KB: 0  low-threshold KB: 1619376  print victim: no  decline query: no  tune caches: no  kill query: no  kill connection: no
OOM crash avoidance result:  success: no  num success: 5  system KB: 32387536  available KB: 0  low-threshold KB: 1619376  recovery time: 11  num declined query: 0  num killed query: 0  num killed connection: 0
{
    "report_time": "2024-02-20 12:46:49 UTC",
    "report_version": "1.0",
    "system_report": {
        "total_mem_kb": 32387536,
        "free_mem_kb": 2171800,
        "swap_total_kb": 16777212,
        "swap_used_kb": 641452,
        "swap_in_change": 0,
        "swap_out_change": 0
    },

各種パラメータ

tmp_table_size=268435456  
max_heap_table_size=268435456  

Auroraインスタンスをdb.r5.2xlargeにスペックアップするとFreeableMemoryが15GB程度に増える為、
その場合はメモリ不足にならずにストアドプロシージャは成功します。
調査の為、EC2インスタンス(t3.large、WindowsServer2022)にMySQL Community Server 8.0.34をインストールし、
AuroraMySQLからダンプしたものをリストアし、同じデータでストアドプロシージャを実行すると成功します。
MySQLプロセスの使用メモリは2GB程度(innodb_buffer_pool_size=1024M)で、
ストアドプロシージャ実行時のMySQLプロセスのメモリ使用率はほとんど変化がありません。

EC2インスタンスのメモリ使用率 MySQLプロセスのメモリ使用量

同じデータにもかかわらずストアドプロシージャ実行時のメモリ消費量がAuroraMySQLとローカルのMySQLでかなり違いがあります。
「ストアドプロシージャなどの特定のクエリは、実行中にメモリを無制限に消費することがあります。」
https://repost.aws/ja/knowledge-center/low-freeable-memory-rds-mysql-mariadb
という記載がウェブ上にありますが、
これはどんな場合に発生しますか?
またOOMを防ぐ方法はありますか?

staff
質問済み 2ヶ月前176ビュー
回答なし

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン