FiveM MySQL Result Was Larger Than max_allowed_packet Error 1301 แก้อย่างไร? ตรวจ Function, JSON, TEXT และ SQL Result ที่ใหญ่เกิน

ปัญหา FiveM MySQL/MariaDB ขึ้น Error 1301: Result of ... was larger than max_allowed_packet - truncated หมายความว่า MariaDB กำลังสร้างผลลัพธ์จาก SQL Function หรือการประมวลผล String แล้วผลลัพธ์นั้นมีขนาดใหญ่กว่า max_allowed_packet ที่ Server อนุญาต จึงไม่สามารถสร้างผลลัพธ์เต็มตามที่ Query ต้องการได้

MariaDB กำหนด Error 1301, SQLSTATE HY000 เป็น ER_WARN_ALLOWED_PACKET_OVERFLOWED พร้อมรูปแบบข้อความ Result of %s() was larger than max_allowed_packet (%ld) - truncated.

ตัวอย่าง:

ERROR 1301 (HY000):
Result of rpad() was larger than max_allowed_packet
- truncated

MariaDB Documentation มีตัวอย่าง Error 1301 จาก RPAD() เมื่อ Function พยายามสร้าง String ที่ใหญ่กว่า max_allowed_packet.

ใน FiveM ปัญหานี้อาจสัมพันธ์กับ:

  • JSON ขนาดใหญ่
  • Character Metadata
  • Inventory
  • Vehicle Properties
  • Housing Furniture
  • Phone Data
  • Logs
  • SQL Functions
  • String Aggregation
  • TEXT/LONGTEXT
  • BLOB
  • Query ที่รวมข้อมูลมากเกินไป
  • Custom Stored Function
  • Resource ที่สร้าง SQL Result ขนาดใหญ่ผิดปกติ

หลักสำคัญคือ:

อย่าเห็น Error 1301 แล้วเพิ่ม max_allowed_packet อย่างเดียวทันที

เพราะถ้า Resource กำลังสร้าง String ใหญ่ผิดปกติจาก Query, JSON หรือ Bug การเพิ่ม Limit เพียงทำให้ Database สามารถสร้างข้อมูลผิดที่ใหญ่กว่าเดิม

① FiveM MySQL Error 1301 คืออะไร

MariaDB ระบุ Error 1301 ว่า:

ER_WARN_ALLOWED_PACKET_OVERFLOWED

และเกิดเมื่อ Result ของ Function มีขนาดใหญ่กว่า max_allowed_packet จนต้องถูก Truncate.

② คำว่า Truncated หมายถึงอะไร

หมายถึง Result ที่ควรสร้างออกมาเต็มไม่สามารถถูกสร้างได้ทั้งหมดตาม Limit ปัจจุบัน

จึงต้องระวังว่า:

Query อาจไม่ได้ผลลัพธ์ตามที่ Resource คาดไว้

③ Error 1301 ต่างจาก 1153 อย่างไร

หัวข้อ 290:

1153
Got a packet bigger than
'max_allowed_packet' bytes

เน้น Packet ที่ใหญ่เกิน Limit

ส่วน 1301:

Result of function
was larger than max_allowed_packet
- truncated

เน้น ผลลัพธ์ที่ Function กำลังสร้าง ใหญ่เกิน Limit.

④ ต่างจาก Error 1162 อย่างไร

หัวข้อ 291:

1162
Result string is longer than
'max_allowed_packet' bytes

ส่วน 1301 จะระบุถึง Result ของ Function และมีคำว่า:

truncated

ใน Error Message.

⑤ จำง่าย ๆ

1153 = Packet ใหญ่เกิน
1162 = Result String ใหญ่เกิน
1301 = Function Result ใหญ่เกินและถูก Truncate

⑥ max_allowed_packet คืออะไร

MariaDB ใช้ max_allowed_packet เป็นขีดจำกัดขนาด Packet รวมถึง Generated/Intermediate String บางประเภทที่ Database สามารถจัดการได้.

⑦ ตรวจค่าปัจจุบัน

ใช้:

SHOW VARIABLES LIKE 'max_allowed_packet';

หรือ:

SELECT @@max_allowed_packet;

⑧ ค่าเป็น Bytes

ถ้าได้:

16777216

ก็คือประมาณ:

16 MB

⑨ อย่าเปลี่ยนค่าก่อนดู Query

