การขายบัญชี Alibaba Cloud: พูลการเชื่อมต่ออินสแตนซ์ MongoDB เต็มและไม่มีการสร้างดัชนี

เมฆ 2026-08-01 阅读 6
cloud

ในกระบวนการเพิ่มประสิทธิภาพ SEO เว็บไซต์และการปรับแต่งประสิทธิภาพฉันพบ "อุบัติเหตุ" ที่น่าตกใจมากมาย: เว็บไซต์ยังคงดำเนินไปอย่างราบรื่นในวินาทีแรกและทันใดนั้นเวลาตอบสนองของอินเทอร์เฟซ API ก็เพิ่มสูงขึ้นเป็นไม่กี่วินาทีหรือแม้แต่สิบวินาทีจากนั้นส่วนหน้าก็โยน504 Gateway Timeout จำนวนมากเครื่องมือค้นหา Spider (เช่น Googlebot, Baidubot) สามารถคว้าอัตราความสำเร็จได้ทันที

ในฐานะเครื่องมือเพิ่มประสิทธิภาพเว็บไซต์ SEO ฉันตระหนักดีถึงผลกระทบร้ายแรงของประสิทธิภาพของฐานข้อมูลที่มีต่อ SEO ของเว็บไซต์เครื่องมือค้นหามีข้อกำหนดที่เข้มงวดมากสำหรับความเร็วในการโหลดหน้าเว็บ (TTFB, LCP และตัวบ่งชี้ Core Web Vitals อื่นๆ) หากฐานข้อมูลค้างทำให้อินเทอร์เฟซส่วนหน้าหมดเวลาเครื่องมือค้นหาจะระบุได้อย่างรวดเร็วว่าเว็บไซต์ของคุณ "ไม่น่าเชื่อถือ" ตัดความถี่ในการรวบรวมข้อมูลโดยตรงซึ่งจะทำให้เกิดการระงับการรวมและการจัดอันดับคำหลักที่ลดลงอย่างรวดเร็ว

และในการใช้งาน

อาลีบาบาคลาวด์ ApsaraDB for MongoDB

"ผู้ร้าย" ที่พบบ่อยที่สุดที่นำไปสู่ภัยพิบัติด้านประสิทธิภาพประเภทนี้คือ

บล็อกโซ่ที่เกิดจากการค้นหาช้า (Slow Query) และพูลการเชื่อมต่อเต็ม (Connection Pool Exhaustion) ที่เกิดจากดัชนีที่ไม่ได้สร้างขึ้น

วันนี้ตั้งแต่การตรวจสอบการต่อสู้จริงการวิเคราะห์หลักการไปจนถึงการเพิ่มประสิทธิภาพโค้ดและสถาปัตยกรรมฉันจะอธิบายอย่างละเอียดเกี่ยวกับวิธีการตรวจสอบและแก้ไขปัญหานี้อย่างละเอียด

1.เหตุใด "ดัชนีที่ไม่ได้สร้าง" จึงระเบิด "พูลการเชื่อมต่อ" ทันที?

ในการแก้ปัญหาเราต้องเข้าใจความสัมพันธ์ระหว่างทั้งสองก่อน

ผลก้อนหิมะ (ผลหิมะถล่ม)

1.เต็มตารางสแกน (COLLSCAN) ระบาย CPU กับ I/O

เมื่อแอปพลิเคชันของคุณเริ่มคำขอแบบสอบถามไปยัง MongoDB (เช่นการค้นหาตาม ID ผู้ใช้การจัดหมวดหมู่บทความหรือแท็ก) หากฟิลด์ที่เกี่ยวข้อง

ไม่มีการจัดทำดัชนี

MongoDB ต้องดำเนินการ

COLLSCAN

(การสแกนแบบเต็มตาราง)

ต้องอ่านและเปรียบเทียบคอลเล็กชันทั้งหมดบนดิสก์ทีละรายการหากมีข้อมูลหลายแสนหรือหลายล้านชิ้นในคอลเลกชันแบบสอบถามจะใช้ทรัพยากรคอมพิวเตอร์ CPU และดิสก์ I/O จำนวนมาก

2.การเชื่อมต่อจะติดอยู่ในแบบสอบถามช้าและพูลการเชื่อมต่อจะถูกบีบออกอย่างรวดเร็ว

เว็บเฟรมเวิร์ก (เช่น Node.js, Java Spring Boot, Python Django ฯลฯ) มักใช้พูลการเชื่อมต่อฐานข้อมูลเพื่อใช้การเชื่อมต่อซ้ำ

