FiveM MySQL Too Many Connections Error 1040 แก้อย่างไร? ตรวจ Connection Pool, max_connections และ Resource ที่เปิด Connection ค้าง

 ปัญหา FiveM MySQL/MariaDB ขึ้น Too many connections หรือ Error 1040 เกิดเมื่อจำนวน Connection ที่เปิดเข้าหา Database ถึงขีดจำกัดที่ MariaDB อนุญาต ทำให้ Connection ใหม่ถูกปฏิเสธและ FiveM Resource ที่ต้องใช้ Database เริ่มทำงานไม่ได้

MariaDB กำหนด Error 1040, SQLSTATE 08004 เป็น ER_CON_COUNT_ERROR พร้อมข้อความ Too many connections.

ตัวอย่าง Error:

ERROR 1040 (08004): Too many connections

หรือใน FiveM Console อาจเห็นข้อความลักษณะ:

ER_CON_COUNT_ERROR
Too many connections
Database connection failed
Unable to acquire database connection

Error นี้มักเกี่ยวข้องกับ:

  • Connection Pool
  • Resource เปิด Connection มากเกิน
  • Connection ไม่ถูกคืน Pool
  • Queries ค้าง
  • Transactions ค้าง
  • Database Load สูง
  • max_connections ต่ำกว่าความต้องการจริง
  • มี Application อื่นใช้ MariaDB ตัวเดียวกัน
  • FiveM Resources เปิด Database Clients ซ้ำ
  • Server Restart แล้ว Resources เชื่อมพร้อมกันจำนวนมาก

สิ่งสำคัญคือ:

อย่าเห็น Error 1040 แล้วเพิ่ม max_connections จาก 151 เป็น 5,000 หรือ 10,000 ทันที

เพราะ MariaDB เองเตือนว่า Too many connections อาจเป็นเพียงอาการของปัญหาอื่น เช่น Connections ที่ถูกสร้างมากเกินความจำเป็น และจำนวน Connections ที่สูงขึ้นยังเพิ่มการใช้ทรัพยากรของ Server.

แนวทางที่ถูกต้องคือ:

ดู Connections ปัจจุบัน → ดู Peak → ดู Processlist → หา Resource ที่เปิด Connection → ตรวจ Pool → ตรวจ Queries/Transactions ค้าง → แล้วค่อยประเมิน max_connections

① Error 1040 คืออะไร

MariaDB ระบุ:

1040
08004
ER_CON_COUNT_ERROR
Too many connections

หมายความว่า Database ไม่สามารถรับ Connection ใหม่ได้เนื่องจากถึงข้อจำกัดจำนวน Connections.

② max_connections คืออะไร

max_connections กำหนดจำนวน Client Connections พร้อมกันสูงสุดที่ MariaDB Server อนุญาต.

③ MariaDB Default เท่าไร

MariaDB Documentation ปัจจุบันระบุ Default ของ max_connections เป็น:

151

แต่ Configuration จริงของ Hosting หรือ MariaDB Version ที่ใช้อาจถูกผู้ดูแลเปลี่ยนไว้ จึงควรตรวจ Server จริงก่อน.

④ ดูค่าปัจจุบันอย่างไร

ใช้:

SHOW VARIABLES LIKE 'max_connections';

หรือ:

SELECT @@max_connections;

เพื่อดูค่าที่ Server กำลังใช้อยู่

⑤ ถ้า max_connections = 151

ไม่ได้หมายความว่า FiveM ใช้ได้ 151 Players เท่านั้น

⑥ Player 1 คนไม่เท่ากับ Database Connection 1 เสมอไป

FiveM Resources โดยทั่วไปไม่ได้จำเป็นต้องเปิด Connection ใหม่ถาวรหนึ่ง Connection ต่อ Player

Database Wrapper/Pool สามารถใช้ Connections ร่วมกันเพื่อประมวลผล Queries จาก Players จำนวนมาก

⑦ ดังนั้น Players 200 คนไม่ได้แปลว่าต้อง max_connections 200

ต้องดู:

  • Connection Pool
  • Concurrent Queries
  • Resource Architecture

มากกว่าดูจำนวน Players อย่างเดียว

⑧ Threads_connected คืออะไร

MariaDB แนะนำให้ดู Threads_connected เพื่อดูจำนวน Connections ปัจจุบัน และ Max_used_connections เพื่อดูจำนวนสูงสุดที่เคยใช้.

⑨ ตรวจ Connections ปัจจุบัน

ใช้:

SHOW GLOBAL STATUS LIKE 'Threads_connected';

⑩ ตรวจ Peak Connections

ใช้:

SHOW GLOBAL STATUS LIKE 'Max_used_connections';

MariaDB ระบุว่า Threads_connected แสดงสถานะปัจจุบัน ขณะที่ Max_used_connections มีประโยชน์ในการดู Peak ที่เคยเกิดขึ้น.

⑪ ตัวอย่าง

สมมติ:

max_connections = 151
Threads_connected = 32
Max_used_connections = 149

หมายความว่า:

ตอนนี้มี 32 Connections

แต่เคยขึ้นไปถึง 149

ซึ่งอยู่ใกล้ Limit มาก

⑫ ถ้า Max_used_connections ต่ำมาก

เช่น:

Max_used_connections = 20

แต่เห็น Error 1040

ควรตรวจ:

  • Server Restart/Status Reset
  • Database ที่กำลังดูถูกตัวหรือไม่
  • Error มาจาก Database Instance เดียวกันหรือไม่