เพราะ Error 1301 อาจเกิดจาก Function กำลังสร้างข้อมูลที่ ไม่ควรใหญ่ขนาดนั้นตั้งแต่แรก

⑩ MariaDB มีตัวอย่างจริงกับ RPAD

MariaDB Documentation แสดงตัวอย่าง RPAD() สร้าง String ขนาดใหญ่จนได้:

ERROR 1301 (HY000)
Result of rpad() was larger than
max_allowed_packet ... - truncated

⑪ RPAD คืออะไร

เป็น SQL String Function ที่สามารถเติม Character ไปทางขวาจน String มีความยาวตามที่กำหนด

ใน FiveM Resource ทั่วไปอาจไม่ได้ใช้โดยตรง แต่ตัวอย่างนี้พิสูจน์หลักการว่า:

Function สามารถสร้าง Result ใหญ่กว่า Packet Limit ได้

⑫ FiveM จะเจอจาก RPAD บ่อยไหม

ไม่จำเป็น

สิ่งที่ Server Owner ควรสนใจมากกว่าคือ:

  • Function ไหนใน Error
  • Query มาจาก Resource ไหน

⑬ Error จะบอก Function ได้

ข้อความ 1301 ใช้ Template:

Result of %s()

ดังนั้น %s จะถูกแทนด้วย Function ที่มีปัญหา.

⑭ นี่เป็นเบาะแสสำคัญมาก

ถ้า Error บอก:

Result of rpad()

ให้ค้น:

