{"id":26250,"date":"2025-03-31T09:36:03","date_gmt":"2025-03-31T16:36:03","guid":{"rendered":"https:\/\/www.pingcap.com\/?p=26250"},"modified":"2025-04-28T23:58:04","modified_gmt":"2025-04-29T06:58:04","slug":"tikv-write-latency-solved-smoother-performance-without-compromises","status":"publish","type":"post","link":"https:\/\/www.pingcap.com\/ko\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/","title":{"rendered":"Write Latency, Solved: TiKV\u2019s Journey to Smoother Performance"},"content":{"rendered":"<p>Whether you\u2019re processing thousands of concurrent writes per second or scaling out infrastructure to meet a burst in demand, latency spikes can undermine user experience, reliability, and trust. At PingCAP, we obsess over these details. Our mission is to help teams build and scale confidently on <a href=\"https:\/\/www.pingcap.com\/ko\/blog\/why-distributed-sql-databases-elevate-modern-app-dev\/\">distributed SQL<\/a>. This post highlights how a subtle performance challenge deep inside our storage engine\u2014write stalls during data ingestion\u2014could ripple across workloads in production and impact TiKV write latency. <\/p>\n\n\n\n<p>In this blog, we&#8217;ll dive deep into how RocksDB, Raft, and <a href=\"https:\/\/docs.pingcap.com\/tidb\/stable\/tikv-overview\/\">TiKV<\/a> interact, and how we solved this write stall challenge through two key optimizations that now eliminate those stalls without compromising correctness.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"When_Bulk_Data_Ingestion_Slows_Down_TiKV_Write_Latency\"><\/span>When Bulk Data Ingestion Slows Down TiKV Write Latency<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><a href=\"https:\/\/www.pingcap.com\/ko\/tidb-self-managed\/\">\ud2f0DB<\/a>, a distributed SQL database, scales effortlessly with modern applications. Under the hood, it separates compute and storage to optimize for performance and flexibility. TiKV, an open-source distributed key-value engine, serves as the storage layer powering TiDB\u2019s transactional workloads.<\/p>\n\n\n\n<p>Whenever TiDB needs to move large amounts of data\u2014for example, during Region migration, cluster rebalancing, or scaling operations\u2014it relies on TiKV to load that data quickly and reliably.<\/p>\n\n\n\n<p>TiKV uses <a href=\"https:\/\/rocksdb.org\/\">RocksDB<\/a> as its embedded storage engine. When large volumes of data need to be loaded, it uses a method called <code>IngestExternalFile()<\/code>, which directly imports Sorted String Table (SST) files into storage. This approach bypasses the normal write path, reducing memory pressure and minimizing compaction overhead. RocksDB\u2019s ingestion process is designed for speed and efficiency \u2014 especially compared to writing data through the foreground path.<\/p>\n\n\n\n<p>But this speed comes with a catch. To maintain sequence number consistency in RocksDB\u2019s log-structured merge tree (LSM-tree), the ingestion process temporarily blocks all foreground writes. This temporary pause is known as a write stall.<\/p>\n\n\n\n<p>In isolation, a short stall might not matter. But all Regions (logical partitions of data) on the same TiKV node share a single RocksDB instance. So when one Region triggers a write stall, every Region on that node is affected\u2014even if they\u2019re unrelated. During large migrations or cluster scaling, this can lead to widespread write latency spikes, affecting the performance of otherwise unrelated workloads.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"497\" src=\"https:\/\/static.pingcap.com\/files\/2025\/04\/02080318\/image-1-1024x497.png\" alt=\"Each TiKV node hosts multiple Regions, all backed by a single RocksDB instance. During SST ingestion, a write stall in one Region affects all others on the same node.\" class=\"wp-image-26281\" srcset=\"https:\/\/static.pingcap.com\/files\/2025\/04\/02080318\/image-1-1024x497.png 1024w, https:\/\/static.pingcap.com\/files\/2025\/04\/02080318\/image-1-300x146.png 300w, https:\/\/static.pingcap.com\/files\/2025\/04\/02080318\/image-1-768x373.png 768w, https:\/\/static.pingcap.com\/files\/2025\/04\/02080318\/image-1.png 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 1. Each TiKV node hosts multiple Regions, all backed by a single RocksDB instance. During SST ingestion, a write stall in one Region affects all others on the same node.<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why_Sequence_Numbers_Matter_to_TiKV_Write_Latency\"><\/span>Why Sequence Numbers Matter to TiKV Write Latency<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>In RocksDB\u2019s log-structured merge tree (LSM-tree), data exists across multiple levels. To preserve consistency and ensure fast, correct reads, RocksDB assigns a global sequence number to every write.<\/p>\n\n\n\n<p>These sequence numbers are especially important during SST (Sorted String Table) ingestion. SSTs are immutable, sorted files used by RocksDB to store data efficiently on disk. When new SST files are ingested via <code>IngestExternalFile()<\/code>, they must fit into the sequence number ordering rules that RocksDB enforces.<\/p>\n\n\n\n<p>Specifically:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A key stored in a lower level (like L0) must have a higher sequence number than any version of that key in a higher level (like L6).<\/li>\n\n\n\n<li>This ordering allows RocksDB to return the latest value quickly without scanning deeper levels unnecessarily.<\/li>\n\n\n\n<li>It also prevents stale or partial reads when scanning across SSTs.<\/li>\n<\/ul>\n\n\n\n<p>To enforce this, RocksDB follows strict steps during ingestion:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Overlapping keys before ingestion:<\/strong> If a key in the new SST overlaps with one in the MemTable, RocksDB first flushes the MemTable to L0. The flushed data receives a sequence number, and the SST is placed at the same level but assigned a higher sequence number.<\/li>\n\n\n\n<li><strong>Overlapping keys during ingestion: <\/strong>RocksDB triggers a write stall, pausing all foreground writes. This acts like a lock, ensuring that all keys in the SST receive a consistent global sequence number.<\/li>\n\n\n\n<li><strong>Overlapping keys after ingestion:<\/strong> Once the SST is ingested and writes resume, any new writes to the same key will go to the MemTable and receive a newer sequence number.<\/li>\n<\/ul>\n\n\n\n<p>This process guarantees that reads always reflect the most up-to-date state and prevents mixing old and new versions of the same key in scan results.<\/p>\n\n\n\n<p>To maintain read correctness, RocksDB enforces that ingested SSTs must have higher sequence numbers than any overlapping data at lower levels. This is enforced via a write stall to preserve consistency.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"650\" src=\"https:\/\/static.pingcap.com\/files\/2025\/04\/02080449\/image-2-1024x650.png\" alt=\"Sequence number consistency in RocksDB during SST ingestion.\" class=\"wp-image-26282\" srcset=\"https:\/\/static.pingcap.com\/files\/2025\/04\/02080449\/image-2-1024x650.png 1024w, https:\/\/static.pingcap.com\/files\/2025\/04\/02080449\/image-2-300x190.png 300w, https:\/\/static.pingcap.com\/files\/2025\/04\/02080449\/image-2-768x488.png 768w, https:\/\/static.pingcap.com\/files\/2025\/04\/02080449\/image-2.png 1167w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 2. Sequence number consistency in RocksDB during SST ingestion<\/em>.<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"First_TiKV_Write_Latency_Optimization_Skip_the_Flush_Cut_the_Stall\"><\/span>First TiKV Write Latency Optimization: Skip the Flush, Cut the Stall<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>One of the primary contributors to write stall duration during SST ingestion is flushing the MemTable. Flushing is an expensive I\/O operation that takes time and temporarily blocks all writes. Since <code>IngestExternalFile()<\/code> may trigger a flush if it detects overlapping key ranges in the MemTable, it often extends the stall unnecessarily.<\/p>\n\n\n\n<p>To address this, TiKV implemented an optimization in <a href=\"https:\/\/github.com\/tikv\/tikv\/pull\/3775\">TiKV#3775<\/a>, using a RocksDB feature called <code>allow_blocking_flush<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How It Works<\/h3>\n\n\n\n<p>Instead of letting RocksDB decide when to flush during ingestion, TiKV now:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>First attempts ingestion with <code>allow_blocking_flush = false<\/code>. If no flush is needed, ingestion proceeds immediately.<\/li>\n\n\n\n<li>If the ingestion fails due to a required flush, TiKV manually flushes the MemTable outside of the write stall.<\/li>\n\n\n\n<li>It then retries ingestion with <code>allow_blocking_flush = true<\/code>, which now succeeds without triggering additional stalls.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">The Impact<\/h3>\n\n\n\n<p>After removing the MemTable flush from the ingestion path, write stall duration improved significantly\u2014up to 100 times faster in worst-case scenarios.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"430\" src=\"https:\/\/static.pingcap.com\/files\/2025\/04\/02080551\/image-3-1024x430.png\" alt=\"TiKV write latency stall duration before and after MemTable flush optimization.\" class=\"wp-image-26283\" srcset=\"https:\/\/static.pingcap.com\/files\/2025\/04\/02080551\/image-3-1024x430.png 1024w, https:\/\/static.pingcap.com\/files\/2025\/04\/02080551\/image-3-300x126.png 300w, https:\/\/static.pingcap.com\/files\/2025\/04\/02080551\/image-3-768x322.png 768w, https:\/\/static.pingcap.com\/files\/2025\/04\/02080551\/image-3.png 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 3. Write stall duration before and after MemTable flush optimization<\/em>.<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Second_TiKV_Write_Latency_Optimization_Eliminate_the_Stall_Entirely\"><\/span>Second TiKV Write Latency Optimization: Eliminate the Stall Entirely<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>While the first optimization dramatically reduced the duration of write stalls, they could still occur. The next question was: Can we eliminate the write stall completely?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Assumption: Sequential Writes via Raft<\/h3>\n\n\n\n<p>TiKV uses the <a href=\"https:\/\/docs.pingcap.com\/tidbcloud\/high-availability-with-multi-az\/\">Raft consensus protocol<\/a>, which enforces sequential commits per Region. Under normal conditions, only one thread writes to a Region at a time, whether during:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Region creation (ingesting SSTs),<\/li>\n\n\n\n<li>Normal operation (handling client writes), or<\/li>\n\n\n\n<li>Region destruction (clean-up).<\/li>\n<\/ul>\n\n\n\n<p>This single-threaded write behavior means we can safely assume that no overlapping writes occur during ingestion\u2014except in one edge case.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Exception: Compaction-Filter Garbage Collection<\/h3>\n\n\n\n<p>TiKV implements <a href=\"https:\/\/docs.pingcap.com\/tidb\/stable\/tikv-in-memory-engine\/\">MVCC (multi-version concurrency control)<\/a> garbage collection using RocksDB\u2019s compaction filter mechanism. This operates outside of Raft, directly at the RocksDB layer.<\/p>\n\n\n\n<p><em>Here\u2019s where the complication arises:<\/em><\/p>\n\n\n\n<p>TiKV uses multiple column families (CFs)\u2014separate logical partitions within a single RocksDB instance. Each CF stores a different type of data:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The <strong>Default CF<\/strong> holds user data (the actual values).<\/li>\n\n\n\n<li>The <strong>Write <\/strong><strong>CF<\/strong> stores version metadata, such as commit timestamps, which determine key validity.<\/li>\n\n\n\n<li>The <strong>Lock CF<\/strong> handles transactional state.<\/li>\n<\/ul>\n\n\n\n<p>During GC, the compaction filter runs on the <strong>Write CF<\/strong>, identifying and discarding outdated versions of keys. But to complete cleanup, TiKV also needs to delete the corresponding values in the <strong>Default <\/strong><strong>CF<\/strong>, which requires calling RocksDB\u2019s <code>Write()<\/code> method. These deletions happen as foreground writes\u2014outside the Raft layer\u2014and can potentially overlap with SST ingestion.<\/p>\n\n\n\n<p>This breaks the single-writer assumption and introduces a potential race condition.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Solution: Ingest Without Blocking Writes<\/h3>\n\n\n\n<p>To eliminate write stalls while preserving correctness, TiKV introduced two key changes:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Enable Ingestion with allow_write = true<\/h4>\n\n\n\n<p>A new option was added in <a href=\"https:\/\/github.com\/facebook\/rocksdb\/pull\/400\">RocksDB#400<\/a>, allowing ingestion to proceed without triggering a write stall. When <code>allow_write = true<\/code>, it\u2019s up to the RocksDB user (TiKV) to ensure no overlapping writes occur during ingestion.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Add Range Latches for Safety<\/h4>\n\n\n\n<p>To enforce that guarantee, TiKV added <strong>range latches<\/strong> in <a href=\"https:\/\/github.com\/tikv\/tikv\/pull\/18096\">TiKV#18096<\/a>. Before SST ingestion or GC begins, the process must acquire a lock on the relevant key range. This ensures:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Foreground writes triggered by GC won\u2019t interfere with ingestion.<\/li>\n\n\n\n<li><code>IngestExternalFile()<\/code> can safely run with <code>allow_write = true<\/code> and avoid the write stall entirely.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">The Impact<\/h3>\n\n\n\n<p>With these changes, TiKV can now safely ingest SSTs without blocking writes\u2014dramatically improving tail latency and write performance under load.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Results from TPCC Benchmark<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>P9999 write thread wait time <\/strong>dropped by over 90% (25ms \u2192 2ms)<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"471\" src=\"https:\/\/static.pingcap.com\/files\/2025\/04\/02080652\/image-4-1024x471.png\" alt=\"Eliminating TiKV write latency stalls significantly reduced worst-case (P9999) wait times for write threads.\" class=\"wp-image-26284\" srcset=\"https:\/\/static.pingcap.com\/files\/2025\/04\/02080652\/image-4-1024x471.png 1024w, https:\/\/static.pingcap.com\/files\/2025\/04\/02080652\/image-4-300x138.png 300w, https:\/\/static.pingcap.com\/files\/2025\/04\/02080652\/image-4-768x353.png 768w, https:\/\/static.pingcap.com\/files\/2025\/04\/02080652\/image-4.png 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 4. Eliminating write stalls significantly reduced worst-case (P9999) wait times for write threads.<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>P99 write latency<\/strong> dropped by more than 50% (2\u20134ms \u2192 1ms)<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"467\" src=\"https:\/\/static.pingcap.com\/files\/2025\/04\/02080736\/image-5-1024x467.png\" alt=\"After the optimization, P99 write latency became consistently low and predictable, even under heavy load.\" class=\"wp-image-26285\" srcset=\"https:\/\/static.pingcap.com\/files\/2025\/04\/02080736\/image-5-1024x467.png 1024w, https:\/\/static.pingcap.com\/files\/2025\/04\/02080736\/image-5-300x137.png 300w, https:\/\/static.pingcap.com\/files\/2025\/04\/02080736\/image-5-768x350.png 768w, https:\/\/static.pingcap.com\/files\/2025\/04\/02080736\/image-5.png 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><em>Figure 5. After the optimization, P99 write latency became consistently low and predictable, even under heavy load.<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>What began as a subtle storage-layer challenge\u2014write stalls triggered during SST ingestion\u2014turned into a meaningful performance breakthrough for TiKV.<\/p>\n\n\n\n<p>By taking a deep look at how RocksDB handles sequence number consistency and designing targeted optimizations, the TiKV team delivered two key improvements:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Reduced write stall duration<\/strong> by moving MemTable flushes outside of the ingestion path (via <code>allow_blocking_flush = false<\/code>)<\/li>\n\n\n\n<li><strong>Eliminated write stalls entirely<\/strong> by coordinating compaction-filter GC and ingestion through <code>allow_write = true<\/code> and range latches<\/li>\n<\/ul>\n\n\n\n<p>These changes had a measurable impact:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Maximum write duration improved by nearly 100x<\/li>\n\n\n\n<li>P9999 write wait time dropped by over 90%<\/li>\n\n\n\n<li>P99 write latency reduced by more than half<\/li>\n<\/ul>\n\n\n\n<p>Together, these optimizations help TiKV deliver the kind of predictable, scalable write performance that teams expect from a distributed database \u2014 even under pressure from Region migration, garbage collection, or cluster scale-out.<\/p>\n\n\n\n<p>If you\u2019re building on TiKV or TiDB, and performance stability during data movement or scaling is critical to your workloads, these optimizations are already working for you. And if you\u2019re tackling similar issues in your own system, we hope this post gave you a helpful lens into the tradeoffs and solutions that worked for us.<\/p>\n\n\n\n<p>We\u2019re always refining and sharing what we learn \u2014 if you have any questions, please feel free to connect with us on\u00a0<a href=\"https:\/\/twitter.com\/PingCAP\" target=\"_blank\" rel=\"noreferrer noopener\">Twitter<\/a>,\u00a0<a href=\"https:\/\/www.linkedin.com\/company\/pingcap\/mycompany\/\" target=\"_blank\" rel=\"noreferrer noopener\">LinkedIn<\/a>, or through our\u00a0<a href=\"https:\/\/slack.tidb.io\/invite?team=tidb-community&amp;channel=everyone&amp;ref=pingcap&amp;__hstc=86493575.56092b205279b52d173af4ce908b29cc.1742330167370.1743601283146.1743608153952.53&amp;__hssc=86493575.10.1743608153952&amp;__hsfp=2857618120\" target=\"_blank\" rel=\"noreferrer noopener\">Slack Channel<\/a>.\u00a0<\/p>\n\n\n\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Whether you\u2019re processing thousands of concurrent writes per second or scaling out infrastructure to meet a burst in demand, latency spikes can undermine user experience, reliability, and trust. At PingCAP, we obsess over these details. Our mission is to help teams build and scale confidently on distributed SQL. This post highlights how a subtle performance [&hellip;]<\/p>\n","protected":false},"author":299,"featured_media":26291,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ub_ctt_via":"","footnotes":""},"categories":[6],"tags":[147,396,9,111,22],"class_list":["post-26250","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engineering","tag-distributed-sql","tag-p99-latency","tag-scalability","tag-tidb","tag-tikv"],"acf":[],"featured_image_src":"https:\/\/static.pingcap.com\/files\/2025\/04\/02091627\/tidb_feature_1800x600-1.png","author_info":{"display_name":"Wilco Huang","author_link":"https:\/\/www.pingcap.com\/ko\/blog\/author\/whuang\/"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>TiKV Write Latency Solved: Unlock Smoother, Faster Performance<\/title>\n<meta name=\"description\" content=\"Discover the engineering work behind two key TiKV write latency optimizations that now eliminate write stalls and unlock faster performance.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.pingcap.com\/ko\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"TiKV Write Latency Solved: Unlock Smoother, Faster Performance\" \/>\n<meta property=\"og:description\" content=\"Discover the engineering work behind two key TiKV write latency optimizations that now eliminate write stalls and unlock faster performance.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.pingcap.com\/ko\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/\" \/>\n<meta property=\"og:site_name\" content=\"TiDB\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/pingcap2015\" \/>\n<meta property=\"article:published_time\" content=\"2025-03-31T16:36:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-04-29T06:58:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/static.pingcap.com\/files\/2025\/04\/02091646\/tidb_1200x627.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1254\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Wilco Huang\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/static.pingcap.com\/files\/2025\/04\/02091701\/tidb_twitter_1600x900.png\" \/>\n<meta name=\"twitter:creator\" content=\"@PingCAP\" \/>\n<meta name=\"twitter:site\" content=\"@PingCAP\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Wilco Huang\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/\"},\"author\":{\"name\":\"Wilco Huang\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/68086151b07b9d8ea3abcb4b53b2dd1a\"},\"headline\":\"Write Latency, Solved: TiKV\u2019s Journey to Smoother Performance\",\"datePublished\":\"2025-03-31T16:36:03+00:00\",\"dateModified\":\"2025-04-29T06:58:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/\"},\"wordCount\":1540,\"publisher\":{\"@id\":\"https:\/\/www.pingcap.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/static.pingcap.com\/files\/2025\/04\/02091627\/tidb_feature_1800x600-1.png\",\"keywords\":[\"Distributed SQL\",\"P99 Latency\",\"Scalability\",\"TiDB\",\"TiKV\"],\"articleSection\":[\"Engineering\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/\",\"url\":\"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/\",\"name\":\"TiKV Write Latency Solved: Unlock Smoother, Faster Performance\",\"isPartOf\":{\"@id\":\"https:\/\/www.pingcap.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/static.pingcap.com\/files\/2025\/04\/02091627\/tidb_feature_1800x600-1.png\",\"datePublished\":\"2025-03-31T16:36:03+00:00\",\"dateModified\":\"2025-04-29T06:58:04+00:00\",\"description\":\"Discover the engineering work behind two key TiKV write latency optimizations that now eliminate write stalls and unlock faster performance.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/#primaryimage\",\"url\":\"https:\/\/static.pingcap.com\/files\/2025\/04\/02091627\/tidb_feature_1800x600-1.png\",\"contentUrl\":\"https:\/\/static.pingcap.com\/files\/2025\/04\/02091627\/tidb_feature_1800x600-1.png\",\"width\":3600,\"height\":1200},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.pingcap.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Write Latency, Solved: TiKV\u2019s Journey to Smoother Performance\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.pingcap.com\/#website\",\"url\":\"https:\/\/www.pingcap.com\/\",\"name\":\"TiDB\",\"description\":\"TiDB | SQL at Scale\",\"publisher\":{\"@id\":\"https:\/\/www.pingcap.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.pingcap.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.pingcap.com\/#organization\",\"name\":\"PingCAP\",\"url\":\"https:\/\/www.pingcap.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png\",\"contentUrl\":\"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png\",\"width\":811,\"height\":232,\"caption\":\"PingCAP\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/facebook.com\/pingcap2015\",\"https:\/\/x.com\/PingCAP\",\"https:\/\/linkedin.com\/company\/pingcap\",\"https:\/\/youtube.com\/channel\/UCuq4puT32DzHKT5rU1IZpIA\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/68086151b07b9d8ea3abcb4b53b2dd1a\",\"name\":\"Wilco Huang\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg\",\"contentUrl\":\"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg\",\"caption\":\"Wilco Huang\"},\"description\":\"TiDB Storage Engineer\",\"url\":\"https:\/\/www.pingcap.com\/ko\/blog\/author\/whuang\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"TiKV Write Latency Solved: Unlock Smoother, Faster Performance","description":"Discover the engineering work behind two key TiKV write latency optimizations that now eliminate write stalls and unlock faster performance.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.pingcap.com\/ko\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/","og_locale":"ko_KR","og_type":"article","og_title":"TiKV Write Latency Solved: Unlock Smoother, Faster Performance","og_description":"Discover the engineering work behind two key TiKV write latency optimizations that now eliminate write stalls and unlock faster performance.","og_url":"https:\/\/www.pingcap.com\/ko\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/","og_site_name":"TiDB","article_publisher":"https:\/\/facebook.com\/pingcap2015","article_published_time":"2025-03-31T16:36:03+00:00","article_modified_time":"2025-04-29T06:58:04+00:00","og_image":[{"width":2400,"height":1254,"url":"https:\/\/static.pingcap.com\/files\/2025\/04\/02091646\/tidb_1200x627.png","type":"image\/png"}],"author":"Wilco Huang","twitter_card":"summary_large_image","twitter_image":"https:\/\/static.pingcap.com\/files\/2025\/04\/02091701\/tidb_twitter_1600x900.png","twitter_creator":"@PingCAP","twitter_site":"@PingCAP","twitter_misc":{"Written by":"Wilco Huang","Est. reading time":"8\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/#article","isPartOf":{"@id":"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/"},"author":{"name":"Wilco Huang","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/68086151b07b9d8ea3abcb4b53b2dd1a"},"headline":"Write Latency, Solved: TiKV\u2019s Journey to Smoother Performance","datePublished":"2025-03-31T16:36:03+00:00","dateModified":"2025-04-29T06:58:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/"},"wordCount":1540,"publisher":{"@id":"https:\/\/www.pingcap.com\/#organization"},"image":{"@id":"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/#primaryimage"},"thumbnailUrl":"https:\/\/static.pingcap.com\/files\/2025\/04\/02091627\/tidb_feature_1800x600-1.png","keywords":["Distributed SQL","P99 Latency","Scalability","TiDB","TiKV"],"articleSection":["Engineering"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/","url":"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/","name":"TiKV Write Latency Solved: Unlock Smoother, Faster Performance","isPartOf":{"@id":"https:\/\/www.pingcap.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/#primaryimage"},"image":{"@id":"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/#primaryimage"},"thumbnailUrl":"https:\/\/static.pingcap.com\/files\/2025\/04\/02091627\/tidb_feature_1800x600-1.png","datePublished":"2025-03-31T16:36:03+00:00","dateModified":"2025-04-29T06:58:04+00:00","description":"Discover the engineering work behind two key TiKV write latency optimizations that now eliminate write stalls and unlock faster performance.","breadcrumb":{"@id":"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/#primaryimage","url":"https:\/\/static.pingcap.com\/files\/2025\/04\/02091627\/tidb_feature_1800x600-1.png","contentUrl":"https:\/\/static.pingcap.com\/files\/2025\/04\/02091627\/tidb_feature_1800x600-1.png","width":3600,"height":1200},{"@type":"BreadcrumbList","@id":"https:\/\/www.pingcap.com\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.pingcap.com\/"},{"@type":"ListItem","position":2,"name":"Write Latency, Solved: TiKV\u2019s Journey to Smoother Performance"}]},{"@type":"WebSite","@id":"https:\/\/www.pingcap.com\/#website","url":"https:\/\/www.pingcap.com\/","name":"\ud2f0DB","description":"TiDB | SQL at Scale","publisher":{"@id":"https:\/\/www.pingcap.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.pingcap.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.pingcap.com\/#organization","name":"PingCAP","url":"https:\/\/www.pingcap.com\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/","url":"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png","contentUrl":"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png","width":811,"height":232,"caption":"PingCAP"},"image":{"@id":"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/facebook.com\/pingcap2015","https:\/\/x.com\/PingCAP","https:\/\/linkedin.com\/company\/pingcap","https:\/\/youtube.com\/channel\/UCuq4puT32DzHKT5rU1IZpIA"]},{"@type":"Person","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/68086151b07b9d8ea3abcb4b53b2dd1a","name":"Wilco Huang","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/image\/","url":"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg","contentUrl":"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg","caption":"Wilco Huang"},"description":"TiDB Storage Engineer","url":"https:\/\/www.pingcap.com\/ko\/blog\/author\/whuang\/"}]}},"grav_blocks":false,"card_markup":"<a class=\"card-resource bg-white\" href=\"https:\/\/www.pingcap.com\/ko\/blog\/tikv-write-latency-solved-smoother-performance-without-compromises\/\"><div class=\"card-resource__image-container\"><img class=\"card-resource__image\" alt=\"tidb_feature_1800x600 (1)\" src=\"https:\/\/static.pingcap.com\/files\/2025\/04\/02091627\/tidb_feature_1800x600-1.png\" loading=\"lazy\" width=3600 height=1200 \/><\/div><div class=\"card-resource__content-container\"><div class=\"card-resource__content-head\"><div class=\"card-resource__category\">Engineering<\/div><\/div><h5 class=\"card-resource__title\">Write Latency, Solved: TiKV\u2019s Journey to Smoother Performance<\/h5><\/div><\/a>","_links":{"self":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/26250","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/users\/299"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/comments?post=26250"}],"version-history":[{"count":15,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/26250\/revisions"}],"predecessor-version":[{"id":26297,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/26250\/revisions\/26297"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/media\/26291"}],"wp:attachment":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/media?parent=26250"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/categories?post=26250"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/tags?post=26250"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}