⑬ มี Counter สำหรับ Connection ที่ถูกปฏิเสธไหม

MariaDB มี Status Variable:

Connection_errors_max_connections

สำหรับนับ Connections ที่ถูกปฏิเสธเพราะถึง max_connections.

⑭ ตรวจได้ด้วย

SHOW GLOBAL STATUS
LIKE 'Connection_errors_max_connections';

⑮ ถ้าค่านี้เพิ่มขึ้นเรื่อย ๆ

เป็นหลักฐานที่ดีว่า Server กำลังชน Limit จริง

⑯ SHOW PROCESSLIST สำคัญมาก

ใช้:

SHOW FULL PROCESSLIST;

เพื่อดู Connections/Threads ที่กำลังเชื่อม MariaDB

⑰ ดูอะไรบ้าง

สนใจ:

  • User
  • Host
  • Database
  • Command
  • Time
  • State
  • Info

⑱ ถ้ามี Connections จำนวนมากจาก User เดียว

เช่น:

fivem_user

อาจเป็น FiveM Server หรือ Application อื่นที่ใช้ Credential เดียวกัน

⑲ ถ้ามี Connections จำนวนมากเป็น Sleep

ต้องตรวจ Connection Pool

⑳ Sleep แปลว่า Connection Leak เสมอไหม

ไม่

Connection Pools สามารถเก็บ Idle Connections ไว้เพื่อ Reuse ได้

ดังนั้น Connections ที่เป็น Sleep จำนวนหนึ่งอาจเป็นปกติ

㉑ ปัญหาคือเมื่อ Sleep สูงผิดปกติ

เช่น Pool ควรมีจำนวนจำกัด แต่ Connections กลับเพิ่มต่อเนื่องจนเต็ม Server

นี่อาจบอกว่า:

  • Pools มากเกิน
  • Resource สร้าง Clients ซ้ำ
  • Connections ไม่ถูกจัดการตามที่ Library ออกแบบ

㉒ Connection Pool คืออะไร

แทนการ:

เปิด connection
query
ปิด
เปิด connection
query
ปิด

ทุกครั้ง

Pool จะรักษากลุ่ม Connections ไว้แล้ว Reuse สำหรับ Queries หลายรายการ

㉓ Pool มีประโยชน์

ช่วยลดค่าใช้จ่ายในการสร้าง Connection ซ้ำ

แต่ต้องกำหนดขนาดให้สัมพันธ์กับ Workload และ Database Capacity

㉔ Pool Size ใหญ่ที่สุดดีที่สุดไหม

ไม่

ถ้า FiveM มี Resource/Service หลายตัวและแต่ละตัวตั้ง Pool ใหญ่เกิน:

จำนวน Connections รวมอาจเกิน MariaDB Limit

㉕ ตัวอย่าง

สมมติ:

Resource A pool = 50
Resource B pool = 50
Resource C pool = 50
Website = 30
Admin tools = 10

รวมศักยภาพ:

190 connections

ถ้า MariaDB Limit ต่ำกว่านั้นก็มีโอกาสชน

㉖ FiveM Server ควรมี Database Wrapper หลัก

โดยทั่วไป Resources ที่รองรับ Database Wrapper ร่วมกันควรใช้ Architecture ตาม Framework/Wrapper ที่ออกแบบไว้

ไม่ควรสร้าง Database Client ใหม่เองในทุก Resource หาก Resource Ecosystem ไม่ต้องการเช่นนั้น

㉗ Resource สร้าง Pool ใหม่ทุกครั้งที่ Event ทำงาน

นี่เป็น Bug ที่ร้ายแรง

ตัวอย่างแนวคิดที่ผิด:

player opens phone
↓
create database pool
↓
player closes phone
↓
poolยังอยู่

ทำซ้ำหลายครั้ง Connections สามารถเพิ่มขึ้นได้

㉘ Pool ควรถูกสร้างเมื่อไร

ตาม Database Library Design โดยทั่วไปควรมี Lifecycle ชัดเจน

ไม่ใช่สร้าง Pool ใหม่ต่อ:

  • Query
  • Player
  • Event

โดยไม่มีเหตุผล

㉙ Database Wrapper ของ FiveM อาจมี Pool อยู่แล้ว

ถ้าใช้อยู่:

อย่าเพิ่ม MySQL Client อีกชั้นโดยไม่จำเป็น

㉚ Error หลังติดตั้ง Resource ใหม่

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

ถ้าเดิม:

Threads_connected = 20

หลังเปิด Resource ใหม่ขึ้นเป็น:

100+

ทันที

ควรตรวจ Resource นั้น

㉛ Error หลัง Update Resource

Version ใหม่อาจเปลี่ยน:

  • Database Client
  • Pool Settings
  • Query Frequency

ควรตรวจ Changelog/Config

㉜ Error หลัง Update Database Wrapper

ตรวจ:

  • Pool Config
  • Connection String
  • Resource Compatibility

㉝ อย่าใช้ Database Wrappers สองตัวโดยไม่จำเป็น

เช่น Legacy Resources บางตัวอาจยังใช้ Wrapper เก่า

ขณะที่ Core ใช้ Wrapper ใหม่

㉞ ทำได้ไหม

ขึ้นอยู่กับ Compatibility

แต่ Connections ทั้งสองชุดจะรวมกันที่ MariaDB

㉟ Error 1040 หลัง Migration Wrapper

ตรวจว่า Wrapper เก่าถูกปิดจริงหรือยัง