RPAD(

ใน SQL ของ Resource

⑮ ถ้าบอก Function อื่น

ค้น Function นั้น

ไม่ต้องไล่ Database ทุก Table

⑯ Error 1301 อาจมาจาก Custom SQL

โดยเฉพาะ Server ที่มี:

  • Reports
  • Analytics
  • Admin Panel
  • Logs
  • Custom Procedures

⑰ Gameplay Resource ทั่วไปอาจไม่ใช้ SQL Functions ซับซ้อน

ดังนั้นถ้าเกิดหลังติด Resource ใหม่:

ตรวจ SQL ของ Resource นั้นก่อน

⑱ Error หลัง Update Resource

Resource Version ใหม่อาจเพิ่ม:

  • SQL Function
  • Aggregation
  • JSON Processing

แล้วสร้าง Result ใหญ่ขึ้น

⑲ ตรวจ Changelog

โดยเฉพาะคำ:

database
query
migration
performance

⑳ Error หลัง Custom Developer แก้ Query

ยิ่งควรดู Query Diff

ไม่ควรเพิ่ม Server Limit ก่อนตรวจ Code

㉑ ตัวอย่าง Root Cause

เดิม Query สร้าง String สำหรับ Player เดียว

แต่หลังแก้ Code กลายเป็น:

ข้อมูล Players ทุกคน

ถูกนำมารวม

Result จึงโตมหาศาล

㉒ Missing WHERE สามารถเป็นต้นเหตุทางอ้อม

เช่นตั้งใจเลือกข้อมูล:

SELECT ...
FROM phone_messages
WHERE owner = ?;

แต่กลับ Queryข้อมูลทั้งหมด

㉓ ถ้า Function นำข้อมูลทั้งหมดไปรวมอีก

Result Size จะโตเร็วมาก

㉔ อย่าแก้ Missing WHERE ด้วยเพิ่ม Packet

ต้องแก้ Query Scope

㉕ JOIN ผิดก็เช่นกัน

JOIN ที่ไม่ถูกต้องสามารถสร้างจำนวน Rows มากกว่าที่ตั้งใจ

จากนั้น Function ที่รวม String อาจสร้าง Result ใหญ่มาก

㉖ ตัวอย่างเชิงแนวคิด

มี:

100 players

และ:

10,000 logs

ถ้า JOIN ผิด:

Result อาจเพิ่มจำนวนอย่างมหาศาลก่อนถูก Aggregate

㉗ ตรวจ JOIN Conditions

โดยเฉพาะ:

player_id
character_id
owner

㉘ GROUP_CONCAT เกี่ยวไหม

MariaDB มี GROUP_CONCAT() สำหรับรวมค่าหลาย Row เป็น String และมี Limit แยกชื่อ group_concat_max_len; MariaDB Documentation ปัจจุบันระบุ Default 1 MB สำหรับ Variable นี้.

㉙ อย่าสับสนสอง Limit

group_concat_max_len

กับ:

max_allowed_packet

เป็นคนละ Configuration

㉚ ถ้า Error บอก GROUP_CONCAT

ต้องตรวจทั้ง:

  • Query Design
  • จำนวน Rows
  • group_concat_max_len
  • Result Requirement

ก่อนปรับค่า

㉛ อย่าเพิ่มทั้งสองค่าเป็น 1GB

เพียงเพื่อให้ Query ผ่าน

㉜ ถ้ากำลังรวม Logs หลายล้านรายการ

Query Design น่าจะเป็นสิ่งที่ควรตรวจมากกว่า Packet Limit

㉝ Admin Panel เป็น Case ที่เห็นภาพง่าย

หน้า Admin ต้องแสดง:

100 รายการล่าสุด

แต่ SQL กลับรวม:

Logs ทั้งหมดตั้งแต่เปิด Server

นี่ไม่ใช่ Capacity Requirement ที่ดี

㉞ ใช้ Pagination เมื่อเหมาะสม

เช่น:

page 1
page 2
page 3

แทนการรวมทุก Row เป็น String เดียว

㉟ Phone Resource ก็เหมือนกัน

ไม่ควรต้องรวม Message History ทั้งหมดของทั้ง Server เพื่อแสดง Conversation หนึ่งรายการ

㊱ Character Data

Resource บางตัวอาจสร้าง JSON Result จาก:

  • Metadata
  • Inventory
  • Appearance

พร้อมกัน

㊲ ถ้าข้อมูลหนึ่งส่วนโตผิดปกติ

Result ทั้งก้อนอาจใหญ่

㊳ Inventory Metadata

ตรวจ Item ที่มี Metadata ขนาดมหาศาล เช่น:

  • Nested objects
  • Base64
  • History
  • Duplicate metadata

㊴ Double Serialization

ยังเป็นสาเหตุที่ควรตรวจ

ตัวอย่าง:

{"name":"water"}

ถูก Encode ซ้ำเป็น String

จากนั้น Encodeซ้ำอีก

㊵ แต่ Error 1301 ไม่ได้พิสูจน์ว่ามี Double Encode

เป็นเพียง Possible Application Root Cause

ต้องดู Dataจริง

㊶ ตรวจ LENGTH()

ถ้าต้องการวัด Field:

SELECT LENGTH(metadata)
FROM characters
WHERE id = ?;

㊷ หา Record ใหญ่ที่สุด

แนวคิด:

SELECT id, LENGTH(metadata)
FROM characters
ORDER BY LENGTH(metadata) DESC
LIMIT 20;

เปลี่ยน Table/Column ให้ตรง Serverจริง

㊸ ใช้ SELECT ก่อนแก้ Data

Read-only Diagnosis ปลอดภัยกว่าการ UPDATE/DELETEทันที

㊹ ถ้า Player ปกติ 10 KB

แต่ Player ที่ Error:

25 MB

ควรตรวจ Playerนั้นก่อนเพิ่ม Global Limit

㊺ ถ้าทุก Playerประมาณ 20 MB

อาจเป็น Resource Designจริง

แล้วค่อยประเมิน Configuration

㊻ Vehicle Properties

รถหนึ่งคันอาจมี JSONใหญ่ผิดปกติ

ตรวจ:

mods
extras
damage
metadata

㊼ ถ้า Error เฉพาะรถคันเดียว

ไม่ควรปรับ max_allowed_packet ทั้ง Database เป็นอันดับแรก

㊽ Housing

Furniture/Object Data สามารถสะสมจำนวนมาก

ถ้า Resourceรวมทุก Objectเข้ากับ Function Result:

Resultสามารถโต

㊾ Furniture Duplication Bug

เช่นทุก Saveทำ:

old objects
+
old objects
+
new objects

แทน Replace State

㊿ ขนาดจะโตทุก Save

นี่เป็น Bugที่ควรแก้ต้นทาง

51. Phone Attachments

Resourceที่นำ:

  • Images
  • Attachments
  • Large Text

มารวมเป็น String ต้องมี Size Control

52. Base64 มี Overhead

ดังนั้น Payloadรูปภาพที่ Encodeเป็น Textสามารถใหญ่กว่าข้อมูล Binaryต้นฉบับ

53. อย่ารับ Base64 ขนาดไม่จำกัดจาก Client

Server-side Validation ควรมี

54. Client Limit อย่างเดียวไม่พอ

เพราะ Clientสามารถถูกดัดแปลงได้

55. Resource ควรตรวจ Allowed Fields

ไม่ควรเอา Raw Client Objectทั้งก้อนไปสร้าง SQL Resultโดยไม่จำเป็น

56. Error 1301 เป็น Database Error

แต่ Root Cause อาจอยู่ตั้งแต่ NUI

Flow อาจเป็น:

NUI
↓
Client
↓
Server
↓
SQL
↓
MariaDB

57. ข้อมูลผิดตั้งแต่ NUI

Databaseเป็นเพียงจุดที่ตรวจพบปัญหาสุดท้าย

58. Error หลัง Player กดเมนูหนึ่ง

ช่วยจำกัด Resource ได้มาก

เช่น:

เปิด Phone
↓
Error 1301

ให้ตรวจ Phone Queryก่อน

59. Error ตอน Server Startup

อาจเป็น:

  • Report generation
  • Resource initialization
  • Data migration

ไม่จำเป็นต้องเป็น Gameplay Player Query

60. Error ตอน Scheduled Report

Custom Analyticsอาจรวมข้อมูลทั้งหมดเป็น String

ควรตรวจ Report Query

61. Error ตอน Backup

1301 ไม่ใช่ Error Backupโดยเฉพาะ

ถ้าเกิดระหว่าง Dumpให้ดู SQL/Functionที่ Errorจริง

62. Multi-value INSERT

MariaDB ระบุว่าขนาดข้อมูลใน Statement เดียวถูกจำกัดโดย max_allowed_packet.

63. แต่ Multi-value INSERT ใหญ่เกินมักสัมพันธ์กับ 1153มากกว่า

ถ้า Errorเป็น1301จริง:

เน้น Function Resultตามข้อความ Errorก่อน

64. อย่าปะปน Error Codes

อ่านข้อความเต็มเสมอ

65. SQL Function Result

คำว่า:

Result of FUNCTION()

เป็น Signatureสำคัญของ1301.

66. LONGTEXT ช่วยได้ไหม

ไม่ใช่ Fixโดยตรง

MariaDB Documentation แสดงแม้ LONGTEXT รองรับค่าขนาดใหญ่ แต่ Functionเช่น RPAD() ยังสามารถชน max_allowed_packet และเกิด1301ได้.

67. นี่พิสูจน์อะไร

Column Capacityใหญ่ไม่ได้ลบ Packet/Generated String Limit

68. BLOB/TEXT ก็เช่นกัน

MariaDB เตือนว่าค่าขนาดใหญ่มากใน BLOB/TEXT สามารถเกิน max_allowed_packet.

69. เปลี่ยนทุก Column เป็น LONGTEXT จึงไม่ใช่คำตอบ

อาจทำให้ Schemaต่างจาก Resourceต้นฉบับด้วย

70. LOAD_FILE() ก็ถูกจำกัด

MariaDB ระบุว่า Fileที่ LOAD_FILE() อ่านต้องมีขนาดต่ำกว่า max_allowed_packet.

71. FiveM ใช้ LOAD_FILE บ่อยไหม

ไม่จำเป็น

อย่า Debugตรงนี้ถ้า Queryไม่มี Functionนี้

72. หลักคือ Functionsบางชนิดมี Resultที่สัมพันธ์กับ Packet Limit

ดู Functionจริงใน Error

73. Error Function RPAD

ถามว่า Resourceต้องสร้าง Stringขนาดนั้นเพื่ออะไร

74. ถ้าเป็น Test Query

แก้ Test

75. ถ้าเป็น Production Query

ตรวจ:

  • Required Length
  • Input Data
  • Calculation

76. Parameterผิดสามารถทำ Functionสร้าง Resultใหญ่

ตัวอย่าง:

ตั้งใจ:

length = 100

แต่ Variableผิดกลายเป็น:

length = 100000000

77. Resultจึงใหญ่

นี่เป็น Application Parameter Bug

78. อย่าเพิ่ม Packetให้รองรับ lengthที่ผิด

แก้ Parameter

79. Negative/Overflow Calculation

ค่าความยาวหรือ Countที่คำนวณผิดอาจทำ Resourceสร้าง Requestใหญ่

80. Server-side Range Validationช่วยได้

เช่นกำหนด Maximumที่เหมาะกับ Feature

81. User Inputไม่ควรควบคุม SQL Result Sizeโดยตรง

โดยไม่มี Validation

82. Playerตั้ง Noteยาวมาก

ถ้า Featureมี Note:

ควรกำหนดขนาดตาม Design

83. Player Name/Business Nameก็เช่นกัน

ไม่ควรปล่อย Arbitrary Length

84. แต่ Error1301จากข้อความผู้เล่นทั่วไปไม่น่าจะเกิด

หาก Schema/Validationสมเหตุสมผล

ถ้าเกิดให้ตรวจว่ามี Aggregation/Functionอื่นร่วมด้วย

85. Errorหลังเพิ่ม Localization

Resourceอาจรวม Translation Stringsจำนวนมาก

แต่ควรดู Queryจริง

86. Errorหลังเพิ่ม Server Logs

Logging Resourceอาจ Aggregate Logsก่อน SaveหรือReport

87. Logsโตเรื่อย ๆ

ถ้า Queryรวมทั้งหมด:

วันนี้ผ่าน

เดือนหน้าชน Limit

88. เพิ่ม Packetไม่ใช่ Long-term Fix

เพราะ Tableยังโต

89. ต้อง Scopeข้อมูล

เช่น:

  • Time range
  • Pagination
  • LIMIT

ตาม Featureจริง

90. Retention Policyช่วยได้

สำหรับ Logsที่ไม่ต้องเก็บตลอดไป

แต่ต้องเป็น Policyของ Server ไม่ใช่ลบข้อมูลสุ่ม

91. Transaction Historyต่างจาก Debug Logs

ข้อมูลการเงินอาจต้องเก็บนานกว่า Debug Logs

อย่าใช้ Retentionเดียวกันทุก Table

92. Error1301หลัง Serverเปิดมานาน

นี่เป็น Patternที่ควรตรวจ Table Growth

93. Error1301หลัง Player Countเพิ่ม

ถ้า Query Aggregateทุก Player:

จำนวน Playersอาจทำ Resultโต

94. Example

Resourceสร้าง Online Player Listเป็น String

50 Playersผ่าน

500 Playersอาจใหญ่ขึ้น

แต่ถ้าชน Packet Limitระดับหลาย MBจากรายชื่อผู้เล่นธรรมดา ก็ต้องสงสัย Query/Dataที่ผิดมากกว่าแค่ Player Count

95. Error1301หลัง Import Data

Legacy Dataอาจมี Stringsใหญ่ผิดปกติ

96. ตรวจ Source Data

ก่อนสรุปว่า Environmentใหม่มี Limitต่ำ

97. Errorหลังย้าย Hosting

อีกกรณีหนึ่งคือ Databaseใหม่มี max_allowed_packet ต่ำกว่า Serverเก่า

98. Compare Configuration

ดู:

SHOW VARIABLES LIKE 'max_allowed_packet';

ทั้ง Environmentเก่าและใหม่ถ้ามีข้อมูล

99. อย่า Copy Configทั้งหมด

Hardware/Versionอาจต่างกัน

100. เปรียบเทียบเฉพาะค่าที่เกี่ยวก่อน

101. Errorหลัง MariaDB Upgrade

ตรวจ Runtime Valueหลัง Upgrade

เพราะ Configuration Fileที่คิดว่าใช้อาจไม่ใช่ค่าที่ Serverกำลังใช้จริง

102. Runtime Valueสำคัญที่สุด

ใช้:

SHOW VARIABLES LIKE 'max_allowed_packet';

หลังเปลี่ยน

103. Configuration Persistence

การเปลี่ยนค่าบางรูปแบบอาจไม่คงอยู่หลัง Restart

วิธี Persistent Configurationขึ้นกับ MariaDB Versionและ Environment.

104. อย่าเดา Path Config

อาจเป็น:

  • Linux package
  • Docker
  • Managed hosting
  • Panel

ต่างกัน

105. เพิ่ม max_allowed_packet ได้ไหม

ได้เมื่อ Requirementจริงต้องสร้าง/ส่งข้อมูลขนาดนั้น และ Query/Dataถูกต้องแล้ว

106. ควรเพิ่มเท่าไร

ไม่มีตัวเลข FiveMสากล

ต้องดู:

actual maximum payload/result
+
reasonable margin

107. อย่าตั้งสูงสุดเพราะสะดวก

ค่าที่ Databaseรองรับสูงไม่ได้หมายความว่าควรใช้สูงสุด

108. Resultขนาดใหญ่มากยังมี Cost

DatabaseและApplicationต้องจัดการข้อมูลนั้นใน Memory/Networkตาม Workflow

109. Optimize Queryก่อน

ถ้า Resultไม่จำเป็นต้องใหญ่

นี่เป็น Fixที่ดีกว่า

110. Group Concatenation

หาก Resourceใช้ GROUP_CONCAT() ให้จำว่า MariaDBมี Limitเฉพาะ group_concat_max_len; ค่า Defaultที่ Documentationปัจจุบันระบุคือ 1 MB.

111. อย่าเพิ่ม group_concat_max_lenจนมหาศาลทันที

ถามก่อนว่า:

ต้องรวมข้อมูลจำนวนนี้เป็น Stringเดียวจริงหรือไม่

112. JSON Arrayใหญ่

บาง Queryอาจสร้าง JSON/serialized outputใหญ่ใน Database

ถ้า Applicationสามารถรับ Rowsธรรมดา:

อาจไม่ต้อง Generate giant string

แต่ขึ้นกับ Resource

113. Third-party Resource

อย่า Rewrite Queryทันทีถ้ามี Official Update

ตรวจ Developerก่อน

114. Closed-source Resource

ส่งข้อมูลต่อไปนี้ให้ Developer:

Error 1301
Function name
Resource version
Featureที่ทำให้เกิด
max_allowed_packet

115. ไม่ต้องส่ง Password

116. อย่าส่ง Player Databaseทั้งหมด

Maskข้อมูลส่วนบุคคลก่อน

117. Error1301กับ2006

ถ้า Connectionภายหลังใช้ไม่ได้:

อาจมี Errorหลายบรรทัดตามกัน

แต่ถ้า1301เป็น Errorแรก ให้แก้ Function Result/Packet Limitก่อน

118. Error1301กับ2013

หลักเดียวกัน

Lost Connectionอาจเป็นอาการตามมาในบาง Stack แต่1301มี Root Clueชัดกว่า

119. Error1301กับ1153

1153ชี้ Packetใหญ่

1301ชี้ Resultของ Functionใหญ่และถูก Truncated

120. Error1301กับ1162

1162ชี้ Result Stringยาวเกิน

1301ชี้ Function Resultเกินและถูก Truncate.

121. Error1301กับ1406

1406คือ Column Capacity

ไม่ใช่ Function Result Limit

122. Error1301กับ1265

1265คือ Data Truncated for Column

1301มีข้อความเฉพาะเรื่อง max_allowed_packet

123. Quick Diagnosis

1301
↓
Function อะไร?
↓
Query ไหน?
↓
Input Data เท่าไร?
↓
Result ควรใหญ่ขนาดนั้นไหม?
↓
max_allowed_packet เท่าไร?
↓
แก้ Query/Data
หรือ
เพิ่ม Limitอย่างมีเหตุผล

124. ถ้าเกิด Resourceเดียว

ตรวจ SQLของ Resourceนั้น

125. ถ้าเกิด Playerเดียว

ตรวจ Player Data Size

126. ถ้าเกิด Vehicleเดียว

ตรวจ Vehicle JSON

127. ถ้าเกิด Houseเดียว

ตรวจ Furniture Data

128. ถ้าเกิดหลัง Tableโต

ตรวจ Query Scope

129. ถ้าเกิดหลัง Hosting Move

ตรวจ Configuration

130. ถ้าเกิดหลัง Resource Update

ตรวจ Query/Serialization/Migration

131. ถ้าเกิดทุก Server Restart

ตรวจ Startup QueryหรือReportที่ Generate Data

132. สิ่งที่ไม่ควรทำ

  • เพิ่ม max_allowed_packet สูงสุดทันที
  • เปลี่ยนทุก Column เป็น LONGTEXT
  • ลบ Player Data
  • ลบ Inventory
  • ปิด SQL Mode
  • Restart MariaDBซ้ำ
  • Retry Queryไม่จำกัด

133. Clear FiveM Cacheช่วยไหม

โดยทั่วไปไม่เกี่ยวกับ MariaDB Function Result Size

134. Restart FiveMช่วยไหม

ไม่เปลี่ยนขนาด Resultหรือ Packet Limit

135. Restart MariaDBช่วยไหม

ไม่แก้ Queryที่สร้าง Resultใหญ่เกิน

136. Reinstall MariaDBช่วยไหม

ไม่ควรทำ

Error1301เป็น Query/Data/Configuration Problemมากกว่า Installation Problem

137. เพิ่ม RAMช่วยไหม

ไม่ใช่ Fixตรงของ Error1301

แม้ Capacityของ Serverมีความสำคัญ แต่ Errorนี้มี Limitชัดเจนคือ max_allowed_packet

138. เพิ่ม max_connectionsช่วยไหม

ไม่

max_connectionsเกี่ยวกับจำนวน Connections

ไม่ใช่ Result Size

139. เพิ่ม net_read_timeoutช่วยไหม

ไม่ใช่ Fixหลักของ1301

140. เพิ่ม net_write_timeoutช่วยไหม

เช่นเดียวกัน

อ่านข้อความ Errorก่อนปรับ Variableอื่น

141. FiveM Error 1301 FAQ

FiveM MySQL Error 1301 คืออะไร

MariaDB Error1301 / SQLSTATE HY000 / ER_WARN_ALLOWED_PACKET_OVERFLOWED หมายถึง Resultของ Functionมีขนาดใหญ่กว่า max_allowed_packet และถูก Truncate.

max_allowed_packet คืออะไร

MariaDBใช้เป็น Limitสำหรับ Packetและ Generated/Intermediate Stringบางประเภท.

ดูค่าอย่างไร

SHOW VARIABLES LIKE 'max_allowed_packet';

RPAD ทำ Error1301ได้ไหม

ได้ MariaDB Documentationมีตัวอย่าง RPAD()สร้าง Resultใหญ่กว่า max_allowed_packet แล้วเกิด Error1301.

Inventory JSONเกี่ยวไหม

ถ้า Resourceนำ Inventory Dataจำนวนมากไปสร้าง String/Function Result หรือ JSONโตผิดปกติ ก็ควรตรวจ

Vehicle Propertiesเกี่ยวไหม

ควรตรวจเมื่อ Errorเกิดเฉพาะรถหนึ่งคันหรือ Queryที่ประมวลผล Vehicle JSON

Housing Furnitureเกี่ยวไหม

ควรตรวจหาก Resourceรวม Furnitureจำนวนมากเป็น Stringหรือ JSONก้อนใหญ่

Phone Dataเกี่ยวไหม

ควรตรวจ Query Scopeโดยเฉพาะ Resourceที่รวม Message/Contact Dataจำนวนมาก

GROUP_CONCATเกี่ยวไหม

GROUP_CONCAT()สร้าง Stringจากหลาย Rowsและมี group_concat_max_len เป็น Limitเฉพาะของมัน ซึ่ง MariaDB Documentationปัจจุบันระบุ Default 1 MB.

เพิ่ม group_concat_max_lenแก้1301ได้ไหม

ขึ้นกับ Function/Queryจริง อย่าปรับหาก Errorไม่ได้มาจาก GROUP_CONCAT และอย่าใช้แทนการแก้ Queryที่รวมข้อมูลมากเกิน

LONGTEXTช่วยไหม

ไม่ใช่ Fixตรง MariaDBแสดงว่าแม้ทำงานกับ LONGTEXT Function Resultยังสามารถชน max_allowed_packetได้.

BLOB/TEXTทำให้ชน Packet Limitได้ไหม

ได้ MariaDBเตือนว่าค่าขนาดใหญ่มากสามารถเกิน max_allowed_packet.

Errorเกิด Playerเดียวทำอย่างไร

วัดขนาด JSON/TEXTของ Playerนั้นเทียบกับ Playerปกติ

Errorเกิดทุก Playerทำอย่างไร

ตรวจ Query, Function, JOINและ Resource Versionระดับระบบ

Missing WHEREเกี่ยวไหม

ได้ในเชิง Query Design เพราะ Resourceอาจนำข้อมูลมากกว่าที่ตั้งใจไปสร้าง Result Stringขนาดใหญ่

JOINผิดเกี่ยวไหม

ได้ เพราะอาจสร้าง Rowsจำนวนมหาศาลก่อน Functionประมวลผล

SELECT *เกี่ยวไหม

ถ้า Resourceโหลด Columnsใหญ่ที่ไม่ได้ใช้ ควรตรวจว่าจำเป็นจริงหรือไม่

Errorหลัง Resource Updateทำอย่างไร

ตรวจ Changelog, Query Changes, SerializationและMigration

Errorหลังย้าย Hostingทำอย่างไร

ตรวจ Runtime max_allowed_packetของ Environmentใหม่

Errorหลัง MariaDB Upgradeทำอย่างไร

ตรวจ Configurationที่ถูก Loadและ Runtime Variableจริง

Error1301กับ1153ต่างกันอย่างไร

1153คือ Packetใหญ่กว่า max_allowed_packet ส่วน1301คือ Function Resultใหญ่กว่า Limitและถูก Truncate.

Error1301กับ1162ต่างกันอย่างไร

1162คือ Result Stringยาวเกิน Packet Limit ส่วน1301มี Contextของ Function Resultและ Truncation

Error1301กับ1406ต่างกันอย่างไร

1406คือข้อมูลยาวเกิน Column ส่วน1301เกี่ยวกับ Function Resultกับ max_allowed_packet

Restart MariaDBช่วยไหม

ไม่แก้ Function Resultที่ใหญ่เกิน Limit

Clear FiveM Cacheช่วยไหม

โดยทั่วไปไม่เกี่ยว

ต้องลบ Characterไหม

ไม่

ควร Backupและวัด Dataก่อน

ต้องเพิ่ม max_allowed_packetไหม

เพิ่มเมื่อ Query/Dataถูกต้องและ Requirementต้องรองรับ Resultขนาดใหญ่จริง ไม่ควรเพิ่มเพียงเพราะต้องการให้ Errorหาย

ต้อง Backupไหม

ควร Backupก่อน:

  • JSON Cleanup
  • Metadata Rewrite
  • Migration
  • Schema/Data Changes

โดยเฉพาะ Player Assets

สรุป FiveM MySQL Result Was Larger Than max_allowed_packet Error 1301

FiveM MySQL/MariaDB Error 1301 Result of ... was larger than max_allowed_packet - truncated หมายถึง SQL Function กำลังสร้าง Result ที่มีขนาดใหญ่กว่า max_allowed_packet โดย MariaDBกำหนด Errorนี้เป็น ER_WARN_ALLOWED_PACKET_OVERFLOWED, SQLSTATE HY000.

ให้จำ Flow นี้ไว้:

Error 1301
↓
Function ไหน?
↓
Query มาจาก Resource ไหน?
↓
ข้อมูลถูก Scope ถูกหรือไม่?
↓
Result ใหญ่ผิดปกติหรือไม่?
↓
ตรวจ max_allowed_packet
↓
แก้ Query / JSON / Data Growth
↓
เพิ่ม Limitเฉพาะเมื่อจำเป็นจริง

สิ่งที่ comsiam แนะนำคืออย่าเริ่มจากเพิ่ม max_allowed_packet อย่างเดียว หาก Queryกำลังรวม Logsทั้ง Table, JOINผิด, Missing WHERE หรือ JSONของ Playerโตทุกครั้งที่ Save การเพิ่ม Limitเพียงทำให้ Queryผิดสามารถสร้าง Resultใหญ่ขึ้นอีก และ MariaDBเองระบุว่า Variableนี้ควบคุมทั้ง Packetและ Generated/Intermediate String.

อีกหลักที่ comsiam แนะนำคือให้ดูชื่อ Functionจาก Error1301ก่อน แล้วไล่กลับไปหา Resourceและ Input Data ถ้าข้อมูลใหญ่เพราะ Requirementจริงและ Queryถูกต้องจึงค่อยเพิ่ม max_allowed_packetอย่างมีเหตุผล แต่ถ้าขนาดโตจาก Serialization, Aggregationหรือ Data Growth Bug ให้แก้ที่ Resourceก่อน วิธีนี้จะป้องกันไม่ให้ Errorกลับมาเมื่อ Serverมี Playersหรือข้อมูลมากขึ้นในอนาคต

Comments

Popular posts from this blog

FiveM ยังน่าเล่นไหม? Enhanced เปลี่ยน FiveM แค่ไหน

FiveM คืออะไร เล่นอย่างไร สำหรับมือใหม่ เริ่มต้นตั้งแต่ศูนย์

วิธีตั้ง Admin Permission ด้วย add_ace และ add_principal FiveM แบบละเอียด