Community寫作與編輯github.com

tablestudioapp/plugins

透過 TableStudio 尋找並修復緩慢的資料庫查詢,以測量數據驗證每個修復方案,並檢查資料庫的整體健康狀況。當查詢、頁面或端點速度緩慢時,當被問到哪些查詢緩慢或資料庫出了什麼問題時,在新增、審查或刪除索引時,當 ORM 查詢需要調校時,或當需要判斷 SQL 改寫是否更快時,皆可使用。

plugins 是什麼?

此技能透過 TableStudio 工具,提供以數據驅動的方式診斷與最佳化 PostgreSQL(及其他)資料庫效能。它擺脫僅憑直覺猜測的做法,要求使用者在提出索引重構或查詢改寫建議前,必須先透過基準測試(benchmarking)來驗證其效能提升。該技能整合了多種 PostgreSQL 專用工具(如 `pg_stat_statements`、`hypopg`)來識別緩慢查詢、分析執行計畫、建議假設性索引,並安全地比較查詢變體。同時也提供全面的資料庫健康檢查,自動找出未使用的索引、結構問題與其他可能瓶頸。使用者可以透過緩慢查詢報告、個別診斷或整體審查來啟動工作流程,最終生成可操作的變更(如遷移腳本或程式碼修改),並附上測量數據作為佐證。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/tablestudioapp/plugins/tree/HEAD/tablestudio/skills/query-performance

Installed? Explore more 寫作與編輯 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

使用 TableStudio 加速查詢

TableStudio 能實際測量,而非僅靠猜測。絕不要在可以用以下工具證明其效能時,僅憑直覺就建議新增索引或改寫 SQL。這些工具大多僅限於 PostgreSQL;在其他資料庫引擎上,請使用 explain_query 並根據計畫進行推理。

請先依照 database-workflow 技能中的說明選擇連線。建議在包含真實數據的資料庫上執行分析。近乎空的開發資料庫會產生誤導性的執行計畫。

找出緩慢的來源

  • 使用者提到某個查詢或端點: 找出它實際執行的 SQL(來自程式碼或 ORM 的日誌),然後前往「診斷單一陳述式」。
  • 「為什麼資料庫這麼慢?」 調用 slow_queries。它會根據 pg_stat_statements 的累計時間對陳述式進行排序。請保留每一列的 query_id;其他工具會用到它。如果該擴充功能尚未安裝,此工具會說明啟用它所涉及的步驟,請傳達此訊息,而非未經詢問就自行安裝。
  • 廣泛調校: workload_index_advisor 能找出覆蓋最多資料庫時間的極少數索引,並列出從未被使用過的現有索引。

健康檢查

當使用者詢問資料庫出了什麼問題,或想要進行一般性審查時,請不要進行任何變更,直接回報:

  1. database_health。在總結前,請先閱讀其 unavailable 清單:如果 unavailable 中有條目,但 findings 清單為空,這表示檢查被跳過了,而不是一切正常。
  2. database_overview 以了解大小、最大和最忙碌的資料表,以及連線數。
  3. schema_issues(不含 table 參數)以了解資料庫層級的設計問題。

將最重要的發現放在最前面,用白話文說明:出了什麼問題、忽略它的成本為何、以及修復方法。請包含每個發現的 verify_sql,以便使用者可以驗證該數字,以及任何修復方案的 lock_impact。主動提議將使用者選擇的修復方案,透過下方的「部署它」來執行。

診斷單一陳述式

  1. 使用 SQL(以及若來自 slow_queries 的 query_id)調用 optimize_query。如果是唯讀陳述式,請傳入 analyze: true 以執行測量檢查。它會在被復原的交易中執行一次。當沒有值得做的事情時,它會回報 already_fast;請直接說明,不要憑空發明一個改進方案。
  2. 需要更多細節時,請使用 explain_query(僅限唯讀查詢傳入 analyze: true)。比較每個節點上的 actual_rows 與 estimated_rows。兩者差距過大表示統計資訊過時(請對該資料表執行 ANALYZE),這通常是真正的問題所在,而非缺少索引。
  3. 帶有 $1, $2 佔位符的陳述式需要真實數值才能誠實地規劃。suggest_parameter_values 可以從歷史記錄、活躍工作階段和統計資料中找出這些值。

證明修復方案

在推薦任何方案之前,請使用 benchmark_query_variants(查詢實驗室):

  • 提供基線 SQL 以及作為 variants 的候選方案:一個經過改寫的 sql、hypothetical_indexes(使用 hypopg 規劃,絕不實際建立)、hide_indexes,或 planner settings。或者省略 variants,讓 find_faster 自行提出建議。
  • 它會為每組參數回報多次執行的中位數,並檢查每次改寫是否回傳與基線相同的資料列。
  • 僅推薦 same_rows 為「是」的變體。優先選擇 recommendation 中的變體。引用測量到的前後差異,而不是憑直覺猜測的百分比。

在刪除一個索引(未使用或重複)之前,請執行 index_what_if 並在 hide 參數中指定該索引。任何因此變得更昂貴,或目前正在使用此索引的陳述式,都會受到影響。

部署它

索引變更和 SQL 改寫應遵循 database-workflow 技能中的常規變更流程:

  • 索引變更屬於結構變更。如果儲存庫有遷移工具,請將索引新增到該工具中。否則,請使用 stage_migration 來提出建議,並在 rationale 中包含測量數據。
  • 在 PostgreSQL 上,對於任何會接收流量的資料表,請使用 CREATE INDEX CONCURRENTLY,且不要將其包在交易中。
  • SQL 改寫屬於程式碼變更:請編輯發出該查詢的程式碼,並在你的總結中提及基準測試結果。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相關技能