㊱ Duplicate Resource

ตัวอย่าง:

oxmysql
oxmysql-old
oxmysql-new

หรือ Resource Database Client ถูก Start ซ้ำผ่าน Config ที่ต่างกัน

㊲ ตรวจ server.cfg

ดู:

  • ensure
  • start

ว่ามี Resource Databaseซ้ำหรือไม่

㊳ Error หลัง Restart FiveM

ตอน Start Resources จำนวนมากอาจเปิด Connections ใกล้พร้อมกัน

㊴ ถ้า Error เกิดเฉพาะช่วง Startup 2–3 วินาที

ต้องดูว่าเป็น Temporary Burst หรือ Pool/Retry Storm

㊵ Retry Storm คืออะไร

เมื่อหลาย Resources เชื่อมไม่ได้แล้ว Retryพร้อมกันอย่างรวดเร็ว

เช่น:

100 requests fail
↓
100 retry immediately
↓
databaseยังเต็ม
↓
100 retryอีก

สามารถเพิ่ม Load ได้

㊶ Retry ควรมี Control

ไม่ควร Retryไม่มี Limit แบบ Tight Loop

㊷ Backoff คืออะไร

การเว้นช่วงก่อน Retry และอาจเพิ่มช่วงรอในครั้งถัดไป

ช่วยไม่ให้ Clients ทั้งหมดกลับมาเชื่อมพร้อมกันทันที

㊸ แต่ Server Owner ไม่ควร Patch Retryเองทันที

ถ้าใช้ Third-party Database Wrapper:

ตรวจ Official Version/Configก่อน

㊹ Too many connections เกิดจาก Query ช้าได้ไหม

ได้ในเชิงระบบ

ถ้า Queries ใช้เวลานาน Connections อาจถูก Occupy นานขึ้น ทำให้ Poolต้องรอหรือมี Concurrent Workสะสม

㊺ Query ค้างยิ่งรุนแรง

เช่น:

  • Lock Wait
  • Long-running SELECT
  • Large UPDATE

Connections อาจถูกใช้งานนาน

㊻ Error 1205 และ 1213 ที่ผ่านมาเกี่ยวกันได้ไหม

ได้ในเชิงอาการร่วม

ถ้า Server มี:

  • Lock Contention
  • Transactions ยาว

Connections สามารถถูก Occupy นานขึ้น

แต่ Error 1040 ไม่ควรถูกสรุปว่าเกิดจาก Deadlockเสมอ

㊼ ต้องดู Evidence

  • Processlist
  • Threads_connected
  • Query Duration

㊽ Transaction เปิดค้าง

อาจทำ Connection ค้างใน Poolนาน

㊾ Resource ลืม Commit/Rollback

สามารถสร้างปัญหาทั้ง:

  • Locks
  • Connections

㊿ Error 1040 อาจเป็นปลายเหตุ

Root Causeอาจเป็น Error1205/Long Queryที่เกิดก่อนหน้า

51. อ่าน Console ย้อนขึ้นไป

ดูว่า ก่อน Too many connections มี:

Lock wait timeout
Slow query
Database timeout

หรือไม่

52. Connection Leak คืออะไร

ในทาง Application หมายถึง Connection ถูก Acquire/สร้างแล้วไม่ถูก Release/Returnตาม Lifecycleที่ควรเป็น

53. ตัวอย่าง

acquire
↓
query
↓
error
↓
function return
↓
release ไม่ถูกเรียก

54. Success Path อาจปกติ

แต่ Error Path Leak

จึงเกิดเฉพาะช่วง Databaseมี Error

55. Resource Developer ต้องตรวจทุก Path

  • Success
  • Failure
  • Exception
  • Timeout

56. Connections ไม่ควรเพิ่มต่อเนื่องไม่มีวันลด

ถ้า Workloadกลับสู่ปกติแล้ว Connectionsยังสูงขึ้นเรื่อย ๆ:

ควรตรวจ Pool/Leak

57. Connection Pool กับ Persistent Connections ต่างไหม

เป็น Conceptsที่เกี่ยวกันแต่ Implementationต่างตาม Client Library

Server Ownerควรใช้ Terminology/Settingsตาม Libraryจริง

58. อย่า Copy MySQL Pool Setting จาก Node.js Appทั่วไป

ไปใช้ FiveM Resourceโดยไม่ดู Database Wrapper

59. Connection String หลายชุด

บาง Serverมี:

Core DB
Logs DB
Phone DB
Website DB

60. ถ้าทั้งหมดชี้ MariaDB Instanceเดียวกัน

Connections รวมกัน

แม้ Database Namesต่างกัน

61. Website ก็ใช้ Connections

ถ้า FiveM Database Serverเดียวกับ:

  • Website
  • Admin Panel
  • API

ทุก Applicationอาจใช้ Connection Slotsร่วมกัน

62. จึงต้องดูทั้ง Server

ไม่ใช่ดู FiveMอย่างเดียว

63. Hosting Shared Database

ยิ่งต้องรู้ว่า Limitเป็น:

  • Per server
  • Per user
  • Provider-specific

อย่างไร

64. ถ้าไม่มีสิทธิ์เปลี่ยน max_connections

ต้องติดต่อ Hosting Providerหรือปรับ Application Usage

65. แต่ก่อนขอเพิ่ม Limit

ควรเก็บหลักฐาน:

Threads_connected
Max_used_connections
Connection_errors_max_connections

66. MariaDB แนะนำแนวคิดเดียวกัน

