เติมเงินในบัญชี Google Cloud: GCP Cloud SQL Master-sonds Sync ขัดจังหวะด้วย Read Replica คู่มือการแก้ไขปัญหาความล่าช้าสูงพิเศษ

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

เมื่อเวลา3นาฬิกากลางดึกของสัปดาห์ที่แล้วเสียงเรียกเข้าปลุกของ PagerDuty ได้ทำลายความเงียบ: Read Replica ของธุรกิจหลักทางออนไลน์ล่าช้าไป3,600วินาที (1ชั่วโมง) แบบสอบถามโหนดแบบอ่านอย่างเดียวมักรายงานข้อผิดพลาดและการซิงโครไนซ์หลักทาสจะถูกตัดการเชื่อมต่ออย่างสมบูรณ์

สำหรับทีมที่อาศัย Google Cloud Cloud SQL (ไม่ว่าจะเป็น MySQL หรือ PostgreSQL) เพื่อสร้างสถาปัตยกรรมการแยกการอ่านและการเขียนการเพิ่มความล่าช้าของ Read Replica หรือการขัดจังหวะการซิงโครไนซ์ (Replication Lag / Broken) เป็นหนึ่งในปัญหาที่ลำบากที่สุด

ในฐานะ SRE ที่อยู่ในหลุมบน GCP มาหลายปีฉันจะนำคุณกลับไปที่ฉากผ่านบทความนี้และจัดเรียงชุด

การตรวจสอบความล่าช้าและการเพิ่มประสิทธิภาพการคัดลอก Cloud SQL ที่แท้จริงและเชื่อมโยงไปถึง

1.การตรวจสอบปรากฏการณ์: ความล้มเหลวเกิดขึ้นได้อย่างไร?

โดยทั่วไปความล่าช้าในการจำลองแบบมีสองอาการทั่วไปดังต่อไปนี้:

ประเภทกบต้มในน้ำอุ่น: บนแผงตรวจสอบ Cloud SQL ของ Google Cloud Console ตัวบ่งชี้ replica_lag ยังคงเพิ่มขึ้นในมุม45องศา

ประเภทหน้าผาถล่ม: ไลบรารีหลักทำการอัปเดตแบทช์ที่ใช้เวลานานมากไลบรารีทาสหยุดการซิงโครไนซ์กะทันหันหรือ WAL/Binlog ของโหนดแบบอ่านอย่างเดียวไม่สามารถติดตามไลบรารีหลักได้ซึ่งนำไปสู่การหยุดชะงักของห่วงโซ่การจำลองแบบโดยตรง

ในการแก้ไขปัญหานี้อันดับแรกเราต้องเข้าใจตรรกะการจำลองแบบพื้นฐานของ GCP

2.การวิเคราะห์โดยย่อของหลักการหลัก: กลไกการซิงโครไนซ์ของ Cloud SQL

Cloud SQL สำหรับ MySQL: การจำลองแบบแถวตาม GTID ไลบรารีหลักจะเขียนบันทึกไปยัง Binlog IO Thread จากไลบรารีมีหน้าที่ดึง Binlog และ SQL Thread (หรือ Parallel Workers) มีหน้าที่ในการเล่นซ้ำในเครื่อง

Cloud SQL สำหรับ PostgreSQL: ขึ้นอยู่กับ Streaming Replication ไลบรารีหลักเขียน WAL ซึ่งได้รับจาก WAL Receiver ของไลบรารีและใช้โดยกระบวนการ WAL Startup/Replay

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

3.วิธีการสอบสวนสี่ขั้นตอน: ค้นหาผู้ร้ายที่ทำให้เกิดความล่าช้าในการซิงโครไนซ์

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

1.ตรวจสอบคอขวดของทรัพยากร: ข้อกำหนดหลักและทาสเท่ากันหรือไม่?

นี่เป็นหลุมที่ง่ายที่สุดสำหรับมือใหม่80% เพื่อประหยัดเงินหลายคนชอบจับคู่ห้องสมุดหลัก

16vCPU / 64G และเพียง2vCPU/8G จากห้องสมุด

ปัญหา: ไลบรารีหลักสามารถจัดการกับการเขียนจำนวนมากได้อย่างง่ายดายด้วย CPU ที่ทำงานพร้อมกันสูงแต่เมื่อไลบรารีมีทรัพยากรจำกัดการเล่นซ้ำแบบเธรดเดียว (หรือมัลติเธรดที่จำกัด) Binlog/WAL จะไม่สามารถทนได้เลยและ CPU มักจะกดโดยตรงถึง100%.

วิธีการแก้ไขปัญหา: ดูการใช้งาน CPU และ Disk I/O Utilization จากไลบรารีใน Cloud Monitoring

2.ค้นหาธุรกรรมขนาดใหญ่บนไลบรารีหลักและ "ไม่มีตารางคีย์หลัก"

Big Transactions: มีคนเรียกใช้ DELETE FROM orders WHERE status = 0ในไลบรารีหลักและลบข้อมูล5ล้านชิ้นใน MySQL ธุรกรรมนี้จะถูกส่งไปยังไลบรารีทาสหลังจากส่งไลบรารีหลักแล้วในระหว่างการเล่นไลบรารีทาสการซิงโครไนซ์ที่ตามมาทั้งหมดจะถูกบล็อก

