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 個月前檢視次數 184 次
沒有答案

您尚未登入。 登入 去張貼答案。

一個好的回答可以清楚地回答問題並提供建設性的意見回饋,同時有助於提問者的專業成長。

回答問題指南