หน้า Handling Too Many Connections แนะนำดูทั้ง Current Connections และ Peak ก่อนตัดสินใจเปลี่ยน Configuration.

67. ตรวจ Threads_connected

SHOW GLOBAL STATUS LIKE 'Threads_connected';

68. ตรวจ Max_used_connections

SHOW GLOBAL STATUS LIKE 'Max_used_connections';

69. ตรวจ Limit

SHOW VARIABLES LIKE 'max_connections';

70. ตรวจ Error Counter

SHOW GLOBAL STATUS
LIKE 'Connection_errors_max_connections';

MariaDB มี Status Variable นี้เพื่อรายงาน Connections ที่ถูกปฏิเสธเมื่อถึง Limit.

71. Diagnosis Matrix

ถ้า:

Threads_connected ≈ max_connections

จริง

Serverกำลังใกล้เต็มในขณะนั้น

72. ถ้า:

Max_used_connections ≈ max_connections

แสดงว่าเคยมี Peakใกล้ Limit

73. ถ้า Error Counterเพิ่ม

แสดงว่ามี Connectionsถูก Rejectเนื่องจาก Max Connections

74. สามข้อมูลนี้รวมกันแข็งแรงกว่า Guess

75. แล้วดู Processlist

SHOW FULL PROCESSLIST;

หา:

  • Connectionจากไหน
  • Sleepเท่าไร
  • Queriesทำอะไร

76. ถ้ามี Sleep 140 จาก Userเดียว

ควรตรวจ Poolของ Applicationนั้น

77. ถ้ามี Running Queriesจำนวนมาก

ตรวจ Query Performance/Load

78. ถ้ามี Queryหนึ่งใช้เวลานาน

ดูว่า Connectionsอื่นกำลังรอมันหรือไม่

79. ถ้ามีหลาย Applications

Host Columnช่วยบอก Sourceได้ในบาง Environment

80. Resource Nameไม่แสดงใน MariaDBโดยตรงเสมอไป

ต้อง Mapจาก:

  • Query Text
  • Database User
  • FiveM Logs

81. แยก Database Userต่อ Applicationช่วยไหม

ใน Architectureที่ควบคุมเอง:

การแยก Credentialsสามารถช่วย Observability/Permissions

แต่ต้องทำตาม Security Design

82. Least Privilege ยังสำคัญ

FiveM Applicationไม่ควรใช้:

root

เพียงเพราะสะดวก

83. Error1040ไม่ควรแก้ด้วย root User

Rootไม่ได้ทำให้ Pool Designดีขึ้น

84. MariaDBมี Reserved Connectionหรือไม่

Server Databaseบางระบบมีวิธีรักษา Administrative Accessเมื่อถึง Limitตาม Privileges/Version

แต่ Server Ownerไม่ควรพึ่งสิ่งนี้เป็น Capacity Strategy

85. เป้าหมายคือไม่ให้ Productionชน Limit

ไม่ใช่หาวิธีแทรก Connectionหลัง Serverเต็ม

86. เพิ่ม max_connections ทำอย่างไรในแนวคิด

MariaDB ระบุ max_connections เป็น Global Dynamic Variable และสามารถกำหนดผ่าน Configuration/Command lineได้ตาม Environment.

87. แต่ค่าที่เหมาะสมไม่ใช่ Universal

ขึ้นกับ:

  • RAM
  • Workload
  • Query Buffers
  • Application Pools
  • Server Environment

88. ทำไม RAMเกี่ยว

MariaDB Documentation อธิบายว่าแต่ละ Thread/Connectionใช้ Memoryบางส่วน และการตั้ง Connectionsจำนวนมากมากขึ้นทำให้ Memory Requirementสูงขึ้น.

89. ตั้ง 10,000 Connectionsจึงไม่ฟรี

แม้ MariaDBอนุญาต Configuration Rangeสูง ก็ไม่ได้หมายความว่า Hardwareของคุณควรใช้ค่าดังกล่าว.

90. Systemd ยังมี Limitได้

MariaDB Documentation ปัจจุบันเตือนว่า Systemd TasksMax อาจกลายเป็นข้อจำกัดเมื่อพยายามใช้ค่า max_connections สูงมากในบาง Environment.

91. แต่ FiveM Serverทั่วไปไม่ควรเริ่มจากแก้ TasksMax

นี่เป็น Tuningขั้นลึกหลังพิสูจน์แล้วว่าต้องใช้ Connectionsจำนวนสูงจริง

92. เพิ่ม Connectionsโดยไม่แก้ Queriesช้า

อาจทำให้ Databaseหนักกว่าเดิม

93. ตัวอย่าง

เดิม:

100 queriesพร้อมกัน

Databaseใกล้เต็ม CPU

เพิ่ม Connection Limitเป็น:

500

อาจเพียงทำให้:

500 queriesพร้อมกัน

แข่งขันทรัพยากรมากขึ้น

94. Capacity ไม่เท่ากับ Concurrency Limit

ต้อง Tuneทั้งระบบ

95. Poolควรช่วย Backpressure

เมื่อ Database Connectionsเต็มใน Pool:

Requestsบางส่วนควรรอ Pool

แทนเปิด Connectionsใหม่ไม่จำกัด

96. Unlimited Poolเสี่ยง

เพราะ Application Load Spikeจะถูกส่งตรงไป Database

97. Connection Queueก็ต้องมี Limit

ไม่เช่นนั้น Requestsอาจสะสมใน Memory

98. FiveM Resourceที่ดีต้อง Handle Database Busy

