ããŒã¿ããŒã¹ã¯ãšãªæé©åãµãŒãã¹ãé ãã¯ãšãªãåæã»ä¿®æ£ããå¹ççãªã€ã³ããã¯ã¹ãèšèšããããŒã¿ã¢ã¯ã»ã¹ãã¿ãŒã³ãåæ§ç¯ããŠãæ¡éãã®æ¹åãå®çŸããŸãã
å§ãã
é ãã¯ãšãªã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹åé¡ã®æå€§ã®åå ã§ããEXPLAIN plansãçµ±èšãã¢ã¯ã»ã¹ãã¿ãŒã³ãã¯ãŒã¯ããŒããããã¡ã€ãªã³ã°ãšãã£ãäœç³»çãªåæãçšããŠãã¯ãšãªãé ãåå ãæ£ç¢ºã«ç¹å®ãã10ã100åã®é床æ¹åãå®çŸãããœãªã¥ãŒã·ã§ã³ãå°å ¥ããŸããåœãŠæšéã§ã¯ãªããããŒã¿ã«åºã¥ããæé©åãè¡ããŸãã
åœç€Ÿã¯äž»ã«PostgreSQL (Aurora, Neon, Supabaseãå«ã), MySQL, ããã³MongoDBãåãæ±ã£ãŠããŸããåœç€Ÿã®åæã§ã¯ãpg_stat_statements, auto_explain, pganalyze, ããã³ã«ã¹ã¿ã ã¯ãšãªãããã¡ã€ãªã³ã°ã䜿çšããŸãããœãªã¥ãŒã·ã§ã³ã«ã¯ãã€ã³ããã¯ã¹æŠç¥ãã¯ãšãªã®æžãæããMaterialized Viewsãããã³ã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã®å€æŽãå«ãŸããŸãã
ãŠãŒã¶ãŒã«çŽé¢ããã¬ã€ãã³ã·ãé«ãããŒã¿ããŒã¹CPU䜿çšçããŸãã¯ããã¯ç«¶åãåŒãèµ·ããé ãããŒã¿ããŒã¹ã¯ãšãªãæã€ã¢ããªã±ãŒã·ã§ã³åãã§ããããã·ã¥ããŒããé ãããŠããããã€ãã®éèŠãªã¯ãšãªã§ãã£ãŠããåºç¯ãªé å»¶ãåŒãèµ·ãããŠããã·ã¹ãã çãªã¯ãšãªãã¿ãŒã³ã§ãã£ãŠããåœç€Ÿããããä¿®æ£ããŸãã
Identify top slow queries using pg_stat_statements, analyze access patterns, and measure baseline performance.
Run EXPLAIN ANALYZE on each slow query, identify missing indexes, bad joins, and suboptimal patterns.
Implement index changes, query rewrites, schema adjustments, and caching for most impactful queries.
Benchmark optimized queries, verify no regressions in other queries, and load test under concurrent access.
Set up slow query tracking, regression alerts, and periodic review cadence for continued optimization.
ã¿ãŒã²ãããçµã£ãã¯ãšãªæé©åã«ãããããŒã¿ããŒã¹ãããã«ããã¯ããããã©ãŒãã³ã¹è³ç£ã«å€ããŸãããã
EXPLAIN ANALYZE ã䜿çšããŠå®è¡ãã©ã³ãåæããäžè¶³ãŸãã¯åé·ãªã€ã³ããã¯ã¹ãç¹å®ãããµãã¯ãšãªãçµåïŒJOINïŒãšããŠæžãæããN+1ãã¿ãŒã³ãæé€ããããŒãã«çµ±èšãæé©åããããšã§ãã¯ãšãªãã©ã³ããŒãæé©ãªæ±ºå®ãäžããããã«ããŸãã
MicrocosmWorksã®ã¯ãšãªæé©åãµãŒãã¹ã¯ã1æéããã$20ïœ$45ã®ç¯å²ã§ããéåžžãæãé ãã¯ãšãªã®ãããã¡ã€ãªã³ã°ããéå§ããæåã«æã圱é¿ã®å€§ãããã®ãä¿®æ£ããããšã§ãæ°æ¥ä»¥å ã«æž¬å®å¯èœãªæ¹åãæäŸããŸãã
ã¯ããåœç€Ÿã§ã¯ãæ°ååè¡ã®ããŒãã«ã§ãã£ãŠã1ç§æªæºã®å¿çæéãç¶æããããã«ãããŒãã«ããŒãã£ã·ã§ãã³ã°ãããŒã·ã£ã«ã€ã³ããã¯ã¹ããããªã¢ã©ã€ãºããã¥ãŒãã«ããªã³ã°ã€ã³ããã¯ã¹ãããã³ã¯ãšãªåæ§ç¯ãçšããŠå€§èŠæš¡ãªããŒã¿ããŒã¹ãæé©åããŸãã
ã¯ãããã¡ããã§ããç§ãã¡ã¯ãDjangoãSQLAlchemyãPrismaãHibernateãããã³ãã®ä»ã® ORM ãçæãã SQL ãç£æ»ããeager/lazy loading ã®åé¡ãäžèŠãªçµåãããã³ N+1 ãã¿ãŒã³ãç¹å®ããŸãããã®åŸãORM ã®äœ¿ç𿹿³ãæé©åããããå¿ èŠã«å¿ã㊠raw SQL ã远å ããŸãã
pg_stat_statementsãé¡äŒŒããŒã«ã䜿çšããŠèªååãããã¯ãšãªããã©ãŒãã³ã¹ç£èŠãã»ããã¢ããããéèŠãªã¯ãšãªã«å¯Ÿããååž°ãã¹ãã¹ã€ãŒããäœæããã¯ãšãªå®è¡æéã確ç«ãããããŒã¹ã©ã€ã³ãè¶ ããå Žåã«ããªã¬ãŒãããã¢ã©ãŒããèšå®ããŸãã