การปรับแต่งดิสก์ I/O และจุดตรวจสอบ
ปรับพฤติกรรมดิสก์ I/O และการตั้งค่าจุดตรวจสอบ เพื่อลดการพุ่งสูงของการเขียนและเพิ่มการตอบสนองโดยรวมของระบบ
การปรับแต่งดิสก์ I/O และจุดตรวจสอบ เป็นบทเรียน PostgreSQL Performance & Query Optimization ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PostgreSQL Performance & Query Optimization และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PostgreSQL Performance & Query Optimization มีบทเรียนทั้งหมด 4 บทเรียน
การรับส่งข้อมูลกับดิสก์และประสิทธิภาพ
การรับส่งข้อมูลเข้า/ออกจากดิสก์ (I/O) เป็นปัจจัยสำคัญต่อประสิทธิภาพของ PostgreSQL หมายถึงความเร็วที่ฐานข้อมูลสามารถอ่านและเขียนข้อมูลไปยังพื้นที่จัดเก็บ
การรับส่งข้อมูลกับดิสก์ที่ช้ามักกลายเป็นคอขวดสำคัญ ทำให้การประมวลผลการสืบค้นช้าลงและระบบโดยรวมไม่ตอบสนอง
การทำความเข้าใจและปรับแต่งการตั้งค่าที่เกี่ยวข้องกับ I/O เป็นกุญแจสำคัญสู่ PostgreSQL ที่มีประสิทธิภาพสูง
ทำความเข้าใจจุดตรวจสอบ
จุดตรวจสอบคือกระบวนการสำคัญใน PostgreSQL ที่ช่วยรับประกันความคงทนของข้อมูลและช่วยกู้คืนจากข้อขัดข้อง
ระหว่างจุดตรวจสอบ หน้าข้อมูลที่ “สกปรก” ทั้งหมด (ข้อมูลที่เปลี่ยนแปลงในหน่วยความจำแต่ยังไม่ได้เขียนลงดิสก์) จะถูกเขียนออกจาก shared_buffers ไปยังไดเรกทอรีข้อมูลบนดิสก์
กระบวนการนี้รับประกันว่าการเปลี่ยนแปลงที่ยืนยันแล้วทั้งหมดจนถึงจุดตรวจสอบจะถูกจัดเก็บอย่างปลอดภัยในพื้นที่จัดเก็บถาวร
กระบวนการจุดตรวจสอบ
โดยทั่วไป จุดตรวจสอบจะถูกเรียกใช้ด้วยสองวิธีหลัก:
- เมื่อเวลาผ่านไปตามระยะเวลาที่กำหนด (ควบคุมโดย
checkpoint_timeout) - เมื่อมีการสร้างข้อมูล Write-Ahead Log (WAL) ถึงปริมาณที่กำหนด (ควบคุมโดย
max_wal_size)
เมื่อเกิดจุดตรวจสอบ PostgreSQL จะเขียนระเบียนพิเศษลงใน WAL เพื่อระบุว่าหน้าข้อมูลทั้งหมดก่อนถึงจุดนั้นถูกเขียนลงดิสก์แล้ว การดำเนินการนี้อาจใช้ I/O สูง
การปรับแต่ง `checkpoint_timeout`
พารามิเตอร์ checkpoint_timeout กำหนดระยะเวลาสูงสุดระหว่างจุดตรวจสอบ WAL อัตโนมัติ ค่าเริ่มต้นคือ 5 นาที
การตั้งระยะเวลาให้นานขึ้นหมายถึงจุดตรวจสอบจะเกิดไม่บ่อย แต่แต่ละครั้งจะเขียนข้อมูลออกมากขึ้น ซึ่งอาจทำให้เกิดการใช้งาน I/O พุ่งสูงเป็นช่วง ๆ การตั้งระยะเวลาให้สั้นลงหมายถึงการดำเนินการ I/O จะเกิดบ่อยขึ้นแต่มีขนาดเล็กลง
การหาสมดุลที่เหมาะสมช่วยให้กิจกรรมบนดิสก์ราบรื่นขึ้น
ALTER SYSTEM SET checkpoint_timeout = '10min';
SELECT pg_reload_conf();พารามิเตอร์ `max_wal_size`
พารามิเตอร์ max_wal_size กำหนดขนาดสูงสุดของ Write-Ahead Log (WAL) ที่สะสมได้ก่อนบังคับให้เกิดจุดตรวจสอบ
หากปริมาณ WAL ที่สร้างขึ้นเกินขีดจำกัดนี้ จุดตรวจสอบจะเกิดขึ้นทันที โดยไม่คำนึงถึงการตั้งค่า checkpoint_timeout
การเพิ่มค่านี้ทำให้สะสม WAL ได้มากขึ้น ส่งผลให้จุดตรวจสอบเกิดไม่บ่อยลง แต่แต่ละครั้งอาจมีขนาดใหญ่ขึ้น ค่าเริ่มต้นคือ 1GB
ALTER SYSTEM SET max_wal_size = '4GB';
SELECT pg_reload_conf();`min_wal_size` สำหรับการกู้คืน
พารามิเตอร์ min_wal_size ระบุขนาดขั้นต่ำของเซกเมนต์ WAL ที่ควรเก็บรักษาไว้ ซึ่งช่วยให้มั่นใจว่ามี WAL เพียงพอสำหรับกระบวนการกู้คืน
หากไฟล์ WAL ถูกนำกลับมาใช้ใหม่เร็วเกินไป อาจทำให้เกิดการเขียนเพิ่มขึ้นเมื่อมีการสร้างไฟล์ WAL ใหม่ การกำหนดค่า min_wal_size ที่เหมาะสม (เช่น 1GB) ช่วยป้องกันปัญหานี้และทำให้กู้คืนได้เร็วขึ้นหลังระบบขัดข้อง
ALTER SYSTEM SET min_wal_size = '1GB';
SELECT pg_reload_conf();`checkpoint_completion_target`
พารามิเตอร์นี้กำหนดสัดส่วนเป้าหมายของ checkpoint_timeout ที่จุดตรวจสอบควรดำเนินการให้เสร็จภายในช่วงเวลาดังกล่าว
ตัวอย่างเช่น หาก checkpoint_completion_target เป็น 0.9 และ checkpoint_timeout เท่ากับ 10 นาที PostgreSQL จะพยายามกระจายการดำเนินการ I/O ของจุดตรวจสอบตลอดช่วงเวลา 9 นาที
ค่าที่สูงขึ้น (ใกล้ 1.0 มากขึ้น) จะกระจาย I/O ได้สม่ำเสมอยิ่งขึ้น ลดผลกระทบจากการเขียนที่พุ่งสูงขึ้นเนื่องจากจุดตรวจสอบ ค่าเริ่มต้นคือ 0.9
ALTER SYSTEM SET checkpoint_completion_target = 0.95;
SELECT pg_reload_conf();`random_page_cost` และตัววางแผน
แม้จะไม่ใช่การตั้งค่าจุดตรวจสอบโดยตรง แต่ random_page_cost มีอิทธิพลอย่างมากต่อการตัดสินใจของตัววางแผนคำค้นเกี่ยวกับ I/O ของดิสก์
ค่านี้แสดงค่าประมาณต้นทุนของตัววางแผนสำหรับการดึงหน้าดิสก์ที่ไม่ได้เข้าถึงตามลำดับ ค่าเริ่มต้นคือ 4.0
การลดค่านี้ (เช่น เป็น 1.0-2.0 สำหรับ SSD) จะบอกตัววางแผนว่า I/O แบบสุ่มมีต้นทุนต่ำลง ซึ่งอาจทำให้เลือกการสแกนดัชนีบ่อยขึ้น ควรปรับค่าอย่างระมัดระวังตามประเภทพื้นที่จัดเก็บข้อมูลของคุณ
ALTER SYSTEM SET random_page_cost = 1.5;
SELECT pg_reload_conf();ตัวจัดกำหนดเวลา I/O ระดับ OS
นอกเหนือจากการตั้งค่าภายในของ PostgreSQL แล้ว ตัวจัดกำหนดเวลา I/O ของระบบปฏิบัติการก็มีบทบาทต่อประสิทธิภาพของดิสก์เช่นกัน
บน Linux ตัวจัดกำหนดเวลาที่พบได้ทั่วไป ได้แก่ noop (สำหรับสภาพแวดล้อมเสมือนจริงหรือ SSD), deadline (สำหรับสมดุลระหว่างอัตราการรับส่งข้อมูลและเวลาแฝง) และ CFQ (เพื่อความเป็นธรรมระหว่างกระบวนการ)
การเลือกตัวจัดกำหนดเวลา I/O ที่เหมาะกับงานและประเภทพื้นที่จัดเก็บข้อมูลของคุณอาจช่วยเพิ่มประสิทธิภาพได้อีก แม้การตั้งค่านี้จะอยู่นอกเหนือการกำหนดค่าโดยตรงของ PostgreSQL
ตรวจสอบการปรับแต่งจุดตรวจสอบ
พารามิเตอร์ PostgreSQL ใดต่อไปนี้ใช้เป็นหลักในการควบคุมความถี่และการกระจาย I/O ของจุดตรวจสอบ โดยมีเป้าหมายเพื่อลดการเขียนที่พุ่งสูงขึ้น
สรุป I/O ของดิสก์และจุดตรวจสอบ
ในบทเรียนนี้ เราได้สำรวจบทบาทสำคัญของ I/O ของดิสก์ที่มีต่อประสิทธิภาพของ PostgreSQL และวิธีที่จุดตรวจสอบช่วยให้ข้อมูลคงทนถาวร
เราได้เรียนรู้วิธีปรับพารามิเตอร์สำคัญดังนี้
checkpoint_timeout: ควบคุมความถี่ของจุดตรวจสอบmax_wal_size: จำกัดการสะสมของ WAL ก่อนบังคับให้ดำเนินการจุดตรวจสอบmin_wal_size: ทำให้มั่นใจว่ามีการเก็บ WAL ไว้อย่างเพียงพอcheckpoint_completion_target: กระจาย I/O ของจุดตรวจสอบตามช่วงเวลาrandom_page_cost: มีอิทธิพลต่อสมมติฐานด้าน I/O ของตัววางแผนคำค้น
การกำหนดค่าการตั้งค่าเหล่านี้อย่างเหมาะสมสามารถลดการพุ่งสูงขึ้นของ I/O ได้อย่างมาก และช่วยให้ระบบตอบสนองโดยรวมดีขึ้น
เรียนรู้ SQL ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 22
- บทเรียน
- 88
คำถามที่พบบ่อย
บทเรียน “การปรับแต่งดิสก์ I/O และจุดตรวจสอบ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การปรับแต่งดิสก์ I/O และจุดตรวจสอบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PostgreSQL Performance & Query Optimization ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PostgreSQL Performance & Query Optimization มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การปรับแต่งดิสก์ I/O และจุดตรวจสอบ”
ปรับพฤติกรรมดิสก์ I/O และการตั้งค่าจุดตรวจสอบ เพื่อลดการพุ่งสูงของการเขียนและเพิ่มการตอบสนองโดยรวมของระบบ คุณปฏิบัติ PostgreSQL Performance & Query Optimization ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PostgreSQL Performance & Query Optimization หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน PostgreSQL Performance & Query Optimization บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การปรับแต่งดิสก์ I/O และจุดตรวจสอบ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน PostgreSQL Performance & Query Optimization นี้ได้ไหม
ได้ บทเรียน PostgreSQL Performance & Query Optimization ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พารามิเตอร์สำคัญใน postgresql.conf
- การปรับแต่งหน่วยความจำ (shared_buffers, work_mem)
- การปรับแต่งดิสก์ I/O และจุดตรวจสอบ
- การปรับค่าคงที่ต้นทุนของตัววางแผนการสืบค้น