<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Performance on Hanh Pham's Blog</title><link>https://hanhpham.vercel.app/tags/performance/</link><description>Recent content in Performance on Hanh Pham's Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 02 Oct 2026 09:00:00 +0700</lastBuildDate><atom:link href="https://hanhpham.vercel.app/tags/performance/index.xml" rel="self" type="application/rss+xml"/><item><title>Docker BuildKit in CI: The Economics of Network I/O vs CPU Compilation</title><link>https://hanhpham.vercel.app/posts/docker-buildkit-caching-economics-in-ci/</link><pubDate>Fri, 02 Oct 2026 09:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/docker-buildkit-caching-economics-in-ci/</guid><description>Enabling remote layer caching in CI often slows builds down instead of speeding them up. Here is how network transit limits, cache thrashing, and local NVMe runners dictate the real economics of container builds.</description></item><item><title>CFS Quota Throttling &amp; Silent OOMKills: The Fallacy of Kubernetes CPU Limits</title><link>https://hanhpham.vercel.app/posts/kubernetes-cfs-cpu-throttling-and-resource-limits/</link><pubDate>Mon, 28 Sep 2026 09:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/kubernetes-cfs-cpu-throttling-and-resource-limits/</guid><description>Setting hard CPU limits on latency-sensitive microservices destroys p99 response times while average utilization appears deceptively low. Here is how Linux CFS quotas, Go GOMAXPROCS, and GOMEMLIMIT actually behave under load.</description></item><item><title>Deleting Language from the LLM: Inside TypeSafe's Jev and Decision Models</title><link>https://hanhpham.vercel.app/posts/typesafe-jev-decision-models/</link><pubDate>Tue, 22 Sep 2026 09:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/typesafe-jev-decision-models/</guid><description>When you force a 70-billion-parameter language model to output &amp;rsquo;true&amp;rsquo; or &amp;lsquo;false&amp;rsquo;, you pay for sequential token decoding, uncalibrated probabilities, and broken JSON. Here is why TypeSafe stripped natural language out of the loop.</description></item><item><title>Making a Multi-Step SQL Server Script's Rollback Actually Trustworthy</title><link>https://hanhpham.vercel.app/posts/sql-server-trustworthy-rollback-xact-abort/</link><pubDate>Sun, 06 Sep 2026 11:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/sql-server-trustworthy-rollback-xact-abort/</guid><description>When one step in a multi-step SQL Server script fails, what actually happens to your data depends entirely on how you&amp;rsquo;ve wired up error handling, and the default is not what most people assume. Three scenarios, measured with real ledger output.</description></item><item><title>When a Wildcard Join Multiplies Your Data (and How to Actually Fix It)</title><link>https://hanhpham.vercel.app/posts/sql-server-wildcard-joins-and-unpivot/</link><pubDate>Sat, 05 Sep 2026 10:30:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/sql-server-wildcard-joins-and-unpivot/</guid><description>A join rule that matches &amp;lsquo;anything&amp;rsquo; looks like an ordinary filter, until it quietly multiplies your row count. Measured, not estimated: what a wildcard join actually costs, why a CREATE INDEX line doesn&amp;rsquo;t always buy you a seek, and why UNPIVOT beats a ten-way OR chain.</description></item><item><title>Go Performance Profiling with pprof: Finding the Slow Part</title><link>https://hanhpham.vercel.app/posts/go-performance-profiling-with-pprof/</link><pubDate>Sat, 01 Aug 2026 10:00:00 +0700</pubDate><guid>https://hanhpham.vercel.app/posts/go-performance-profiling-with-pprof/</guid><description>Your Go service is slow, but you don&amp;rsquo;t know where. Guessing is not a strategy. pprof tells you exactly where your program spends its time, memory, and CPU; here&amp;rsquo;s how to use it.</description></item></channel></rss>