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:
1153Got a packet bigger than'max_allowed_packet' bytes
เน้น Packet ที่ใหญ่เกิน Limit
ส่วน 1301:
Result of functionwas larger than max_allowed_packet- truncated
เน้น ผลลัพธ์ที่ Function กำลังสร้าง ใหญ่เกิน Limit.
④ ต่างจาก Error 1162 อย่างไร
หัวข้อ 291:
1162Result 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 thanmax_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
โดยเฉพาะคำ:
databasequerymigrationperformance
⑳ Error หลัง Custom Developer แก้ Query
ยิ่งควรดู Query Diff
ไม่ควรเพิ่ม Server Limit ก่อนตรวจ Code
㉑ ตัวอย่าง Root Cause
เดิม Query สร้าง String สำหรับ Player เดียว
แต่หลังแก้ Code กลายเป็น:
ข้อมูล Players ทุกคน
ถูกนำมารวม
Result จึงโตมหาศาล
㉒ Missing WHERE สามารถเป็นต้นเหตุทางอ้อม
เช่นตั้งใจเลือกข้อมูล:
SELECT ...FROM phone_messagesWHERE 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_idcharacter_idowner
㉘ 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 1page 2page 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 charactersWHERE id = ?;
㊷ หา Record ใหญ่ที่สุด
แนวคิด:
SELECT id, LENGTH(metadata)FROM charactersORDER BY LENGTH(metadata) DESCLIMIT 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ใหญ่ผิดปกติ
ตรวจ:
modsextrasdamagemetadata
㊼ ถ้า 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 1301Function nameResource versionFeatureที่ทำให้เกิด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
Post a Comment