PostgreSQL Performance & Query Optimization · บทเรียน

การปรับแต่งดิสก์ I/O และจุดตรวจสอบ

ปรับพฤติกรรมดิสก์ I/O และการตั้งค่าจุดตรวจสอบ เพื่อลดการพุ่งสูงของการเขียนและเพิ่มการตอบสนองโดยรวมของระบบ

บทเรียน 3 จาก 411 ขั้นตอน

การปรับแต่งดิสก์ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พารามิเตอร์สำคัญใน postgresql.conf
  2. การปรับแต่งหน่วยความจำ (shared_buffers, work_mem)
  3. การปรับแต่งดิสก์ I/O และจุดตรวจสอบ
  4. การปรับค่าคงที่ต้นทุนของตัววางแผนการสืบค้น
← กลับไปที่ PostgreSQL Performance & Query Optimization