{"id":30285,"date":"2025-11-06T08:29:50","date_gmt":"2025-11-06T16:29:50","guid":{"rendered":"https:\/\/www.pingcap.com\/?p=30285"},"modified":"2025-11-12T10:38:14","modified_gmt":"2025-11-12T18:38:14","slug":"scaling-tidb-locally-online-ddl-tutorial","status":"publish","type":"post","link":"https:\/\/www.pingcap.com\/ko\/blog\/scaling-tidb-locally-online-ddl-tutorial\/","title":{"rendered":"How to Scale TiDB Locally with Online DDL"},"content":{"rendered":"<p>Data-intensive applications outgrow single-node MySQL long before product-market fit is \u201cdone.\u201d Hot partitions, schema change windows, and manual sharding slow teams down. But <a href=\"https:\/\/www.pingcap.com\/ko\/tidb\/\">\ud2f0DB<\/a> solves this with a <a href=\"https:\/\/docs.pingcap.com\/tidb\/stable\/mysql-compatibility\/\">MySQL \ud638\ud658<\/a>, <a href=\"https:\/\/www.pingcap.com\/ko\/blog\/why-distributed-sql-databases-elevate-modern-app-dev\/\">distributed SQL architecture<\/a> that scales storage and compute independently and keeps applications online during change.<\/p>\n\n\n\n<p>In this quick tutorial, we&#8217;ll spin up TiDB locally with <a href=\"https:\/\/docs.pingcap.com\/tidb\/stable\/tiup-playground\/#tiup-playground-overview\">TiUP Playground<\/a>, establish a baseline, and then scale live, all without restarting or taking downtime. Along the way, we&#8217;ll observe region rebalancing, verify replication settings, and run DDL safely under load. By the end, you\u2019ll have a working mental model for how TiDB\u2019s elasticity translates from a laptop to production.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Prerequisites\"><\/span><strong>Prerequisites<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>First, install TiUP.<strong> <\/strong>If you don\u2019t already have TiUP, install it from<a href=\"https:\/\/tiup.io\"> tiup.io<\/a>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl --proto '=https' --tlsv1.2 -sSf https:\/\/tiup-mirrors.pingcap.com\/install.sh | sh<\/code><\/pre>\n\n\n\n<p>Then set the mirror and update to the latest version:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tiup mirror set https:\/\/tiup-mirrors.pingcap.com\ntiup update --self &amp;&amp; tiup update --all<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_1_Start_Small\"><\/span><strong>Step 1: Start Small<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Let\u2019s start with the tiniest possible cluster: <strong>1\u00d7 TiDB, 1\u00d7 TiKV, 1\u00d7 PD<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tiup playground --db 1 --pd 1 --kv 1 --tag democluster<\/code><\/pre>\n\n\n\n<p>Keep this terminal open; TiDB usually runs on port 4000.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Load a Small Dataset<\/h3>\n\n\n\n<p>Now, in another terminal:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tiup bench tpcc --host 127.0.0.1 --port 4000 -D test --dropdata --warehouses 5 prepare<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Run a Baseline Workload<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>tiup bench tpcc --host 127.0.0.1 --port 4000 -D test --warehouses 5 --time 120s --threads 32 run<\/code><\/pre>\n\n\n\n<p>You can also explore DDL in real time. Let&#8217;s now login to the MySQL Client:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mysql -h 127.0.0.1 -P 4000 -u root&nbsp;\n\n<strong>Use<\/strong> <strong>test<\/strong>;\n<strong>CREATE<\/strong> <strong>INDEX<\/strong> idx_qty <strong>ON<\/strong> stock (s_w_id);\n<strong>SHOW<\/strong> <strong>INDEXES<\/strong> <strong>FROM<\/strong> stock;\n<strong>ALTER<\/strong> <strong>TABLE<\/strong> stock <strong>DROP<\/strong> <strong>INDEX<\/strong> idx_qty;\nADMIN <strong>SHOW<\/strong> <strong>DDL<\/strong> JOBS 3;\n<strong>SHOW<\/strong> <strong>INDEXES<\/strong> <strong>FROM<\/strong> stock;<\/code><\/pre>\n\n\n\n<p>This gives you a baseline TPS and latency profile on a single <a href=\"https:\/\/docs.pingcap.com\/tidb\/stable\/tikv-overview\/\">TiKV<\/a> node.<\/p>\n\n\n\n<p>Now that we\u2019ve got a baseline, let\u2019s see how TiDB scales storage live.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_2_Scale_Storage\"><\/span><strong>Step 2: Scale Storage<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Now for the fun part: let\u2019s add <strong>2 more TiKV nodes (1 \u2192 3)<\/strong> <em>while the workload is running<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tiup playground scale-out --kv 2 --tag democluster\ntiup playground display --tag democluster<\/code><\/pre>\n\n\n\n<p>By default, TiUP Playground may start with replication=1 (no fault tolerance). Setting it to 3 simulates a real production-like cluster with 3 copies per region.<\/p>\n\n\n\n<p>Next, check the current replication factor in the MySQL Client:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT type, instance, `key`, value\nFROM information_schema.cluster_config\nWHERE type = 'pd' AND `key` LIKE '%max-replicas%';<\/code><\/pre>\n\n\n\n<p>Now set it back to 3 so the Placement Driver (PD), TiDB&#8217;s metadata orchestrator, will maintain three replicas per region:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>SET<\/strong> CONFIG pd replication.max-replicas = 3;<\/code><\/pre>\n\n\n\n<p>Let&#8217;s then verify:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>SELECT<\/strong> <strong>type<\/strong>, <strong>instance<\/strong>, `key`, <strong>value<\/strong>\n&nbsp; -&gt; <strong>FROM<\/strong> information_schema.cluster_config\n&nbsp; -&gt; <strong>WHERE<\/strong> <strong>type<\/strong> = 'pd' <strong>AND<\/strong> `key` <strong>LIKE<\/strong> '%max-replicas%';<\/code><\/pre>\n\n\n\n<p>In SQL, watch the cluster expand:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- New stores appear in minutes\n<strong>SELECT<\/strong> store_id, address, store_state_name\n<strong>FROM<\/strong> information_schema.tikv_store_status;\n\n-- Region distribution across stores\n<strong>SELECT<\/strong> store_id,\n&nbsp; &nbsp; &nbsp; <strong>COUNT<\/strong>(*) <strong>AS<\/strong> peer_regions,\n&nbsp; &nbsp; &nbsp; <strong>SUM<\/strong>(<strong>CASE<\/strong> <strong>WHEN<\/strong> is_leader = 1 <strong>THEN<\/strong> 1 <strong>ELSE<\/strong> 0 <strong>END<\/strong>) <strong>AS<\/strong> leader_regions\n<strong>FROM<\/strong> information_schema.tikv_region_peers\n<strong>GROUP<\/strong> <strong>BY<\/strong> store_id;<\/code><\/pre>\n\n\n\n<p>You\u2019ll now see PD rebalance regions and leaders across all three TiKV nodes without downtime.<\/p>\n\n\n\n<p>Storage isn\u2019t the only thing we can scale \u2014 TiDB\u2019s SQL layer is stateless, so let\u2019s add more compute too.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_3_Scale_Compute\"><\/span><strong>Step 3: Scale Compute<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>TiDB servers are stateless SQL frontends, so scaling compute is instant.<\/p>\n\n\n\n<p>Add a 2nd TiDB node:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tiup playground scale-out --db 1 --tag democluster\ntiup playground display --tag democluster<\/code><\/pre>\n\n\n\n<p>Find their ports (in the SQL Shell):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>SELECT<\/strong> <strong>instance<\/strong> <strong>AS<\/strong> sql_addr, status_address\n<strong>FROM<\/strong> information_schema.cluster_info\n<strong>WHERE<\/strong> <strong>type<\/strong>=\"tidb\";<\/code><\/pre>\n\n\n\n<p>Now drive traffic to both:<\/p>\n\n\n\n<p><strong>Terminal A \u2192 TiDB #1 (e.g., port 4000)<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tiup bench tpcc --host 127.0.0.1 --port 4000 -D test --warehouses 5 --time 120s --threads 32 run<\/code><\/pre>\n\n\n\n<p><strong>Terminal B \u2192 TiDB #2 (If the SQL port for the second TiDB server was 50861)<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tiup bench tpcc --host 127.0.0.1 --port 50861 -D test --warehouses 5 --time 120s --threads 32 run<\/code><\/pre>\n\n\n\n<p>With a load balancer, traffic spreads across TiDB servers seamlessly.<\/p>\n\n\n\n<p>So far we\u2019ve scaled OLTP. Now let\u2019s bring analytics into the mix with TiFlash.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_4_Mixed_Workload_Processing_with_TiFlash\"><\/span><strong>Step 4: Mixed Workload Processing with TiFlash<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><a href=\"https:\/\/docs.pingcap.com\/tidb\/stable\/tiflash-overview\/\">TiFlash<\/a> is TiDB\u2019s columnar engine for analytical workloads. Let\u2019s add one node:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tiup playground scale-out --tiflash 1 --tag democlustertiup playground display --tag democluster<\/code><\/pre>\n\n\n\n<p>Next, let&#8217;s replicate a table:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>USE<\/strong> <strong>test<\/strong>;\n<strong>ALTER<\/strong> <strong>TABLE<\/strong> stock <strong>SET<\/strong> TIFLASH REPLICA 1;\n\n-- Check replication progress\n<strong>SELECT<\/strong> * <strong>FROM<\/strong> information_schema.tiflash_replica\n<strong>WHERE<\/strong> TABLE_SCHEMA='test' <strong>AND<\/strong> TABLE_NAME='stock';<\/code><\/pre>\n\n\n\n<p>Let&#8217;s then force an analytical query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>EXPLAIN<\/strong> <strong>ANALYZE<\/strong>\n<strong>SELECT<\/strong> s_i_id, <strong>SUM<\/strong>(s_quantity) <strong>AS<\/strong> qty\n<strong>FROM<\/strong> stock\n<strong>GROUP<\/strong> <strong>BY<\/strong> s_i_id\n<strong>ORDER<\/strong> <strong>BY<\/strong> qty <strong>DESC<\/strong>\n<strong>LIMIT<\/strong> 10;<\/code><\/pre>\n\n\n\n<p>You&#8217;ll see that OLTP continues on TiKV, while analytics run on TiFlash, isolating heavy scans from transactions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_5_Observability\"><\/span><strong>Step 5: Observability<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Let&#8217;s work through a few queries to show live behavior:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Connections per TiDB server\n<strong>SELECT<\/strong> <strong>instance<\/strong>, <strong>COUNT<\/strong>(*) <strong>AS<\/strong> connections\n<strong>FROM<\/strong> information_schema.cluster_processlist\n<strong>GROUP<\/strong> <strong>BY<\/strong> <strong>instance<\/strong>;\n\n-- Regions\/Leaders per TiKV store\n<strong>SELECT<\/strong> store_id,\n&nbsp; &nbsp; &nbsp; <strong>COUNT<\/strong>(*) <strong>AS<\/strong> peer_regions,\n&nbsp; &nbsp; &nbsp; <strong>SUM<\/strong>(<strong>CASE<\/strong> <strong>WHEN<\/strong> is_leader = 1 <strong>THEN<\/strong> 1 <strong>ELSE<\/strong> 0 <strong>END<\/strong>) <strong>AS<\/strong> leader_regions\n<strong>FROM<\/strong> information_schema.tikv_region_peers\n<strong>GROUP<\/strong> <strong>BY<\/strong> store_id;<\/code><\/pre>\n\n\n\n<p>As this workload runs, you can watch PD rebalance regions across TiKV stores. TiFlash nodes will typically show only a handful of peer regions, and since they act as Raft learners, they will not hold leader roles.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step_6_Cleanup\"><\/span><strong>Step 6: Cleanup<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>When finished, simply close the TiUP Playground terminal, and it will stop the cluster. To wipe leftover data, you can use either:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tiup clean --all<\/code><\/pre>\n\n\n\n<p>Or manually remove the demo data:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>rm -rf ~\/.tiup\/data\/*democluster*<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusion_Scaling_TiDB_Locally\"><\/span><strong>Conclusion<\/strong>: Scaling TiDB Locally<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>We started small and scaled TiDB live: added TiKV to expand storage and fault tolerance, added TiDB servers for stateless SQL scale-out, and enabled TiFlash to isolate analytics from OLTP, all while online DDL kept changes safe under load. The net effect is the core promise of TiDB in miniature: elastic capacity, operational simplicity, and zero-downtime evolution. <\/p>\n\n\n\n<p>Here&#8217;s what you can try next:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Repeat the demo with larger datasets and higher thread counts to see leader\/region dynamics at scale.<\/li>\n\n\n\n<li>Try different replication settings and observe impact on failover and p95 latency.<\/li>\n\n\n\n<li>Explore load balancing across TiDB servers and enable TiFlash replicas on additional hot tables.<\/li>\n\n\n\n<li>Move from Playground to a managed or production deployment to validate your target SLOs.<\/li>\n<\/ul>\n\n\n\n<p>If you\u2019d like to play around with more TiDB capabilities in a test environment, check out our <a href=\"https:\/\/labs.tidb.io\/\">free hands-on lab courses<\/a>.<\/p>\n\n\n\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Data-intensive applications outgrow single-node MySQL long before product-market fit is \u201cdone.\u201d Hot partitions, schema change windows, and manual sharding slow teams down. But TiDB solves this with a MySQL-compatible, distributed SQL architecture that scales storage and compute independently and keeps applications online during change. In this quick tutorial, we&#8217;ll spin up TiDB locally with TiUP [&hellip;]<\/p>\n","protected":false},"author":323,"featured_media":30304,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ub_ctt_via":"","footnotes":""},"categories":[436],"tags":[147,246,189,111,29],"class_list":["post-30285","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorial","tag-distributed-sql","tag-horizontal-scalability","tag-online-ddl","tag-tidb","tag-tutorial"],"acf":[],"featured_image_src":"https:\/\/static.pingcap.com\/files\/2025\/11\/07081713\/tidb_feature_1800x600-1.png","author_info":{"display_name":"Ben Sherrill","author_link":"https:\/\/www.pingcap.com\/ko\/blog\/author\/bsherrill\/"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Scaling TiDB Locally: How to Get Started with TiUP Playground<\/title>\n<meta name=\"description\" content=\"Hands-on guide to scaling TiDB locally with TiUP Playground. Spin up a cluster, set a baseline, and scale live without restarts or downtime.\" \/>\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\/scaling-tidb-locally-online-ddl-tutorial\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Scaling TiDB Locally: How to Get Started with TiUP Playground\" \/>\n<meta property=\"og:description\" content=\"Hands-on guide to scaling TiDB locally with TiUP Playground. Spin up a cluster, set a baseline, and scale live without restarts or downtime.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.pingcap.com\/ko\/blog\/scaling-tidb-locally-online-ddl-tutorial\/\" \/>\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-11-06T16:29:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-12T18:38:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/static.pingcap.com\/files\/2025\/11\/07081733\/tidb_1200x627-2.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=\"Ben Sherrill\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/static.pingcap.com\/files\/2025\/11\/07081749\/tidb_twitter_1600x900-3.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=\"Ben Sherrill\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/\"},\"author\":{\"name\":\"Ben Sherrill\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/147c81795fb60c74d7419c6d8e442378\"},\"headline\":\"How to Scale TiDB Locally with Online DDL\",\"datePublished\":\"2025-11-06T16:29:50+00:00\",\"dateModified\":\"2025-11-12T18:38:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/\"},\"wordCount\":696,\"publisher\":{\"@id\":\"https:\/\/www.pingcap.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/static.pingcap.com\/files\/2025\/11\/07081713\/tidb_feature_1800x600-1.png\",\"keywords\":[\"Distributed SQL\",\"Horizontal Scalability\",\"Online DDL\",\"TiDB\",\"Tutorial\"],\"articleSection\":[\"Tutorial\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/\",\"url\":\"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/\",\"name\":\"Scaling TiDB Locally: How to Get Started with TiUP Playground\",\"isPartOf\":{\"@id\":\"https:\/\/www.pingcap.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/static.pingcap.com\/files\/2025\/11\/07081713\/tidb_feature_1800x600-1.png\",\"datePublished\":\"2025-11-06T16:29:50+00:00\",\"dateModified\":\"2025-11-12T18:38:14+00:00\",\"description\":\"Hands-on guide to scaling TiDB locally with TiUP Playground. Spin up a cluster, set a baseline, and scale live without restarts or downtime.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/#primaryimage\",\"url\":\"https:\/\/static.pingcap.com\/files\/2025\/11\/07081713\/tidb_feature_1800x600-1.png\",\"contentUrl\":\"https:\/\/static.pingcap.com\/files\/2025\/11\/07081713\/tidb_feature_1800x600-1.png\",\"width\":3600,\"height\":1200},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.pingcap.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Scale TiDB Locally with Online DDL\"}]},{\"@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\/147c81795fb60c74d7419c6d8e442378\",\"name\":\"Ben Sherrill\",\"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\":\"Ben Sherrill\"},\"description\":\"Senior Solutions Engineer\",\"url\":\"https:\/\/www.pingcap.com\/ko\/blog\/author\/bsherrill\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Scaling TiDB Locally: How to Get Started with TiUP Playground","description":"Hands-on guide to scaling TiDB locally with TiUP Playground. Spin up a cluster, set a baseline, and scale live without restarts or downtime.","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\/scaling-tidb-locally-online-ddl-tutorial\/","og_locale":"ko_KR","og_type":"article","og_title":"Scaling TiDB Locally: How to Get Started with TiUP Playground","og_description":"Hands-on guide to scaling TiDB locally with TiUP Playground. Spin up a cluster, set a baseline, and scale live without restarts or downtime.","og_url":"https:\/\/www.pingcap.com\/ko\/blog\/scaling-tidb-locally-online-ddl-tutorial\/","og_site_name":"TiDB","article_publisher":"https:\/\/facebook.com\/pingcap2015","article_published_time":"2025-11-06T16:29:50+00:00","article_modified_time":"2025-11-12T18:38:14+00:00","og_image":[{"width":2400,"height":1254,"url":"https:\/\/static.pingcap.com\/files\/2025\/11\/07081733\/tidb_1200x627-2.png","type":"image\/png"}],"author":"Ben Sherrill","twitter_card":"summary_large_image","twitter_image":"https:\/\/static.pingcap.com\/files\/2025\/11\/07081749\/tidb_twitter_1600x900-3.png","twitter_creator":"@PingCAP","twitter_site":"@PingCAP","twitter_misc":{"Written by":"Ben Sherrill","Est. reading time":"5\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/#article","isPartOf":{"@id":"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/"},"author":{"name":"Ben Sherrill","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/147c81795fb60c74d7419c6d8e442378"},"headline":"How to Scale TiDB Locally with Online DDL","datePublished":"2025-11-06T16:29:50+00:00","dateModified":"2025-11-12T18:38:14+00:00","mainEntityOfPage":{"@id":"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/"},"wordCount":696,"publisher":{"@id":"https:\/\/www.pingcap.com\/#organization"},"image":{"@id":"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/#primaryimage"},"thumbnailUrl":"https:\/\/static.pingcap.com\/files\/2025\/11\/07081713\/tidb_feature_1800x600-1.png","keywords":["Distributed SQL","Horizontal Scalability","Online DDL","TiDB","Tutorial"],"articleSection":["Tutorial"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/","url":"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/","name":"Scaling TiDB Locally: How to Get Started with TiUP Playground","isPartOf":{"@id":"https:\/\/www.pingcap.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/#primaryimage"},"image":{"@id":"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/#primaryimage"},"thumbnailUrl":"https:\/\/static.pingcap.com\/files\/2025\/11\/07081713\/tidb_feature_1800x600-1.png","datePublished":"2025-11-06T16:29:50+00:00","dateModified":"2025-11-12T18:38:14+00:00","description":"Hands-on guide to scaling TiDB locally with TiUP Playground. Spin up a cluster, set a baseline, and scale live without restarts or downtime.","breadcrumb":{"@id":"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/#primaryimage","url":"https:\/\/static.pingcap.com\/files\/2025\/11\/07081713\/tidb_feature_1800x600-1.png","contentUrl":"https:\/\/static.pingcap.com\/files\/2025\/11\/07081713\/tidb_feature_1800x600-1.png","width":3600,"height":1200},{"@type":"BreadcrumbList","@id":"https:\/\/www.pingcap.com\/blog\/scaling-tidb-locally-online-ddl-tutorial\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.pingcap.com\/"},{"@type":"ListItem","position":2,"name":"How to Scale TiDB Locally with Online DDL"}]},{"@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\/147c81795fb60c74d7419c6d8e442378","name":"Ben Sherrill","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":"Ben Sherrill"},"description":"Senior Solutions Engineer","url":"https:\/\/www.pingcap.com\/ko\/blog\/author\/bsherrill\/"}]}},"grav_blocks":false,"card_markup":"<a class=\"card-resource bg-white\" href=\"https:\/\/www.pingcap.com\/ko\/blog\/scaling-tidb-locally-online-ddl-tutorial\/\"><div class=\"card-resource__image-container\"><img class=\"card-resource__image\" alt=\"tidb_feature_1800x600 (1)\" src=\"https:\/\/static.pingcap.com\/files\/2025\/11\/07081713\/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\">Tutorial<\/div><\/div><h5 class=\"card-resource__title\">How to Scale TiDB Locally with Online DDL<\/h5><\/div><\/a>","_links":{"self":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/30285","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\/323"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/comments?post=30285"}],"version-history":[{"count":17,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/30285\/revisions"}],"predecessor-version":[{"id":30456,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/30285\/revisions\/30456"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/media\/30304"}],"wp:attachment":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/media?parent=30285"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/categories?post=30285"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/tags?post=30285"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}