'AWS RDS MySQL ERROR Code 1114 - The table '/rdsdbdata/tmp/#sql1ae5_a6_2' is full

I am experiencing an issue with our MySQL (v8.0) database running on AWS RDS. When executing a specific query, after 4 minutes the query will fail with:

Error Code 1114: The table '/rdsdbdata/tmp/#sql1ae5_a6_2' is full

I've tried setting tmp_table_size to 32 Mib (up from the default of 16 MiB).

tmp_table_size = 16777216 # Default value (16 MiB)
tmp_table_size = 33554432 # New value (32 MiB)

I've also tried increasing the AWS instance type from:

db.t2.micro -> db.t2.small

Other relevant settings:

temptable_max_ram 1073741824 # Default value
temptable_max_mmap 1073741824 # Default value
temptable_use_mmap 1 # Default value (and cannot be changed for AWS instances)

How do I fix this error? What setting do I have to adjust?

This is my query:

SELECT cur.actualstart AS actual_start,
cur._regardingobjectid_value AS related_entity_id,
opt5.label AS status_reason,
cur.createdon AS created_on,
cur.activityid AS id,
cur.prefix_activestagename AS journey_stage_name,
cur.actualend AS actual_end,
opt6.label AS status,
cur._ownerid_value AS owner_user_id,
IFNULL(_prefix_predecessor_value,
        pre_helper.predecessor) AS predecessor FROM
prefix_stageduration_current cur
    LEFT JOIN
optionset_current opt1 ON (opt1.entity = 'prefix_stageduration'
    AND opt1.logicalname = 'instancetypecode'
    AND opt1.valueid = cur.instancetypecode)
    LEFT JOIN
optionset_current opt2 ON (opt2.entity = 'prefix_stageduration'
    AND opt2.logicalname = 'prioritycode'
    AND opt2.valueid = cur.prioritycode)
    LEFT JOIN
optionset_current opt3 ON (opt3.entity = 'prefix_stageduration'
    AND opt3.logicalname = 'deliveryprioritycode'
    AND opt3.valueid = cur.deliveryprioritycode)
    LEFT JOIN
optionset_current opt4 ON (opt4.entity = 'prefix_stageduration'
    AND opt4.logicalname = 'community'
    AND opt4.valueid = cur.community)
    LEFT JOIN
optionset_current opt5 ON (opt5.entity = 'prefix_stageduration'
    AND opt5.logicalname = 'statecode'
    AND opt5.valueid = cur.statecode)
    LEFT JOIN
optionset_current opt6 ON (opt6.entity = 'prefix_stageduration'
    AND opt6.logicalname = 'statuscode'
    AND opt6.valueid = cur.statuscode)
    LEFT JOIN
(SELECT DISTINCT
    a.activityid, MAX(b.activityid) AS predecessor
FROM
    (SELECT 
    c1.activityid,
        c1._regardingobjectid_value,
        MAX(c2.actualend) AS actualend
FROM
    prefix_stageduration_current c1
LEFT JOIN prefix_stageduration_current c2 ON (c1._regardingobjectid_value = c2._regardingobjectid_value
    AND c1.actualstart <= c2.actualend)
GROUP BY c1.activityid , c1._regardingobjectid_value) a
LEFT JOIN prefix_stageduration_current b ON (a._regardingobjectid_value = b._regardingobjectid_value
    AND a.actualend = b.actualend)
GROUP BY a.activityid) pre_helper ON pre_helper.activityid = cur.activityid;


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source