ไม่ควร Crashทั้ง Resourceทันทีถ้า Connectionชั่วคราวไม่พร้อม

แต่ต้องดู Wrapper Designจริง

99. Errorหลัง Player Countเพิ่ม

อาจเป็น Capacity Issueจริง

ถ้า:

  • Poolเหมาะสม
  • Queriesเร็ว
  • ไม่มี Leaks

แต่ Workloadเพิ่มจน Connections Peakถึง Limit

100. ในกรณีนี้เพิ่ม Capacityอาจสมเหตุสมผล

แต่ควรใช้ Metricsก่อน

101. Playersเพิ่มไม่ได้แปลว่าต้องเพิ่ม Connectionแบบเส้นตรง

Database Query Rateขึ้นกับ Gameplay/Resourcesมากกว่า Player Countอย่างเดียว

102. Server RPหนัก

อาจ Queryมากจาก:

  • Phone
  • Inventory
  • Logs
  • Economy

103. Serverเรียบง่าย Playersเยอะ

อาจใช้ Connectionsน้อยกว่า Server Playersน้อยแต่มี Resources Database-heavy

104. Resource Queryทุก Tick

นี่เป็น Red Flag

ถ้า Scriptทำ:

every frame/tick
↓
SELECT database

จะสร้าง Query Loadมหาศาลโดยไม่จำเป็น

105. Databaseไม่ควรใช้เป็น Game Loop Memory

ข้อมูลที่ต้องอ่านทุก Tickอาจต้อง Cacheใน Applicationเมื่อเหมาะสม

106. แต่ Cacheต้องมี Invalidationที่ถูก

ไม่ควร Cache Banking Balanceแบบมั่ว

107. Query Frequencyควรถูกออกแบบ

เช่น Saveเมื่อ:

  • Stateเปลี่ยน
  • Intervalเหมาะสม

ไม่ใช่ Update Databaseทุก Frame

108. Errorหลังติด Logger Resource

Loggingสามารถสร้าง Query Rateสูงมาก

เช่น Log:

  • Position
  • Inventory action
  • Damage

ทุก Event

109. Logsควรใช้ Connection Poolเดียวกันหรือระบบที่ออกแบบให้รองรับ

ไม่ควรสร้าง Connectionใหม่ต่อ Log Message

110. Discord LoggerกับDatabase Loggerต่างกัน

อย่าถือ DB Connectionระหว่างรอ Webhook

111. Errorหลังเปิด Debug Logging

Debug Modeบาง Resourceอาจเขียน DBเพิ่ม

ตรวจ Config

112. Errorเฉพาะ Peak Hours

อาจเป็น Capacity/Concurrency

113. Errorทั้งคืนแม้ไม่มี Players

น่าสงสัย:

  • Connection Leak
  • Scheduled Task
  • Other Application

114. Errorหลัง Playersออกหมด

ถ้า Threads_connectedยังใกล้ Limit:

ตรวจ Pools/Idle Connections

115. Idle Connectionsต้องถูกปิดเมื่อใด

ขึ้นกับ Pool Configuration

บาง Poolรักษา Minimum Connectionsไว้

116. อย่าตั้ง Idle Timeoutต่ำมากแบบสุ่ม

อาจสร้าง Connection Churn

คือ:

เปิด
ปิด
เปิด
ปิด

บ่อยเกิน

117. Poolต้อง Balance

ระหว่าง:

  • Reuse
  • Idle Capacity
  • Database Limit

118. Errorหลัง Networkสะดุด

Connectionsเก่าอาจค้างช่วงหนึ่งตาม TCP/Driver Behavior

พร้อมกับ Clientsสร้าง Connectionsใหม่

119. Retry Stormอาจเกิดตามมา

จึงควรตรวจ Error Timeline

120. Error1040หลัง Database Restart

FiveM Resourcesทั้งหมดอาจ Reconnectพร้อมกัน

121. Database Recoveryช่วงแรกอาจรับ Loadหนัก

ถ้า Clients Retryรัว

122. Connection Backoffช่วย

ถ้า Database Libraryรองรับและตั้งค่าถูกต้อง

123. Error1040หลัง FiveM Restart

คล้ายกัน แต่ Databaseยังคงทำงาน

Resourcesจำนวนมากเปิดพร้อมกัน

124. Startup Orderอาจช่วยไหม

บาง Dependenciesควร Startตามลำดับ

แต่ไม่ควร Delayทุก Resourceแบบสุ่มเพียงเพื่อซ่อน Pool Problem

125. Errorจาก Websiteร่วมด้วย

ถ้า WordPress/APIใช้ Database Instanceเดียวกัน:

Traffic Spikeของเว็บไซต์สามารถกิน Connectionsได้

126. FiveMอาจเป็นเหยื่อ

แม้ Resourceไม่ได้เปลี่ยนอะไร

127. แยก Userช่วยตรวจได้

เช่น:

fivem_user
web_user

จะมอง Processlistง่ายขึ้น

128. แต่การแยก Database Instanceอาจเป็น Architectureทางเลือก

สำหรับ Workloadใหญ่

ไม่จำเป็นกับทุก Server

129. Shared Hosting

อาจไม่อนุญาตปรับ:

max_connections

เอง

130. ในกรณีนี้

คุณต้อง:

  • ลด Connection Usage
  • ปรับ Pool
  • ติดต่อ Provider

131. อย่าขอ Providerเพิ่ม Limitโดยไม่มี Metrics