คีย์หลักที่ไม่มีคีย์หลัก: ในโหมดคัดลอก Row-Based หากตารางขนาดใหญ่ไม่มีคีย์หลักไลบรารีหลักจะต้องสแกนตารางทั้งหมดเพียงครั้งเดียวในการอัปเดตระเบียนแต่ทุกบรรทัดของการเปลี่ยนแปลงจะต้องทำเมื่อเล่นซ้ำจากไลบรารีสแกนทั้งตาราง! เมื่อมีการอัปเดต10,000บรรทัดห้องสมุดทาสจะต้องทำการสแกนแบบเต็มตาราง10,000ครั้งและความล่าช้าจะพุ่งไปที่ท้องฟ้าโดยตรง

3.มีข้อขัดแย้งในการล็อกแบบสอบถามยาวจากไลบรารีหรือไม่?

โหนดแบบอ่านอย่างเดียวไม่เพียงแต่ซิงโครไนซ์ข้อมูลเท่านั้นแต่ยังตอบสนองต่อคำขออ่านของธุรกิจด้วย

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

ใน MySQL แบบสอบถามขนาดใหญ่จากไลบรารีอาจถือการล็อกตารางหรือการล็อกโดยนัยซึ่งขัดขวางการเขียน SQL Thread

4.ตรวจสอบเครือข่ายที่มีความล่าช้าข้ามภูมิภาค (Cross-Region)

หากมีการใช้ Read Replica ในสถานที่อื่น (เช่นห้องสมุดหลักในโตเกียว

Asia-northeast1

จากห้องสมุดในสิงคโปร์

Asia-southeast1

) เครือข่ายข้ามภูมิภาคกระวนกระวายใจและความล่าช้าทางกายภาพจะยืดออกโดยตรง

Network_lag

ประการที่สี่การห้ามเลือดอย่างรวดเร็วและแผนการรักษาที่รุนแรง

สำหรับสาเหตุที่ระบุข้างต้นเราสามารถจัดการได้อย่างรวดเร็วด้วยวิธีการต่อไปนี้:

1.การห้ามเลือดฉุกเฉิน: การอัพเกรดแบบไดนามิกและกระบวนการฆ่าแบบสอบถาม

การอัปเกรดชั่วคราวในคลิกเดียวและไลบรารีทาส: ไม่จำเป็นต้องแก้ไขไลบรารีหลักโดยตรงใน GCP Console เพื่อลบ vCPU/Read Replica

หน่วยความจำได้รับการอัปเกรดให้สอดคล้องกับไลบรารีหลัก (สูงกว่าไลบรารีหลักเล็กน้อย) และมีทรัพยากร CPU และ I/O เพียงพอเพื่อให้ทัน

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

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

2. MySQL เพิ่มประสิทธิภาพพิเศษ: เปิดการจำลองแบบขนาน (Parallel Replication)

Cloud SQL MySQL อาจไม่เพิ่มประสิทธิภาพการเล่นซ้ำแบบขนานโดยค่าเริ่มต้นคุณสามารถเปิดใช้งานการคัดลอกแบบขนานโดยการปรับเปลี่ยนธง:

Replica_parallel_workers (หรือ slave_parallel_workers) เป็นค่าที่สอดคล้องกับจำนวน vCPU จากห้องสมุด

ด้วยการตั้งค่า replica_parallel_type = LOGICAL_CLOCK ประสิทธิภาพของแอปพลิเคชัน Binlog จากไลบรารีได้รับการปรับปรุงอย่างมาก

3.การเพิ่มประสิทธิภาพพิเศษ PostgreSQL: การชั่งน้ำหนักแบบสอบถามและการซิงโครไนซ์

หาก PG Read Replica ของคุณมีความล่าช้าสูงเนื่องจากความขัดแย้งในการสืบค้นคุณสามารถลองปรับพารามิเตอร์ต่อไปนี้จาก Database Flags ของไลบรารี:

ปรับแต่ง max_standby_streaming_delay (เช่นตั้งเป็น30วินาที) ซึ่งหมายความว่าเมื่อเกิดความขัดแย้งในการซิงโครไนซ์ระบบจะให้ความสำคัญกับการยกเลิกข้อความค้นหาแบบอ่านอย่างเดียวเพื่อให้แน่ใจว่ามีการซิงโครไนซ์แบบเรียลไทม์

4.การเปลี่ยนแปลงระดับธุรกิจ: หลีกเลี่ยงธุรกรรมเดี่ยวขนาดใหญ่

แบ่งการดำเนินการ UPDATE หรือ DELETE ขนาดใหญ่ออกเป็นการประมวลผลแบบแบทช์และส่งเป็นชุด

ควบคุมข้อกำหนดการสร้างตารางฐานข้อมูลอย่างเคร่งครัด: ตารางทั้งหมดต้องมีคีย์หลัก

ห้าสรุป

Read Replica การแก้ไขปัญหาล่าช้าของ GCP Cloud SQL เป็นไฟล์

ทรัพยากรการทำงานพร้อมกันและการล็อก

เกม. เมื่อพบสัญญาณเตือนล่าช้าให้ปฏิบัติตาม"

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

"ชุดมวยชุดนี้ปัญหาการซิงโครไนซ์ส่วนใหญ่สามารถแก้ไขได้อย่างง่ายดาย

กรง

ลักษณะทางวิทยาศาสตร์ของโครงสร้างทรัพยากรการดำเนินงานและการบำรุงรักษาที่มีอยู่มากมายและข้อกำหนดฐานข้อมูลที่เข้มงวดเป็นวิธีเดียวที่จะทำให้ธุรกิจไร้กังวล

cloud
← 返回新闻中心