FiveM MariaDB Too Many Connections คืออะไร? วิธีแก้ max_connections เต็มและหาสาเหตุ Database Connection พุ่ง
FiveM MariaDB Too many connections คือ Error ที่เกิดเมื่อจำนวน Client Connections ที่ MariaDB ต้องรับพร้อมกันชนหรือเกินขีดจำกัดที่กำหนดด้วย max_connections ทำให้ Connection ใหม่ไม่สามารถเข้าฐานข้อมูลได้ตามปกติ.
สำหรับ FiveM Server ที่ใช้ oxmysql ปัญหานี้ไม่ควรถูกแก้ด้วยการเพิ่ม max_connections อย่างเดียว เพราะ Connection จำนวนมากอาจเป็นเพียงอาการของปัญหาที่แท้จริง เช่น Query ช้า, Query ถูกยิงมากเกินไป, Resource ทำ N+1 Query, Autosave พร้อมกันจำนวนมาก หรือมี Application อื่นใช้ Database เดียวกันอยู่
แนวทางที่ถูกต้องคือ:
Too many connections
↓
ดู max_connections
↓
ดู Threads_connected
↓
ดู Max_used_connections
↓
ดู Threads_running
↓
SHOW FULL PROCESSLIST
↓
หา Query / Application ต้นเหตุ
↓
Optimize
↓
ค่อยปรับ Capacity ถ้าจำเป็นจริง
① Too many connections คืออะไร
MariaDB ระบุว่าเมื่อระบบมี Connections มากเกินกว่าที่ Server อนุญาต สามารถเกิด Error:
Too many connections
โดยตัวแปรหลักที่กำหนดเพดานคือ:
max_connections
MariaDB แนะนำให้ดูทั้งจำนวน Connection ปัจจุบันและค่าที่เคยขึ้นสูงสุดก่อนตัดสินใจปรับค่า.
② max_connections คืออะไร
max_connections คือ MariaDB Server System Variable ที่ใช้จำกัดจำนวน Client Connections พร้อมกัน เพื่อป้องกัน Database Server ถูกใช้ Resources มากเกินไปจาก Connections จำนวนมหาศาล.
ดังนั้น:
max_connections
=
เพดาน Connection Capacity
ไม่ใช่:
จำนวนผู้เล่น FiveM
โดยตรง
③ Player 1 คนไม่ได้เท่ากับ 1 Database Connection
อย่าใช้สูตร:
100 Players
=
100 Database Connections
เพราะ FiveM Resources ส่ง SQL Operations ผ่าน oxmysql และ Application Database Layer สามารถใช้ Connections ร่วมกันผ่าน Connection Management/Pooling ได้
ดังนั้นสิ่งที่ต้องดูคือ:
Concurrent Database Operations
มากกว่าจำนวน Players เพียงอย่างเดียว
④ วิธีดู max_connections ปัจจุบัน
ใช้:
SHOW GLOBAL VARIABLES
LIKE 'max_connections';
หรือ:
SELECT @@GLOBAL.max_connections;
ค่าที่ได้คือ Configuration ของ MariaDB Server ในขณะนั้น
⑤ Threads_connected คืออะไร
MariaDB ระบุว่า:
Threads_connected
คือจำนวน Client Connections ที่กำลังเชื่อมต่ออยู่กับ Server ในขณะนั้น.
ตรวจด้วย:
SHOW GLOBAL STATUS
LIKE 'Threads_connected';
ตัวอย่าง:
Threads_connected = 80
แปลว่าขณะตรวจมี Connections อยู่ 80 Connections
⑥ Max_used_connections คืออะไร
ค่าที่สำคัญมากคือ:
Max_used_connections
MariaDB แนะนำให้ดูค่านี้ เพราะ Threads_connected บอกเพียงสถานะตอนนี้ ขณะที่ Max_used_connections ช่วยบอก Peak Connections ที่ Server เคยใช้.
ตรวจ:
SHOW GLOBAL STATUS
LIKE 'Max_used_connections';
⑦ ทำไม Max_used_connections สำคัญกว่าเดาตัวเลข
สมมติ:
max_connections = 300
Threads_connected = 30
Max_used_connections = 290
ตอนที่คุณเปิดดู Database อาจดูเหมือนไม่มีปัญหาเพราะเหลือเพียง 30 Connections
แต่ Peak เคยขึ้น:
290
ซึ่งใกล้ Limit มาก
ดังนั้นต้องดู Historical Peak ไม่ใช่ Snapshot จุดเดียว.
⑧ Threads_running คืออะไร
MariaDB ระบุว่า:
Threads_running
คือจำนวน Client Connections ที่กำลัง Execute Command อยู่จริง ไม่รวม Connections ที่เพียงเชื่อมค้างไว้และรอคำสั่ง.
ตรวจ:
SHOW GLOBAL STATUS
LIKE 'Threads_running';
นี่ช่วยแยก:
Connections เยอะ
ออกจาก:
Connections ที่กำลังทำงานหนักจริง
⑨ Threads_connected สูงแต่ Threads_running ต่ำหมายถึงอะไร
ตัวอย่าง:
Threads_connected = 200
Threads_running = 5
หมายความว่ามี Connections จำนวนมากเปิดอยู่ แต่ Connections ที่กำลัง Execute Commands จริงมีน้อยกว่า
นี่ไม่ได้แปลว่าไม่มีปัญหา แต่ช่วยชี้ว่าควรวิเคราะห์:
Idle Connections
Connection Pool
Application Connection Behavior
มากกว่าดู CPU Query Processing อย่างเดียว
⑩ Threads_running สูงควรระวังอะไร
ถ้า:
Threads_connected = 200
Threads_running = 180
แสดงว่ามี Connections จำนวนมากกำลังทำงานพร้อมกัน
ต้องตรวจ:
Query Type
Slow Queries
Locks
Disk I/O
CPU
Resource Query Burst
เพราะการเพิ่ม max_connections อาจเพียงเปิดทางให้ Database รับงานพร้อมกันมากขึ้น โดยไม่ได้แก้ Bottleneck เดิม
⑪ SHOW PROCESSLIST คืออะไร
MariaDB มี:
SHOW PROCESSLIST;
และ:
SHOW FULL PROCESSLIST;
สำหรับดู Threads/Connections ที่กำลังทำงานอยู่ โดย FULL ช่วยแสดง Query Information ได้มากกว่ารูปแบบปกติ.
⑫ ทำไม SHOW FULL PROCESSLIST สำคัญ
เมื่อ Connection พุ่ง คุณสามารถดู:
User
Host
Database
Command
Time
State
SQL
เพื่อหา:
ใครกำลังใช้ Connection?
Query ไหนทำงานนาน?
Connections มาจาก Application ไหน?
MariaDB ระบุว่า Process List สามารถดูผ่าน SHOW PROCESSLIST, information_schema.PROCESSLIST หรือ mariadb-admin processlist ได้.
⑬ ตัวอย่างใช้ SHOW FULL PROCESSLIST
SHOW FULL PROCESSLIST;
จากนั้นดู Rows ที่:
Time สูง
State ผิดปกติ
Query ซ้ำจำนวนมาก
โดยเฉพาะช่วงที่ FiveM ขึ้น Database Error
⑭ อย่าฆ่า Connection ทุกตัวทันที
เมื่อเห็น Process List ยาว อย่าเริ่มจาก Kill Connections แบบสุ่ม
เพราะบาง Connection อาจกำลัง:
Save Player
Transaction
Migration
Backup
Maintenance
การตัดกลาง Operation อาจสร้างปัญหาใหม่
ให้หา Root Cause ก่อน
⑮ Information Schema PROCESSLIST คืออะไร
MariaDB มี:
information_schema.PROCESSLIST
ซึ่งเก็บรายละเอียดเกี่ยวกับ Threads ที่กำลังทำงาน เช่น Connection ID, User, State และเวลาการทำงาน.
จึงสามารถ Query เพื่อวิเคราะห์ Connections ได้ละเอียดขึ้น
ตัวอย่าง:
SELECT *
FROM information_schema.PROCESSLIST;
⑯ Too many connections เกิดจากอะไรได้บ้าง
สาเหตุหลักที่ควรวิเคราะห์:
① max_connections ต่ำกว่าความต้องการจริง
② Resource Query มากเกินไป
③ Query ช้า
④ Connections ค้างนาน
⑤ Database ใช้ร่วมหลาย Applications
⑥ Login Burst
⑦ Autosave Burst
⑧ Long Transaction
⑨ Database CPU/Disk ตัน
⑩ Application Connection Management ผิด
MariaDB เองแนะนำว่าเมื่อเจอ Too Many Connections ควรดู Peak Connections และวิเคราะห์ก่อนเพิ่ม Capacity.
⑰ Slow Query ทำให้ Connection เต็มได้อย่างไร
ลองสมมติ:
Query A = 2 วินาที
มี Requests เข้ามาเรื่อยๆ:
Connection 1
→ Query A
Connection 2
→ Query A
Connection 3
→ Query A
...
เพราะแต่ละ Queryใช้เวลานาน Connection Capacity จึงถูกใช้นานขึ้น
ดังนั้น Slow Query สามารถทำให้ Concurrent Connection Pressure สูงขึ้นได้
⑱ oxmysql Slow Query Warning ช่วยอะไร
oxmysql รองรับ:
mysql_slow_query_warning
เช่น:
set mysql_slow_query_warning 150
เพื่อแจ้ง Queries ที่ใช้เวลานานกว่าค่าที่กำหนด โดย oxmysql เตือนว่า Query Time อาจไม่ได้หมายถึง Database Problem เสมอ เพราะ Server Hitch ก็สามารถมีผลได้.
⑲ ใช้ mysql_debug เพื่อหา Query หนัก
oxmysql ระบุว่าความเร็ว Query จริงสามารถดูผ่าน Debug UI และ Server Console เมื่อเปิด mysql_debug.
เมื่อ Connection พุ่ง ให้ดูพร้อมกัน:
Query Time
+
Query Count
เพราะ Query 5 ms ที่ถูกเรียกหลายหมื่นครั้งก็สามารถสร้าง Load ได้
⑳ oxmysql Debug UI ดูอะไรได้
Debug UI ของ oxmysql แสดง:
Queries
Execution Time
จำนวน Queries
Slow Queries
Resource Statistics
และสามารถแยกตาม Resource ได้.
จึงช่วยหาได้ว่า:
resource ไหน
กำลังสร้าง Database Workload สูงผิดปกติ
㉑ Debug UI ควรเปิด Production ตลอดไหม
oxmysql ระบุว่า Debug UI ควรใช้ระหว่าง Development หรือ Server ที่ Player Count ต่ำ และสำหรับ Server ใหญ่ควรพิจารณา Built-in MySQL Logging แทน.
ดังนั้นอย่าเปิด Diagnostic UI หนักๆ ตลอด Production โดยไม่มีเหตุผล
㉒ Query Count สำคัญอย่างไร
สมมติ Resource A:
Query = 150 ms
เรียก 10 ครั้ง
Resource B:
Query = 3 ms
เรียก 100,000 ครั้ง
Resource B อาจสร้าง Workload รวมมากกว่า
Debug UI ของ oxmysql แสดงทั้งจำนวน Queries และ Execution Time ต่อ Resource จึงควรดูสองค่าไปพร้อมกัน.
㉓ N+1 Query คืออะไร
ตัวอย่าง:
local players = getPlayers()
for i = 1, #players do
MySQL.single.await(
'SELECT ... WHERE identifier = ?',
{
players[i].identifier
}
)
end
ถ้ามี:
200 Players
Loop นี้สามารถสร้าง:
200 Database Queries
สำหรับหนึ่ง Operation
ถ้า Operation เกิดบ่อย Database Connection Pressure ก็เพิ่มตาม
㉔ N+1 Query แก้อย่างไร
พิจารณา:
Query รวม
Batch
Cache
Load ข้อมูลก่อน
ตาม Use Case
เป้าหมายคือ:
ลด Database Round Trips
ไม่ใช่เพียงเพิ่ม max_connections
㉕ Query ทุก Tick อันตรายมาก
หลีกเลี่ยง:
CreateThread(function()
while true do
MySQL.query.await(
'SELECT ...'
)
Wait(0)
end
end)
ถึง Query จะเร็ว Resource ก็สร้าง Database Operations ต่อเนื่องโดยไม่จำเป็น
Database ไม่ควรถูกใช้เป็น Runtime Variable Store ทุก Frame
㉖ Cache ช่วยอย่างไร
ตัวอย่าง:
Player Login
↓
Database Query
↓
Cache
↓
Gameplay อ่านจาก Cache
แทน:
Gameplay ทุก Action
↓
Database Query
ช่วยลด Query Count และ Connection Pressure พร้อมกัน
㉗ Login Burst คืออะไร
หลัง Restart Server ผู้เล่นจำนวนมากอาจเข้าใกล้กัน
แต่ละ Player อาจทำ:
Account Query
Character Query
Settings Query
Vehicle Query
Metadata Query
สมมติ:
100 Players
×
10 Queries
=
1,000 Queries
ในช่วงสั้นๆ
ปัญหาจึงอาจเกิดเฉพาะช่วง Server เปิดใหม่
㉘ Autosave Burst คืออะไร
สมมติทุก 5 นาที Resource ทำ:
Save Player ทุกคนพร้อมกัน
ถ้ามี:
300 Players
และ Player แต่ละคน Save 5 Queries:
300 × 5
=
1,500 Queries
ในช่วงเวลาใกล้กัน
นี่สามารถสร้าง Database Spike โดยไม่เกี่ยวกับ max_connections ที่ต่ำอย่างเดียว
㉙ วิธีลด Autosave Burst
พิจารณา:
Dirty Flag
Stagger Save
Batch Operation
Upsert
ลดข้อมูลที่ Save ซ้ำ
แทนการ Save ทุก Player พร้อมกันตรงนาทีเดียว
㉚ Dirty Flag คืออะไร
เก็บสถานะว่า Data มีการเปลี่ยนหรือไม่
ตัวอย่าง:
dirty = false
เมื่อ Data เปลี่ยน:
dirty = true
Autosave:
dirty = false
→ ไม่ Query
dirty = true
→ Save
ช่วยลด Database Writes ที่ไม่มีการเปลี่ยนข้อมูลจริง
㉛ Transaction ใหญ่มีผลอย่างไร
oxmysql Transaction จะ Execute หลาย Queries และ Commit เมื่อทั้งหมดสำเร็จ หากหนึ่ง Query ล้มเหลวจะไม่ Commit ชุดนั้น.
หาก Transaction มี Queries จำนวนมากหรือมี Slow Query อยู่ภายใน Database Work อาจใช้เวลานานขึ้น
ดังนั้นควรใส่เฉพาะ Operations ที่ต้อง Atomic จริง
㉜ MySQL.prepare ช่วยไหม
oxmysql ระบุว่า MySQL.prepare เหมาะสำหรับ Queries ที่ถูกเรียกบ่อยและรองรับ Parameter Sets หลายชุด.
แต่ Prepare:
ไม่ได้ลด Query Count อัตโนมัติ
และ:
ไม่ได้แก้ Missing Index
จึงต้องใช้ให้ตรงปัญหา
㉝ Too many connections ไม่ได้แปลว่า FiveM ใหญ่เกินไป
Server Player น้อยก็สามารถเจอได้ถ้า Resource พัง เช่น:
Loop Query
Connection Bug
Long Queries
Autosave ผิด
ขณะที่ Server Player เยอะอาจไม่เจอ หาก Query Architecture และ Database Capacity ถูกออกแบบดี
㉞ Database ใช้ร่วมกับ Application อื่นได้ไหม
ได้ แต่ Connection Limit เป็น Resource ของ MariaDB Server โดยรวม
สมมติ Database Server รับ:
FiveM
Website
Admin Panel
Analytics
Backup Tool
Connections ของ Applications เหล่านี้สามารถใช้ Capacity ร่วมกัน
ดังนั้น Process List ต้องดูว่า Connections มาจากใครบ้าง ไม่ใช่กล่าวโทษ FiveM อย่างเดียว
㉟ MAX_USER_CONNECTIONS คืออะไร
MariaDB รองรับ Account Resource Limit:
MAX_USER_CONNECTIONS
เพื่อจำกัดจำนวน Connections พร้อมกันที่ Account หนึ่งสามารถใช้ได้.
เช่น FiveM User อาจถูกจำกัดแยกจาก User ของ Website ตาม Architecture
㊱ MAX_USER_CONNECTIONS = 0 หมายถึงอะไร
MariaDB ระบุว่าเมื่อ Account Limit นี้เป็น 0 จะใช้ Global Connection Rules แทนตาม Configuration ที่เกี่ยวข้อง.
ดังนั้นถ้า FiveM User ถูก Limit แยก ต้องตรวจ Account Resource Limits เพิ่ม ไม่ใช่ดูเฉพาะ Global max_connections
㊲ ตรวจ User Connection Limit อย่างไร
ตรวจ Account Definition/Privileges ของ Database User ที่ FiveM ใช้
รวมถึง:
SHOW GRANTS
FOR 'fivem_app'@'localhost';
และ Account Resource Configuration ที่ตั้งไว้
อย่าเพิ่ม Global Limit หากปัญหาจริงอยู่ที่ User-specific Limit
㊳ เพิ่ม max_connections ได้ไหม
ได้ แต่ควรทำหลังวัดจริง
MariaDB เองแนะนำเมื่อ Connections เกิน Limit ให้พิจารณาค่า Peak Usage และทำการเปลี่ยน Configurationอย่างมีข้อมูลรองรับ.
อย่าตั้ง:
max_connections = 5000
เพียงเพราะต้องการให้ Error หาย
㊴ ทำไม max_connections สูงเกินไปมีผลเสีย
Connections และ Threads ใช้ Memory/Resources ของ Database
MariaDB Documentation ด้าน Memory ระบุว่าจำนวน Connections ที่สูงมากเพิ่ม Memory Consumption และค่า max_connections ในระดับหลักพันอาจเป็นสัญญาณว่ามีปัญหา Architecture อื่นที่ควรแก้ด้วย.
ดังนั้น:
Limit สูง
≠
ฟรี
㊵ เพิ่ม max_connections แล้ว Database CPU 100%
นี่เป็นสถานการณ์ที่เกิดได้ในเชิง Capacity:
เดิมรับ 200 Concurrent Operations
↓
เพิ่ม Limit
↓
รับ 500 Concurrent Operations
↓
CPU / Disk รับไม่ไหว
ดังนั้น Connection Capacity ต้องสัมพันธ์กับ:
CPU
Memory
Disk
Query Performance
ไม่ใช่แค่ค่า Configuration
㊶ วิธีเปลี่ยน max_connections ชั่วคราว
สำหรับ MariaDB Version/Environment ที่ตัวแปรเป็น Dynamic สามารถปรับ Global Runtime Variable ได้ตามสิทธิ์ที่เหมาะสม
ตัวอย่าง:
SET GLOBAL max_connections = 300;
แต่การเปลี่ยน Runtime Setting ไม่ควรถูกถือว่าเป็น Persistent Configuration หลัง Restart โดยอัตโนมัติ
ต้องตรวจ Configuration Management ของ MariaDB ที่ Server ใช้อยู่ด้วย.
㊷ Persistent max_connections ตั้งตรงไหน
ขึ้นกับ MariaDB Installation/Operating System และ Configuration File Layout
หลักการคือกำหนด Server Variable ใน MariaDB Server Configuration และ Restart/Reload ตามวิธีที่ Version/Environment รองรับ
ก่อน Production Change ควร Backup Configuration เดิมและจดค่าปัจจุบันไว้
㊸ อย่าแก้ max_connections ตอน Server มีปัญหาโดยไม่จด Baseline
ก่อนปรับเก็บ:
max_connections
Threads_connected
Max_used_connections
Threads_running
Database CPU
Memory
Query Count
Slow Query
จากนั้นหลังปรับจึงเปรียบเทียบ
ถ้าไม่เก็บ Baseline คุณจะไม่รู้ว่าการเปลี่ยนช่วยจริงหรือเพียงซ่อน Error ชั่วคราว
㊹ SHOW STATUS ช่วยอะไร
MariaDB ระบุว่า Global/Session Status Variables สามารถดูผ่าน:
SHOW GLOBAL STATUS
SHOW SESSION STATUS
และข้อมูลเดียวกันยังอยู่ใน information_schema.GLOBAL_STATUS และ SESSION_STATUS.
จึงสามารถทำ Monitoring ได้มากกว่า Snapshot เพียงตัวเดียว
㊺ Database Monitoring ควรดูอะไร
อย่างน้อย:
max_connections
Threads_connected
Max_used_connections
Threads_running
Slow Queries
Queries/sec
CPU
Memory
Disk I/O
รวมถึง FiveM-side:
oxmysql Query Count
Resource Query Time
Hitch Warnings
㊻ Threads_connected ใกล้ max_connections ต้องทำอะไร
ตัวอย่าง:
max_connections = 200
Threads_connected = 190
อย่ารีบเพิ่มเป็น 500
ทำ:
① SHOW FULL PROCESSLIST
② ดู Users/Hosts
③ ดู Query Duration
④ ดู Idle Connections
⑤ ดู Max_used_connections
⑥ ดู Query Count ของ FiveM Resources
⑦ ดู Database CPU
⑧ ค่อยตัดสินใจ
㊼ Max_used_connections ใกล้ Limit แต่เกิดครั้งเดียว
ตรวจว่าช่วงนั้นเกิดอะไร
เช่น:
Server Restart
Player Reconnect
Backup
Migration
Autosave
Website Import
ถ้าเป็น Burst ที่เกิดจากงานหนึ่งครั้ง วิธีแก้อาจต่างจาก Load สูงตลอดวัน
㊽ Max_used_connections สูงทุกวัน
นี่ควรนำไปสู่ Capacity Investigation จริง
ดู Trend:
วันจันทร์ 180
วันอังคาร 185
วันพุธ 192
หาก Limit:
200
แสดงว่าระบบกำลังเข้าใกล้ Capacity
จากนั้นจึง Optimize + Capacity Plan
㊾ Too many connections หลังติดตั้ง Script ใหม่
สงสัย Resource ใหม่ก่อน
ตรวจ oxmysql Debug Statistics เพื่อดูว่า Resource นั้นสร้าง Queries มากแค่ไหน เพราะ Debug UI สามารถแสดง Query Count และ Execution Time แยกตาม Resource ได้.
ถ้า Traffic ไม่เปลี่ยนแต่ Connections พุ่งหลังติดตั้ง Resource ใหม่ มีเหตุผลมากที่จะตรวจ Query Architecture ของ Resource นั้น
㊿ Too many connections หลัง Update Script
ตรวจ:
Loop ใหม่?
Autosave เปลี่ยน?
Query ใหม่?
Migration ทำให้ Index หาย?
Query ช้าขึ้น?
อย่า Assume ว่า MariaDB Config เปลี่ยนเอง
เปรียบเทียบ Query Metrics ก่อนและหลัง Update
51. Too many connections หลังย้าย Database
ตรวจ:
Network Latency
Remote DB CPU
Connection String
Connection Pool Behavior
Firewall
Database Capacity
Remote Database ที่ตอบช้ากว่าเดิมสามารถทำให้ Operations ใช้ Connections นานขึ้นได้ในบาง Workloads
52. Too many connections หลังเปิด Website ใช้ Database เดียวกัน
ใช้:
SHOW FULL PROCESSLIST;
แล้วดู:
User
Host
DB
เพื่อแยกว่า Connections มาจาก FiveM หรือ Website
การใช้ Dedicated Database User ต่อ Application ช่วยวิเคราะห์ปัญหาได้ง่ายขึ้น
53. Dedicated User ช่วยเรื่อง Monitoring อย่างไร
ตัวอย่าง:
fivem_app
website_app
analytics_app
Process List จะช่วยแยก Connections ตาม User ได้ง่ายกว่าให้ทุกระบบใช้:
root
User เดียว
นอกจากด้าน Security แล้ว ยังช่วย Operations และ Troubleshooting
54. Connection Pool ควรสร้างเองใน Resource ไหม
ถ้าใช้ oxmysql อยู่แล้ว Resource ควรใช้ oxmysql API แทนการสร้าง Database Client/Pool แยกเองโดยไม่มีเหตุผล
oxmysql เป็น Resource สำหรับให้ FXServer สื่อสารกับ MySQL-compatible Database ผ่าน Database Driver อยู่แล้ว.
การเพิ่ม Pool แยกหลายตัวอาจทำให้ Connection Architecture ซับซ้อนขึ้น
55. Server หลายตัวใช้ Database เดียวกันได้ไหม
ทำได้ในบาง Architecture แต่ต้องคิด Capacity รวม
ตัวอย่าง:
FiveM Server A
FiveM Server B
Web Panel
↓
MariaDB เดียว
ทุก Application ใช้:
Connection Capacity
CPU
Memory
Disk
จาก Database Server เดียวกัน
ดังนั้น max_connections ต้องออกแบบจาก Total Workload ไม่ใช่ Server A เพียงตัวเดียว
56. MariaDB Thread Pool คืออะไร
MariaDB มี Thread Pool ซึ่งเป็นกลไก Server-side สำหรับจัดการ Threads ของ Client Connections และสร้าง/ลด Threads ตาม Demand ใน Mode ที่รองรับ.
แต่:
Thread Pool
≠
เพิ่ม max_connections แล้วจบ
การ Tune Thread Model เป็น Database Performance Topic ที่ต้องดู Version และ Workload จริง
57. ควรเปิด MariaDB Thread Pool เพื่อแก้ทันทีไหม
ไม่ควรเปลี่ยน Thread Handling โดยไม่มี Benchmark
ให้แก้:
Query Architecture
Indexes
Slow Queries
Connection Burst
ก่อน
จากนั้นถ้า Database Scale ต้องการ Thread Pool Tuning จริงจึงทดสอบใน Staging
58. backlog คืออะไร
MariaDB มี Server Variable สำหรับจำนวน Outstanding Connection Requests ที่สามารถรอใน TCP Listen Queue ได้ และ Requests ที่เกิน Queue สามารถถูกปฏิเสธได้.
นี่เป็นคนละเรื่องกับ max_connections
ดังนั้น Connection Burst Issues อาจเกี่ยวข้องกับ Network Listen Queue ได้ด้วยในระบบที่มี Connections ใหม่พร้อมกันจำนวนมาก
59. อย่าปรับทุก Connection Variable พร้อมกัน
หลีกเลี่ยง:
max_connections
back_log
thread_handling
timeouts
ทั้งหมดในครั้งเดียว
เพราะหลังจากนั้นจะไม่รู้ว่าตัวไหนทำให้ระบบดีขึ้นหรือแย่ลง
ใช้:
Measure
↓
Change 1 เรื่อง
↓
Measure
เป็นหลัก
60. Too many connections กับ Database Down ต่างกัน
Too many connections
Database Server ยังตอบ แต่ไม่รับ Client Connection เพิ่มเพราะ Capacity/Limit
Database Down
Service ไม่พร้อมให้ Connection ตามปกติ
จึงต้องอ่าน Error Message จริง ไม่ใช่ Restart Everything ทุกครั้ง
61. Too many connections กับ Access Denied ต่างกัน
Too many connections
Capacity / Limit
Access Denied
Authentication / User / Host / Permission
ถ้า Error เป็น Access Denied การเพิ่ม max_connections ไม่ช่วย
62. Too many connections กับ Slow Query ต่างกัน
เป็นคนละ Error แต่เกี่ยวกันได้
Slow Query
↓
Connection ถูกใช้นาน
↓
Connections สะสม
↓
Too many connections
ดังนั้นเมื่อ Connection เต็มควรตรวจ Slow Queries ไปด้วย
63. Too many connections กับ Timeout
เมื่อ Database Capacity ตึง Applications อาจเริ่มรอนานและ Timeout ตามมาได้
แต่ Timeout ยังอาจเกิดจาก:
Network
Firewall
Database Down
ดังนั้นอย่าสรุปจาก Timeout อย่างเดียวว่า max_connections เต็ม
64. Emergency Fix ควรทำอย่างไร
ถ้า Production กำลังใช้งานไม่ได้:
① ตรวจ max_connections
② ตรวจ Threads_connected
③ SHOW FULL PROCESSLIST
④ หา Connections/Queries ผิดปกติ
⑤ ลดหรือหยุด Resource ต้นเหตุเมื่อจำเป็น
⑥ ปรับ Capacity ชั่วคราวหาก Database Resources รองรับ
⑦ เก็บ Logs
⑧ ทำ Root Cause Analysis ต่อ
อย่าเพิ่ม Limit หลายเท่าโดยไม่ดู RAM/CPU
65. การ Restart MariaDB แก้ได้ไหม
Restart จะตัด Existing Connections และทำให้ Status บางอย่างเริ่มใหม่ แต่ถ้า Root Cause คือ:
Resource Query Loop
Autosave Burst
Slow Query
Connections จะกลับมาพุ่งอีก
Restart จึงอาจแก้อาการชั่วคราว ไม่ใช่ Root Cause
66. Restart FXServer ช่วยไหม
เช่นเดียวกัน
หาก FiveM Resources เป็นต้นเหตุ Restart อาจ Reset Runtime State และ Connections ชั่วคราว แต่ Bug/Architecture เดิมยังอยู่
หลังเปิด Server Connections อาจกลับมาเต็มอีกครั้ง
67. FiveM Profiler ต้องใช้ไหม
ถ้า Database Debug บอก Query ไม่ได้ช้ามาก แต่ Server ยังมี Hitch อาจต้องตรวจ FiveM Resource Processing เพิ่ม
Database Connection Metrics และ Resource CPU Metrics ควรดูร่วมกันเมื่อปัญหาไม่ชัด
68. Checklist Too many connections
เมื่อ Error เกิด ตรวจตามนี้:
max_connectionsThreads_connectedMax_used_connectionsThreads_runningSHOW FULL PROCESSLISTUser ของ Connections
Host ของ Connections
Query Duration
Idle Connections
Slow Queries
Query Count ต่อ Resource
Resource ที่เพิ่งติดตั้ง
Resource ที่เพิ่ง Update
Login Burst
Autosave Burst
N+1 Query
Query ทุก Tick
Long Transactions
Missing Index
Database CPU
Database RAM
Disk I/O
Remote Database Latency
Applications อื่นใช้ DB เดียวกันหรือไม่
MAX_USER_CONNECTIONS
Backup/Migration กำลังทำหรือไม่
Query Debug
Historical Peak
Capacity Trend
ค่อยปรับ max_connections
ตาราง MariaDB Connection Metrics ที่ควรรู้
| ค่า | ใช้ดูอะไร |
|---|---|
max_connections | เพดาน Connections |
Threads_connected | Connections ปัจจุบัน |
Max_used_connections | Peak Connections ที่เคยใช้ |
Threads_running | Connections ที่กำลัง Execute Command |
SHOW FULL PROCESSLIST | รายละเอียด Connections/Queries |
MAX_USER_CONNECTIONS | Limit ต่อ Database Account |
MariaDB แนะนำให้ดูทั้ง Current Connections และ Peak Connections เมื่อวิเคราะห์ Too many connections.
FiveM Too many connections แก้อย่างไร
เริ่มจาก:
SHOW GLOBAL VARIABLES
LIKE 'max_connections';
SHOW GLOBAL STATUS
LIKE 'Threads_connected';
SHOW GLOBAL STATUS
LIKE 'Max_used_connections';
SHOW GLOBAL STATUS
LIKE 'Threads_running';
SHOW FULL PROCESSLIST;
จากนั้นหา:
Resource ไหน
Query ไหน
Application ไหน
กำลังใช้ Connections ก่อนตัดสินใจเพิ่ม Limit
FiveM max_connections ควรตั้งเท่าไร
ไม่มีตัวเลขเดียวสำหรับทุก FiveM Server
ค่าที่เหมาะสมขึ้นกับ:
Database Hardware
Memory
Query Workload
Concurrent Operations
Applications ที่ใช้ DB
Connection Architecture
MariaDB เตือนว่าจำนวน Connections สูงมากใช้ Memory เพิ่มและอาจสะท้อนปัญหาอื่นที่ควรแก้.
FiveM 100 คนต้อง max_connections 100 ไหม
ไม่
Player Count กับ Database Connections ไม่ได้ Mapping แบบหนึ่งต่อหนึ่ง
ให้ดู:
Max_used_connections
และ Workload จริงแทน
FiveM 500 คนต้อง max_connections 500 ไหม
ไม่จำเป็นเช่นกัน
Server 500 Players ที่ Cache ดีและ Query มีประสิทธิภาพอาจต้องการ Connections น้อยกว่า Server ขนาดเล็กที่ Resource Query ผิด Architecture
ใช้ Monitoring ตัดสิน
FiveM Threads_connected สูงแก้อย่างไร
ดู:
Threads_running
+
SHOW FULL PROCESSLIST
เพื่อแยกว่า Connections:
กำลังทำงาน
หรือ:
Idle
MariaDB แยก Threads_connected กับ Threads_running ไว้เป็น Status Variables คนละค่า.
FiveM Max_used_connections คืออะไร
คือ Peak Connections ที่ MariaDB เคยใช้ และ MariaDB แนะนำให้ดูค่านี้เมื่อตรวจ Too Many Connections เพราะ Snapshot Threads_connected เพียงอย่างเดียวอาจไม่เห็นช่วง Peak.
FiveM SHOW PROCESSLIST ใช้ยังไง
ใช้:
SHOW FULL PROCESSLIST;
เพื่อตรวจ Threads/Queries ที่ทำงานอยู่
MariaDB ระบุว่า Command นี้ใช้แสดง Running Threads และหากใช้ FULL จะเห็น Statement Information มากกว่ารูปแบบปกติ.
FiveM ต้องเพิ่ม max_connections ทันทีไหม
ไม่
เพิ่มเมื่อ:
Workload ถูก Optimize แล้ว
Database ยังมี Resources เหลือ
Peak Connections ต้องการ Capacity เพิ่มจริง
ไม่ใช่เมื่อ:
Query Loop ยังพัง
เพราะจะเพียงเลื่อนเวลาที่ Error เกิดออกไป
FiveM Query ช้าทำให้ Connections เต็มได้ไหม
ได้ในเชิง Workload เพราะ Operations ที่ใช้เวลานานสามารถทำให้ Connections ถูกใช้นานขึ้น ขณะที่ Requests ใหม่ยังเข้ามา
ควรตรวจ Slow Queries ด้วย oxmysql Debug/Logging ควบคู่กับ MariaDB Connection Metrics.
FiveM mysql_debug ช่วยได้ไหม
ได้ oxmysql ระบุว่า Real Query Speeds สามารถดูผ่าน Debug UI และ Server Console เมื่อ mysql_debug เปิด.
ใช้หา Query ที่:
ช้า
หรือ
ถูกเรียกบ่อยผิดปกติ
FiveM Resource ไหนใช้ Query เยอะดูยังไง
oxmysql Debug UI แสดง Query Count, Total Execution Time และ Slow Queries แยกตาม Resource.
จึงเหมาะกับการหา Resource ที่สร้าง Database Pressure
FiveM เพิ่ม max_connections แล้วต้อง Restart ไหม
ขึ้นกับวิธีเปลี่ยนค่า
การเปลี่ยน Dynamic Global Variable สามารถมีผล Runtime ตาม MariaDB Variable Behavior แต่ Persistent Configuration ต้องตั้งให้ถูกใน MariaDB Server Configuration ที่ Environment ใช้.
อย่าคิดว่า Runtime Change จะอยู่หลัง Database Restart เสมอไป
FAQ FiveM MariaDB Too Many Connections
Too many connections คืออะไร
คือ MariaDB ไม่สามารถรับ Connection ใหม่ได้ตามปกติเพราะจำนวน Connections ชน Limit ที่เกี่ยวข้องกับ max_connections.
max_connections คืออะไร
เป็น Server Variable สำหรับจำกัดจำนวน Connections พร้อมกันเพื่อช่วยป้องกัน Resource Exhaustion.
Threads_connected คืออะไร
จำนวน Client Connections ที่เชื่อมอยู่ในขณะนั้น.
Threads_running คืออะไร
จำนวน Client Connections ที่กำลัง Execute Commands อยู่จริง.
Max_used_connections คืออะไร
Peak จำนวน Connections ที่ MariaDB เคยใช้งาน และเป็นค่าที่มีประโยชน์มากในการวิเคราะห์ Capacity.
SHOW FULL PROCESSLIST ใช้ทำอะไร
ใช้ดู Running Threads และ SQL/Connection Details เพื่อหาว่า Connection ไหนกำลังทำอะไร.
Player 1 คนเท่ากับ 1 Connection ไหม
ไม่ ควรวัด Concurrent Database Operations และ Peak Connections จริงแทน
เพิ่ม max_connections เยอะๆ ดีไหม
ไม่เสมอไป MariaDB ระบุว่า Connections ใช้ Memory และจำนวน Connections ในระดับสูงมากอาจบ่งบอกปัญหาอื่นที่ควรแก้.
Slow Query ทำให้ Connection เต็มได้ไหม
สามารถเพิ่ม Connection Pressure ได้ เพราะ Operations ใช้เวลานานขึ้น ควรตรวจ Slow Query และ Query Count ไปพร้อมกัน
mysql_debug ช่วยหาได้ไหม
ได้ oxmysql ระบุว่าสามารถดู Query Speeds ผ่าน Debug UI และ Console เมื่อเปิด mysql_debug.
MAX_USER_CONNECTIONS คืออะไร
เป็น MariaDB Account Resource Limit สำหรับจำกัด Connections พร้อมกันของ Account หนึ่ง.
Restart MariaDB แก้ถาวรไหม
ไม่ หาก Root Cause คือ Resource Query Loop, Slow Query หรือ Query Burst ปัญหาสามารถกลับมาอีกหลังระบบเปิดใหม่
ประเด็นสำคัญ
เมื่อ FiveM ขึ้น:
Too many connections
อย่าเริ่มจาก:
เพิ่ม max_connections
ทันที
ให้เริ่มจาก:
max_connections
↓
Threads_connected
↓
Max_used_connections
↓
Threads_running
↓
SHOW FULL PROCESSLIST
↓
oxmysql Query Statistics
↓
Slow Query
↓
Resource Query Count
MariaDB แนะนำให้ดู Threads_connected ร่วมกับ Max_used_connections เพื่อเข้าใจทั้งสถานะปัจจุบันและ Peak Connection Usage ก่อนตัดสินใจแก้ Capacity.
จากนั้นตรวจ FiveM-side ด้วย oxmysql เพราะ Debug UI สามารถแสดงว่า Resource ไหนยิง Queries มาก, ใช้เวลารวมเท่าไร และมี Slow Queries เท่าไร.
สิ่งที่ต้องจำคือ:
Too many connections
ไม่ได้แปลว่า
max_connections ต่ำเสมอ
ต้นเหตุอาจเป็น:
Query Loop
N+1 Query
Slow Query
Autosave Burst
Login Burst
Long Transaction
Application อื่นใช้ DB เดียวกัน
และ MariaDB เตือนว่าการตั้ง Connections สูงมากเพิ่ม Memory Requirements และอาจสะท้อน Architecture Problem ที่ควรถูกแก้ก่อน.
สำหรับผู้อ่าน comsiam ให้จำสูตร “Connections เต็ม → วัดก่อน → หา Query → Optimize → ค่อยเพิ่ม Capacity” และ comsiam แนะนำว่า max_connections ควรเป็นผลจาก Monitoring และ Capacity Planning ไม่ใช่ตัวเลขที่ Copy มาจาก Server อื่น เพราะ Database ที่รับ Connections ได้เยอะที่สุดไม่ได้หมายความว่าเป็น Database ที่ทำงานดีที่สุด
Comments
Post a Comment