ส่ง:

  • Timeเกิดปัญหา
  • Connection Peak
  • Processlist Sample

ช่วยวิเคราะห์ได้ดีกว่า

132. Security Scan/Botทำ Connectionเต็มได้ไหม

ถ้า Databaseเปิด Publicและมี Clientsเชื่อมได้ อาจมี Connection Attempts

แต่ไม่ควรสรุปว่าโดนโจมตีจาก Error1040อย่างเดียว

133. ตรวจ Network Exposure

Databaseควรเปิดเฉพาะ Network/Hostsที่จำเป็นตาม Architecture

134. อย่าเปิด 3306 ให้โลกเพื่อแก้ FiveM

Error1040ไม่เกี่ยวกับการต้องเปิด Portเพิ่ม

135. Firewall Blockไม่ทำ Too many connectionsตรง ๆ

เป็น Connection Problemคนละประเภท

136. Error1040กับAccess Deniedต่างกัน

1040

Connection Limit

1045

Authentication/Access Denied

MariaDBแยก Error Codesเหล่านี้ชัดเจน.

137. Error1040กับUnknown Databaseต่างกัน

1049

Unknown Database

1040

Too many connections

138. Error1040กับConnection Refusedต่างกัน

Connection Refusedอาจเกิดก่อนเข้า MariaDB

ส่วน1040คือ Serverรับ Connection Attemptแล้วปฏิเสธเพราะ Limit

139. Error1040กับ1205

1040

ไม่มี Connection Slot

1205

มี Connectionแล้วแต่ Queryรอ Lockนานเกิน

140. Error1040กับ1213

1213

Database Transaction Deadlock

ไม่ได้หมายถึง Connectionsเต็ม

141. แต่ Errorsสามารถเกิดเป็น Chain

เช่น:

Queriesค้าง
↓
Connectionsถูก Occupy
↓
Requestsสะสม
↓
Connectionsเพิ่ม
↓
1040

142. Root Cause Analysisจึงต้องดู Errorก่อนหน้า

143. Connection Pool Leak Checklist

  • Connectionsเพิ่มต่อเนื่องไหม
  • เพิ่มหลัง Eventเฉพาะไหม
  • Resource Stopแล้ว Connectionsลดไหม
  • Error Path Releaseหรือไม่
  • สร้าง Poolใน Functionหรือไม่

144. Query Performance Checklist

  • มี Long Queriesไหม
  • Locksค้างไหม
  • Tableมี Indexเหมาะไหม
  • Bulk Updateช่วง Peakไหม

145. Configuration Checklist

  • max_connections
  • Pool maximum
  • Pool minimum
  • Idle handling
  • Retry behavior

ชื่อ Settingsจริงขึ้นกับ Library

146. System Checklist

  • RAM
  • CPU
  • Multiple Applications
  • Shared MariaDB
  • Hosting Limits

147. FiveM Checklist

  • Database Wrapperกี่ตัว
  • Resourceไหนเปิด Connectionเอง
  • Queryทุก Tickหรือไม่
  • Player Saveหนักหรือไม่
  • Logsหนักหรือไม่

148. ตรวจก่อนเพิ่ม max_connections

แนะนำ Flow:

1040
↓
max_connections เท่าไร
↓
Threads_connected เท่าไร
↓
Max_used_connections เท่าไร
↓
Connection_errors_max_connections เพิ่มไหม
↓
SHOW FULL PROCESSLIST
↓
หา Source

149. ถ้าพบ Connection Leak

แก้ Leakก่อน

150. ถ้าพบ Queriesค้าง

แก้ Query/Transactionก่อน

151. ถ้าพบ Poolใหญ่เกิน

ลด Poolให้สัมพันธ์กับ Server

152. ถ้าทุกอย่างปกติแต่ Peakชน Limitจริง

ค่อยประเมินการเพิ่ม max_connections

153. เพิ่มทีละเท่าไร

ไม่มีตัวเลข Universal

ต้องพิจารณา:

  • Hardware
  • Workload
  • Pools
  • Peak

154. อย่าใช้สูตร

Players × 2

หรือ:

Players × 10

เป็นกฎสากล

ไม่มีเหตุผลทาง Architectureรองรับเสมอไป

155. RAMสำคัญอย่างไร

MariaDBระบุว่า Threadsใช้ Memory และการตั้ง Connection Limitจำนวนสูงสามารถเพิ่ม Memory Requirementอย่างมีนัยสำคัญ.

156. OOM อาจตามมา

ถ้าเพิ่ม Connectionsสูงมากพร้อม Buffers/Queriesหนัก

157. Error1041คืออะไร

MariaDB Error1041คือ Out of resources/Memoryใน Error Code Groupเดียวกัน แต่เป็นคนละ Errorกับ1040.

158. อย่าแก้1040จนกลายเป็น1041

เพิ่ม Connection Capacityเกิน Hardware

159. CPUก็สำคัญ

Connectionsจำนวนมากที่ Running Queriesพร้อมกันสามารถเพิ่ม Database Workload

160. Storage I/Oก็สำคัญ

หาก Queriesอ่าน/เขียนข้อมูลจำนวนมาก

161. Connection Capacityเป็นเพียงส่วนหนึ่งของ Database Capacity

162. Error1040หลังเพิ่ม max_connectionsแล้วยังเกิด

เป็นสัญญาณใหญ่

ถ้า:

151 → 300

แล้วไม่นานชน300อีก

น่าสงสัย:

  • Leak
  • Unlimited Pool
  • Retry Storm