สถานการณ์ปกติ: แบบสอบถามหนึ่งรายการเสร็จสมบูรณ์ใน2มิลลิวินาทีการเชื่อมต่อจะถูกปล่อยกู้คืนไปยังพูลการเชื่อมต่อและส่งไปยังคำขอถัดไป

สถานการณ์ผิดปกติ: แบบสอบถามช้าที่ไม่มีดัชนีจะใช้เวลา3วินาทีในการดำเนินการให้เสร็จสมบูรณ์ใน3วินาทีนี้การเชื่อมต่อจะถูกผูกขาด

หิมะถล่มเริ่มขึ้น: เมื่อผู้ใช้เยี่ยมชมหรือค้นหา Spider และรวบรวมข้อมูลพร้อมกันคำขอใหม่ๆก็ยังคงหลั่งไหลเข้ามาเนื่องจากการเชื่อมต่อก่อนหน้านี้ติดขัดด้วยการสืบค้นช้าคำขอใหม่จึงสามารถบังคับให้สร้างใหม่ได้เท่านั้น

การเชื่อมต่อในเวลาอันสั้นจำนวนการเชื่อมต่อจะถึงขีดจำกัดสูงสุดของข้อกำหนดของเลเยอร์แอปพลิเคชันหรืออินสแตนซ์ของ Alibaba Cloud MongoDB (Max Connections)

ในท้ายที่สุดพูลการเชื่อมต่อก็เต็มและคำขอที่ตามมาทั้งหมดสำหรับการพยายามรับการเชื่อมต่อฐานข้อมูลจะถูกโยนออกไป

Timeout waiting for connection from pool

, ทำให้ธุรกิจทั้งไซต์เป็นอัมพาต.

2.ขั้นตอนแรก: วิธีใช้คอนโซลและคำสั่งของ Alibaba Cloud เพื่อค้นหา "การสืบค้นช้า" อย่างรวดเร็ว

เมื่อพูลการเชื่อมต่อเต็มไปด้วยสัญญาณเตือนการรีสตาร์ทบริการเว็บแบบสุ่มสี่สุ่มห้าหรือการอัปเกรดการกำหนดค่าอินสแตนซ์ MongoDB มักจะรักษาอาการมากกว่าสาเหตุที่แท้จริงคุณต้องปฏิบัติตามขั้นตอนที่เป็นมาตรฐานต่อไปนี้เพื่อค้นหา "ผู้ร้าย"

1.ใช้ฟังก์ชั่น "บันทึกช้า" ของคอนโซล Alibaba Cloud MongoDB

ลงชื่อเข้าใช้คอนโซล Alibaba Cloud MongoDB

เลือกภูมิภาคที่อินสแตนซ์ตั้งอยู่ในแถบนำทางด้านบนแล้วคลิก ID อินสแตนซ์เป้าหมาย

ในแถบเมนูด้านซ้ายให้เลือก Cloud Monitoring and Log-> Slow Log (หรือ Log Management)

ตั้งค่าช่วงเวลาของการแก้ไขปัญหา (นั่นคือจุดเริ่มต้นของข้อผิดพลาดทางธุรกิจ) และมุ่งเน้นไปที่พารามิเตอร์ต่อไปนี้: เวลาดำเนินการ (เวลาดำเนินการ): การสืบค้นที่เกิน100มิลลิวินาทีต้องใช้ความระมัดระวังและการสืบค้นที่ช้ากว่าพันมิลลิวินาทีเป็นอันตรายถึงชีวิตเอกสารที่สแกน (จำนวนเอกสารที่สแกน) และเอกสารที่ส่งคืน (ส่งคืนจำนวนเอกสาร): หากเอกสารที่ได้รับการตรวจสอบเป็นหมื่นหรือหลายแสนและเอกสารที่ได้รับการตรวจสอบมีเพียงไม่กี่หรือโหลนี่คือการขาดคุณสมบัติของดัชนีโดยทั่วไป!

