Skip to content

Skill / /znf:explain-plan

/znf:explain-plan

DB-perf gate hai tầng: quét tĩnh diff và explain plan từng query, phân loại phát hiện BLOCKING hoặc ADVISORY.

Cách gọi

text
/znf:explain-plan

Khi nào dùng

Khi diff thêm hoặc đổi một query DB. /znf:ground gọi skill này sớm ở mức advisory; /znf:ship gọi lại ở bước verify và một phát hiện BLOCKING chưa được waive làm ship không hoàn tất.

Cách hoạt động

  1. Skill chạy zenify db-perf --json, mặc định quét origin/staging..HEAD. Khi không có query nào trong diff, skill ghi "no query in this diff" và dừng.
  2. Khi DB truy cập được, skill lấy tên collection thật rồi chạy explain cho từng chỗ gọi qua zenify db-read eval với explain("executionStats") hoặc zenify db-read sql 'EXPLAIN ANALYZE ...'. Không truy cập được thì skill ghi "dynamic layer skipped: DB unreachable" và chỉ giữ kết quả tĩnh.
  3. Phân loại: COLLSCAN trên collection lớn, Seq Scan trên bảng lớn, hoặc tỉ lệ docs xem trên docs trả về trên 100 là BLOCKING; tỉ lệ 10 đến 100, có SORT dù đã IXSCAN, hoặc $lookup sang collection bị COLLSCAN là ADVISORY.
  4. Skill in một khối ## DB-Perf, BLOCKING trước, mở đầu bằng "Advisory — no BLOCKING finding." hoặc "BLOCKING — N finding(s) must be fixed or waived before ship."

Lưu ý

Index tồn tại không có nghĩa index được dùng; skill đọc IXSCAN thật trong plan. Waive một phát hiện bằng comment // znf:db-perf-ok: <lý do> trên dòng query.