มากกว่าความต้องการปกติ

163. อย่าเพิ่มต่อ:

300 → 1000 → 5000

โดยไม่ Debug

164. Graph Connectionsจะช่วยมาก

ถ้ามี Monitoring

ดู:

Threads_connected over time

165. Connection Leak Pattern

กราฟอาจ:

10
20
30
40
50
...

เพิ่มอย่างเดียวไม่ลง

166. Normal Traffic Pattern

อาจ:

10
40
25
70
20

ขึ้นลงตาม Load

167. Peakหลัง Restart

อาจ Spikeแล้วกลับลง

ไม่จำเป็นต้องเป็น Leak

168. Monitoring Max_used_connections

ช่วยดู Peakได้แม้ไม่มี Graph.

169. Errorเกิดครั้งเดียวต้องตกใจไหม

ต้องตรวจ แต่ไม่จำเป็นต้อง Reconfigureทั้งหมดทันที

อาจเป็น Temporary Spike

170. Errorเกิดทุกวัน

ควรเก็บ Metricsและหา Pattern

171. Errorทุก 30 นาที

อาจสัมพันธ์กับ:

  • Auto Save
  • Scheduled Resource
  • Cleanup

172. Errorทุก Restart

ตรวจ Reconnect Burst

173. Errorเวลา Playersเข้าเยอะพร้อมกัน

ตรวจ Character Load Queriesและ Pool Capacity

174. Player Loginสร้าง Queriesจำนวนมาก

อาจโหลด:

  • Character
  • Inventory
  • Phone
  • Housing
  • Vehicles

พร้อมกัน

175. Login Storm

หลัง Server Restart Playersหลายสิบคนเข้าใกล้พร้อมกัน

อาจสร้าง DB Burstสูง

176. Poolมีไว้ช่วยจำกัด Concurrency

ไม่จำเป็นต้องมี Connectionหนึ่งต่อ Query

177. Queueing Queriesดีกว่าเปิด Connectionไม่จำกัด

ตราบใดที่ Latencyยังยอมรับได้

178. Errorหลัง Whitelistเปิด

Playersแห่เข้า Serverพร้อมกัน

อาจเปิดเผย Capacityที่ปกติไม่เห็น

179. Stress Testควรทำบน Stagingเมื่อเป็นไปได้

ไม่ควรจงใจยิง Productionจน Connectionsเต็ม

180. Resource Developerควรทดสอบ Login Burst

โดยเฉพาะ Serversขนาดใหญ่

181. FiveM Too Many Connections FAQ

FiveM MySQL Too many connections คืออะไร

MariaDB Error1040 / SQLSTATE08004 / ER_CON_COUNT_ERROR หมายถึงจำนวน Database Connectionsถึง Limitที่ Serverอนุญาต.

max_connections คืออะไร

จำนวน Connectionsพร้อมกันสูงสุดที่ MariaDBอนุญาต.

MariaDB Default max_connections เท่าไร

Documentationปัจจุบันระบุ Default151 แต่ Serverจริงอาจถูก Configต่างออกไป.

ดู max_connections อย่างไร

SHOW VARIABLES LIKE 'max_connections';

ดู Connections ปัจจุบันอย่างไร

SHOW GLOBAL STATUS LIKE 'Threads_connected';

MariaDBใช้ Threads_connected สำหรับจำนวน Connectionsปัจจุบัน.

ดู Peakอย่างไร

SHOW GLOBAL STATUS LIKE 'Max_used_connections';

MariaDBแนะนำ Max_used_connections เพื่อดูค่าสูงสุดที่เคยเกิด.

ดู Connections ที่ถูก Rejectได้ไหม

ดู:

SHOW GLOBAL STATUS
LIKE 'Connection_errors_max_connections';

Variableนี้นับ Connectionsที่ถูกปฏิเสธจาก max_connections limit.

ดูว่าใครใช้ Connectionsอยู่ได้อย่างไร

ใช้:

SHOW FULL PROCESSLIST;

Sleep Connectionsคือ Leakไหม

ไม่เสมอ Poolสามารถเก็บ Idle Connectionsเพื่อ Reuseได้ ต้องดูจำนวนและพฤติกรรมว่าเพิ่มผิดปกติหรือไม่

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

ช่วยได้ถ้า Workloadต้องใช้ Connectionsมากขึ้นจริงและ Hardwareรองรับ แต่ไม่ควรใช้แทนการแก้ Leak/Pool/Slow Queries

เพิ่มจาก151เป็น1000ได้เลยไหม

ไม่แนะนำโดยไม่มี Capacity Analysis เพราะ MariaDBระบุว่า Connections/Threadsใช้ Memoryและการตั้งจำนวนสูงมี Resource Cost.

Players 200คนต้อง max_connectionsอย่างน้อย200ไหม

ไม่ จำนวน Playersไม่เท่ากับจำนวน Database Connectionsโดยตรงเมื่อ Applicationใช้ Connection Pool

FiveM Resourceทำ Connectionเต็มได้ไหม

ได้ถ้า Resourceสร้าง Pools/Connectionsจำนวนมากหรือไม่จัดการ Lifecycleตาม Libraryที่ใช้

Queryช้าทำ Connectionsเต็มได้ไหม

สามารถเป็นปัจจัยได้ เพราะ Connectionsถูกใช้งานนานและ Concurrent Workสะสม

Lock Wait Timeoutเกี่ยวไหม