การแจ้งเตือนการดำเนินการและการบำรุงรักษาและโครงสร้างพื้นฐาน: เมื่อตรวจสอบประสิทธิภาพของฐานข้อมูลบนคลาวด์และเตรียมเปลี่ยนแปลงข้อมูลจำเพาะชั่วคราว (เช่นการเพิ่ม CPU/หน่วยความจำเพื่อหยุดเลือดในกรณีฉุกเฉิน) หรือการเปิดบริการบันทึก (SLS) สำหรับการดึงบันทึกเชิงลึกโปรดรักษาสถานะการดำเนินการและการบำรุงรักษาบัญชีให้เป็นปกติขอแนะนำให้จัดเตรียมการวางแผนงบประมาณล่วงหน้าและเติมเงินในบัญชี Alibaba Cloud ในการปรับแต่งโครงสร้างการรักษาสันติภาพประจำวันเพื่อให้แน่ใจว่ายอดเงินในบัญชีเพียงพอสิ่งนี้สามารถป้องกันไม่ให้ฟังก์ชันการตรวจสอบขั้นสูงของคอนโซลถูกจำกัดการสำรองข้อมูลถูกขัดจังหวะและแม้แต่ฐานข้อมูลบนคลาวด์ก็ถูกบังคับให้ลดระดับหรือล็อกเนื่องจากการค้างชำระซึ่งจะส่งผลต่อเวลาในการช่วยเหลือทองของการแก้ไขปัญหา

2.เข้าสู่ระบบการดำเนินการ MongoDB

CurrentOp ()

การวินิจฉัยการอุดตันแบบเรียลไทม์

หากคุณมีสิทธิ์ในการอ่านและเขียนฐานข้อมูล MongoDB คุณสามารถลงชื่อเข้าใช้ฐานข้อมูลได้โดยตรงผ่าน Mongo Shell หรือ Data Management Service (DMS) และเรียกใช้คำสั่งต่อไปนี้เพื่อดูการดำเนินการที่กำลังดำเนินการอยู่และใช้เวลานานมาก:

JavaScript

// การดำเนินการที่ไม่ใช่ระบบที่ดำเนินการมานานกว่า2วินาทีและกำลังทำงานอยู่

Db.currentOp ({

"Active": true,

"Secs_running": {"$ gt": 2 },

"Ns": {

"$ Ne": "local.oplog.rs"}

})

ในผลลัพธ์ที่ส่งคืนให้เน้นที่:

สรุป: หากแสดงเป็น COLLSCAN แสดงว่าคำสั่งกำลังทำการสแกนแบบเต็มตาราง

ไคลเอนต์: ที่อยู่ IP ของแอ็พพลิเคชันเซิร์ฟเวอร์ที่เริ่มต้นการสืบค้นช้านี้

คำสั่ง: คำสั่ง JSON แบบสอบถามที่เฉพาะเจาะจง

3.ขั้นตอนที่2: การวินิจฉัยและการเพิ่มประสิทธิภาพดัชนีของแบบสอบถามช้า

หลังจากค้นหาคำสั่งแบบสอบถามช้าที่เฉพาะเจาะจงแล้วเราจำเป็นต้องใช้ MongoDB

Explain ()

เครื่องวิเคราะห์วินิจฉัยและจัดทำดัชนีอย่างถูกต้อง

1.ใช้

Explain ("executionStats")

วิเคราะห์แผนการสืบค้น

ใน DMS หรือเครื่องมือไคลเอ็นต์ให้เพิ่มหลังคำสั่งแบบสอบถามช้า

.Explain ("executionStats")

:

จาวาสคริปต์

Db.articles. find({ "category": "seo", "status": "published" }).sort({ "created_at": -1 }).explain("executionStats")

มุ่งเน้นไปที่ตัวชี้วัดหลักในผลลัพธ์:

ขั้นตอน: หากเป็น COLLSCAN จะต้องได้รับการจัดทำดัชนีหากเป็น IXSCAN แสดงว่ามีการใช้ดัชนี

TotalDocsExamined: จำนวนเอกสารทั้งหมดที่สแกน

NReturned: จำนวนเอกสารที่ตรงกันจริงตามหลักการแล้ว totalDocsExamined ควรใกล้เคียงกับ nReturned มากที่สุด

ขั้นตอน: "SORT": หากขั้นตอนนี้ปรากฏขึ้นหมายความว่า MongoDB จะทำการเรียงลำดับแบบยาก (In-memory Sort) ในหน่วยความจำซึ่งจะใช้ CPU อย่างมากเมื่อข้อมูลมีจำนวนมาก

2.สร้างดัชนีคอมโพสิตตามหลักการ ESR (Compound Index)

สำหรับแบบสอบถามแบบหลายเงื่อนไขและสถานการณ์การเรียงลำดับการสร้างดัชนีคอมโพสิตต้องปฏิบัติตาม

