pg_stat_statements: คำสั่งค้นหายอดนิยม
เปิดใช้ pg_stat_statements ค้นหาคำสั่งที่ใช้เวลารวมมากที่สุด และมุ่งปรับปรุงคำสั่งเหล่านั้น
pg_stat_statements: คำสั่งค้นหายอดนิยม เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
สิ่งที่ pg_stat_statements มอบให้คุณ
บันทึกสะสมของทุกคิวรี โดยจัดให้เป็นมาตรฐานตามรูปแบบ — เครื่องมือ DBA ที่มีประโยชน์ที่สุดเพียงตัวเดียวใน PostgreSQL
เปิดใช้งาน
นี่คือส่วนขยายเสริม ให้เพิ่มส่วนขยายนี้ในไลบรารีที่โหลดล่วงหน้าร่วมกัน แล้วเริ่มระบบใหม่:
-- postgresql.conf
shared_preload_libraries = 'pg_stat_statements'
-- After restart:
CREATE EXTENSION pg_stat_statements;คิวรีอันดับต้นตามเวลารวม
คิวรี "CPU ของฉันถูกใช้ไปที่ไหน":
SELECT calls,
total_exec_time,
mean_exec_time,
rows,
query
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;คิวรีที่ช้าในแต่ละครั้งที่เรียกใช้
คิวรีที่ช้าในการเรียกใช้ทุกครั้ง:
SELECT mean_exec_time, calls, query
FROM pg_stat_statements
WHERE mean_exec_time > 100
ORDER BY mean_exec_time DESC
LIMIT 20;คิวรีราคาถูกที่เรียกใช้บ่อย
คิวรีหนึ่งล้านครั้งที่ใช้เวลาครั้งละ 1 มิลลิวินาทีก็ยังเป็นปัญหา:
SELECT calls, mean_exec_time, total_exec_time, query
FROM pg_stat_statements
ORDER BY calls DESC
LIMIT 20;การทำให้เป็นมาตรฐาน
pg_stat_statements จัดกลุ่มคิวรีตามรูปแบบมาตรฐาน โดยแทนค่าคงที่ด้วย $N ดังนั้น "SELECT * FROM users WHERE id = 1" และ "= 2" จึงกลายเป็นแถวเดียวกัน
รีเซ็ตสถิติ
เริ่มเก็บข้อมูลใหม่หลังการนำระบบไปใช้งาน เพื่อวัดพฤติกรรมใหม่:
SELECT pg_stat_statements_reset();เวลาอินพุต/เอาต์พุตเทียบกับเวลา CPU
PG รุ่นใหม่จะแยกเวลาการทำงานออกเป็นส่วนต่าง ๆ ค่า shared_blks_hit / shared_blks_read ช่วยบอกได้ว่าข้อมูลมาจากแคชหรือดิสก์:
SELECT query, shared_blks_hit, shared_blks_read,
shared_blks_read::FLOAT / NULLIF(shared_blks_hit + shared_blks_read, 0) AS read_ratio
FROM pg_stat_statements
ORDER BY shared_blks_read DESC LIMIT 20;JIT และเวลาวางแผน
PG 13+ แสดงค่า total_plan_time ได้ คิวรีบางรายการใช้เวลาในการ PLANNING มากกว่าการทำงานจริง ซึ่งโดยปกติเป็นสัญญาณว่าควรใช้คำสั่งที่เตรียมไว้
สถิติแยกตามฐานข้อมูลและผู้ใช้
pg_stat_statements ครอบคลุมทั้งคลัสเตอร์ กรองตามคอลัมน์ dbid และ userid เพื่อดูข้อมูลแยกตามฐานข้อมูลหรือผู้ใช้
ใช้ร่วมกับ EXPLAIN ANALYZE
pg_stat_statements บอกคุณว่าคิวรีใดช้า ส่วน EXPLAIN ANALYZE บอกว่าช้าเพราะเหตุใด
ข้อควรระวัง
- การสะสมข้อมูลแยกตามฐานข้อมูลและผู้ใช้อาจซ่อนปัญหาไว้ ดังนั้นให้ดูยอดรวมด้วย
- ไม่ได้ติดตามเวลาต่อแถว แต่ติดตามเวลารวมต่อการเรียกใช้
- ข้อมูลจะถูกรีเซ็ตเมื่อเริ่มระบบใหม่หรือเรียกใช้คำสั่งรีเซ็ต
สรุปทบทวน
pg_stat_statements เป็นสิ่งจำเป็นสำหรับระบบจริง
- อันดับต้นตามเวลารวม → จุดที่ปรับปรุงแล้วได้ผลมากที่สุด
- อันดับต้นตามค่าเฉลี่ย → ความช้าที่เกิดขึ้นอย่างสม่ำเสมอ
- อันดับต้นตามจำนวนครั้งที่เรียกใช้ → ปัญหาด้านความถี่
- ใช้คู่กับ EXPLAIN เพื่อแก้ไขปัญหา
ตรวจสอบอย่างรวดเร็ว
คุณเปิดใช้งาน pg_stat_statements แล้ว ควรตรวจสอบคิวรีใดเพื่อหาจุดที่ปรับปรุงประสิทธิภาพได้มากที่สุด
คำถามที่พบบ่อย
บทเรียน “pg_stat_statements: คำสั่งค้นหายอดนิยม” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “pg_stat_statements: คำสั่งค้นหายอดนิยม” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “pg_stat_statements: คำสั่งค้นหายอดนิยม”
เปิดใช้ pg_stat_statements ค้นหาคำสั่งที่ใช้เวลารวมมากที่สุด และมุ่งปรับปรุงคำสั่งเหล่านั้น คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “pg_stat_statements: คำสั่งค้นหายอดนิยม” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- pg_stat_statements: คำสั่งค้นหายอดนิยม
- pgBadger สำหรับวิเคราะห์บันทึก
- การรวมการเชื่อมต่อ: PgBouncer
- การวางแผนความจุและการตรวจสอบข้อมูลบวม