อาจเกี่ยวทางอ้อมเพราะ Query/Transactionsค้างทำ Connectionถูก Occupy แต่1040และ1205เป็น Errorคนละประเภท

Deadlockเกี่ยวไหม

เช่นเดียวกัน เป็น Errorคนละประเภท แต่ Database Contentionหนักอาจเกิดหลายอาการพร้อมกัน

Restart MariaDBแก้ไหม

อาจเคลียร์ Connectionsปัจจุบัน แต่ไม่แก้ ResourceหรือPoolที่สร้าง Connectionมากเกิน

Restart FiveMแก้ไหม

อาจเคลียร์ Application Connectionsชั่วคราว แต่ Errorสามารถกลับมาถ้า Root Causeยังอยู่

Clear FiveM Cacheช่วยไหม

โดยทั่วไปไม่ใช่ Fixของ Database Connection Limit

Errorหลังติด Resourceใหม่ทำอย่างไร

เปรียบเทียบ Threads_connected ก่อนและหลังเปิด Resource และตรวจ Pool/Database Clientของ Resourceนั้น

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

ตรวจ Changelogและ Database Connection Configurationของ Versionใหม่

Errorหลังเปลี่ยน Database Wrapperทำอย่างไร

ตรวจว่าตัวเก่าถูกปิดแล้วและ Resourcesไม่ได้สร้าง Poolsซ้ำ

Errorหลัง Server Restartทำอย่างไร

ตรวจ Reconnect Burstและ Startup Resourcesที่เปิด Connectionsพร้อมกัน

Errorเฉพาะ Peak Hoursทำอย่างไร

เก็บ Threads_connected, Max_used_connections, Processlistและ Query Loadช่วงนั้น

Errorแม้ไม่มี Playersทำอย่างไร

ตรวจ Connection Leak, Scheduled Tasksและ Applicationsอื่นที่ใช้ MariaDBเดียวกัน

Websiteทำ FiveM Databaseเต็มได้ไหม

ได้ถ้า WebsiteและFiveMใช้ MariaDB Instanceเดียวกัน Connectionsของทุก Applicationรวมกัน

Shared Hostingแก้อย่างไร

ถ้าปรับ MariaDBไม่ได้ให้ลด Application Connections/Poolและติดต่อ Providerพร้อม Metrics

ควรใช้ rootเชื่อม FiveMไหม

ไม่ควรใช้ rootเพียงเพื่อแก้ Error1040 การจัดสิทธิ์ Applicationควรใช้หลัก Least Privilege

เปิด Port3306เพิ่มช่วยไหม

ไม่ Error1040หมายถึง MariaDBถึง Connection Limit ไม่ใช่ปัญหา Portถูก Block

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

ขึ้นกับ Capacityจริง ถ้า Connectionsที่จำเป็นเพิ่มและ Database Memoryไม่เพียงพออาจต้อง Scale Hardware แต่ควร Optimizeก่อน

ต้อง Reinstall MariaDBไหม

ไม่

Error1040ไม่ใช่เหตุผลให้ Reinstall Database

สรุป FiveM MySQL Too Many Connections Error 1040

FiveM MySQL/MariaDB Error 1040 Too many connections เกิดเมื่อจำนวน Connections ถึง max_connections ที่ Database อนุญาต โดย MariaDB กำหนด Error นี้เป็น ER_CON_COUNT_ERROR และ SQLSTATE 08004.

วิธีตรวจที่ควรจำคือ:

Error 1040
↓
SHOW max_connections
↓
Threads_connected
↓
Max_used_connections
↓
Connection_errors_max_connections
↓
SHOW FULL PROCESSLIST
↓
หา Resource / Application ต้นทาง
↓
ตรวจ Pool / Leak / Slow Query
↓
ค่อยประเมินเพิ่ม Capacity

MariaDB แนะนำให้ดูทั้ง Connections ปัจจุบันและ Peak ผ่าน Threads_connected กับ Max_used_connections แทนการเพิ่ม Limit จากการคาดเดา.

สิ่งที่ comsiam แนะนำคือถ้า Error1040เกิดซ้ำ อย่าเริ่มจากเพิ่ม max_connections หลายเท่าทันที ให้ดู SHOW FULL PROCESSLIST และ Metricsก่อนว่ามี Connectionsจำนวนมากจาก Resourceไหน มี Sleep Connectionsผิดปกติหรือมี Query/Transactionค้างหรือไม่ เพราะการเพิ่ม Limitโดยไม่แก้ Connection Leakสามารถเพียงเลื่อนเวลาที่ Databaseจะเต็มออกไป และ Connectionsจำนวนมากยังใช้ทรัพยากร Memoryของ Serverเพิ่มขึ้น.

อีกหลักที่ comsiam แนะนำคือหากตรวจแล้ว Poolทำงานถูก ไม่มี Connection Leak, Queriesไม่ค้าง และ Max_used_connections เข้าใกล้ max_connections เป็นประจำจาก Workloadจริง จึงค่อยเพิ่ม Capacityอย่างมีข้อมูลรองรับ โดยพิจารณา RAM, CPU, Applicationsอื่นที่ใช้ Databaseเดียวกัน และ Pool Limitsพร้อมกัน ไม่ควรคิดว่า max_connections ยิ่งสูงยิ่งดีเพราะ MariaDBเองเตือนว่าจำนวน Connectionsสูงมากสามารถเพิ่ม Resource Requirementและอาจชี้ว่ามีปัญหาอื่นที่ควรแก้ก่อน.

Comments

Popular posts from this blog

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

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

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