หลักการ ESR

:

E-equality (การจับคู่เทียบเท่า): วางฟิลด์สำหรับการค้นหาที่แม่นยำ (เช่น status: "เผยแพร่")

S - Sort (เรียงลำดับ): วางฟิลด์สำหรับ sort() (เช่น created_at: -1)

R - Range (ช่วงแบบสอบถาม): วางฟิลด์สำหรับการค้นหาช่วง (เช่น views: { $ gt: 100 })

ตัวอย่างการสร้างดัชนี:

จาวาสคริปต์

// สร้างดัชนีคอมโพสิตสำหรับคอลเลกชันบทความที่สอดคล้องกับหลักการ ESR

Db.articles.createIndex (

{"Status

": 1, "created_at ": -1," views ": 1 },

{Background: true, name: "idx_status_created_views"}

)

หมายเหตุ: ในการสร้างดัชนีในสภาพแวดล้อมการผลิตขอแนะนำให้เพิ่ม {background: true }(ค่าเริ่มต้นคือการเพิ่มประสิทธิภาพพื้นหลังในเวอร์ชัน MongoDB 4.2) เพื่อหลีกเลี่ยงการล็อกตารางระหว่างการสร้างดัชนีและทำให้เกิดการหยุดใหม่

4.ขั้นตอนที่สาม: การปรับแต่งพารามิเตอร์พูลการเชื่อมต่อและกลไกป้องกันหิมะถล่ม

หลังจากแก้ปัญหาดัชนีแล้วเราจำเป็นต้องกำหนดค่าพารามิเตอร์พูลการเชื่อมต่อฐานข้อมูลที่เหมาะสมในเลเยอร์แอปพลิเคชันเพื่อป้องกันไม่ให้พูลการเชื่อมต่อถูกเติมเต็มอีกครั้งเนื่องจากการรับส่งข้อมูลอย่างกะทันหันในอนาคต

1.การกำหนดค่าทางวิทยาศาสตร์ของขนาดพูลการเชื่อมต่อชั้นแอปพลิเคชัน (Max Pool Size)

นักพัฒนาหลายคนเข้าใจผิดว่า "ยิ่งตั้งค่าพูลการเชื่อมต่อมากเท่าไหร่ก็ยิ่งดีเท่านั้น" ซึ่งเป็นความเข้าใจผิดอย่างมากคนตาบอด

MaxPoolSize

ตั้งค่าเป็น500หรือ1,000ไม่เพียงแต่จะใช้หน่วยความจำเซิร์ฟเวอร์จำนวนมากแต่ยังทำให้ปริมาณงานโดยรวมลดลงเนื่องจากการสลับบริบทของ CPU บ่อยๆ

สูตรที่แนะนำ: Max Connections = (จำนวนแกน CPU * 2) จำนวนดิสก์พร้อมกัน

การกำหนดค่าแอปพลิเคชันทั่วไป: โหนดแอปพลิเคชันเว็บเดียวตั้งค่า maxPoolSize เป็น20 ~ 50มักจะเพียงพอที่จะรับมือกับภาวะพร้อมกันสูงหากมีโหนดแอปพลิเคชันหลายโหนดจำเป็นต้องตรวจสอบให้แน่ใจว่าผลรวมของ maxPoolSize ของโหนดทั้งหมดน้อยกว่าจำนวนการเชื่อมต่อสูงสุดที่รองรับโดยข้อกำหนดอินสแตนซ์ Alibaba Cloud MongoDB

การกำหนดค่าการเชื่อมต่อที่แนะนำโดย Node.js Mongoose เป็นตัวอย่าง:

จาวาสคริปต์

Const mongoose = require('mongoose');

Const options = {

MaxPoolSize: 30, // จำกัดจำนวนการเชื่อมต่อสูงสุดเพื่อป้องกันไม่ให้ฐานข้อมูลเต็มรูปแบบ

MinPoolSize: 5, // รักษาจำนวนการเชื่อมต่อที่ไม่ได้ใช้งานขั้นต่ำ

ServerSelectionTimeoutMS: 5000, // หาเซิร์ฟเวอร์ที่มีอยู่หมดเวลา (5วินาที)

SocketTimeoutMS: 45000, // Socket อ่านและเขียนหมดเวลา

Family: 4 // การบังคับใช้ IPv4

};

Mongoose.connect ('mongodb:// root:[email protected]

Om: 3717 /admin? ReplicaSet = mgset-xxx', options);

2.แนะนำการหมดเวลาและการป้องกันฟิวส์

เมื่อเริ่มการสืบค้นฐานข้อมูลที่เลเยอร์แอปพลิเคชันอย่าลืมตั้งค่าเวลาหมดเวลาที่เหมาะสม (เช่น

MaxTimeMS

) เพื่อให้แน่ใจว่าแม้ว่าคุณจะพบข้อความค้นหาที่ซับซ้อนคุณสามารถโยนข้อยกเว้นและปล่อยการเชื่อมต่อภายในเวลาที่กำหนดแทนที่จะทำให้พูลการเชื่อมต่อติดขัดไปเรื่อยๆ

จาวาสคริปต์

// จำกัดเวลาดำเนินการสูงสุดของแบบสอบถามเดียวเป็น2000มิลลิวินาที

Db.articles.find ({ category: "seo" }).maxTimeMS(2000);

5.บทสรุปของเครื่องมือเพิ่มประสิทธิภาพเว็บไซต์ SEO: ประสิทธิภาพคือเส้นชีวิตของ SEO

ในฐานะเครื่องมือเพิ่มประสิทธิภาพเว็บไซต์ SEO ฉันมักจะพูดว่า:"

SEO ใดๆที่แยกออกจากฐานทางเทคนิคและความเร็วในการโหลดคือปราสาทบนท้องฟ้า

ปกป้องงบประมาณการรวบรวมข้อมูลของเครื่องมือค้นหา (Crawl Budget): เมื่อ MongoDB ทำงานล่วงเวลาบ่อยครั้งเนื่องจากดัชนีที่ไม่ได้สร้างและพูลการเชื่อมต่อเต็ม (504) ประสิทธิภาพในการรวบรวมข้อมูลของเครื่องมือค้นหา Spider จะลดลงอย่างมากล้างข้อความค้นหาที่ช้าลงในเวลาและเพิ่มประสิทธิภาพพูลการเชื่อมต่อเพื่อให้อินเทอร์เฟซเว็บไซต์สามารถรักษาการตอบสนองในระดับมิลลิวินาทีและเพิ่มปริมาณการรวบรวมข้อมูลและความเร็วในการรวบรวมของเครื่องมือค้นหาได้โดยตรง

รับประกันประสบการณ์ Core Web Vitals: การตอบสนองฐานข้อมูลที่รวดเร็วเป็นพื้นฐานในการลด TTFB (เวลาไบต์แรก) ยิ่งเพจแสดงผลเร็วขึ้นอัตราตีกลับของผู้ใช้ก็จะยิ่งลดลงและน้ำหนักที่ครอบคลุมของเพจในเครื่องมือค้นหาก็จะยิ่งสูงขึ้น

ให้ความสนใจกับการจัดการโครงสร้างพื้นฐานบนคลาวด์: การปรับแต่งฐานข้อมูลไม่เพียงแต่เกี่ยวกับการเขียนโค้ดและการสร้างดัชนีเท่านั้นแต่ยังรวมถึงการใช้งานและการบำรุงรักษาทรัพยากรคลาวด์ในแต่ละวันด้วยเมื่อขยายข้อมูลจำเพาะของ MongoDB เปิด DAS (บริการปรับแต่งฐานข้อมูลอัตโนมัติ) หรือการตรวจสอบบันทึกรักษาการวางแผนงบประมาณที่ดีและนิสัยการเติมเงินบัญชี Alibaba Cloud เพื่อให้แน่ใจว่าสัญญาณเตือนการตรวจสอบระบบคลาวด์และบริการอิสระของฐานข้อมูลออนไลน์ตลอดเวลาเพื่อป้องกันปัญหาก่อนที่จะเกิดขึ้น

ผ่าน"

ตำแหน่งบันทึกช้า-> explain() การวิเคราะห์-> ESR สร้างดัชนี-> เพิ่มประสิทธิภาพพารามิเตอร์พูลการเชื่อมต่อ

"ชุดการตรวจสอบมาตรฐานแบบวงปิดนี้คุณสามารถแก้ปัญหาการบล็อกการสืบค้นช้าของ Alibaba Cloud MongoDB และพูลการเชื่อมต่อเต็มรูปแบบได้อย่างสมบูรณ์และสร้างสถาปัตยกรรมฐานข้อมูลพื้นฐานที่รวดเร็วและเสถียรสำหรับเว็บไซต์!

1
← 返回新闻中心