{"id":420,"date":"2024-04-02T08:00:00","date_gmt":"2024-04-02T13:00:00","guid":{"rendered":"https:\/\/www.sqltabletalk.com\/?p=420"},"modified":"2024-03-29T15:47:12","modified_gmt":"2024-03-29T20:47:12","slug":"optimizing-sql-server-tuple-mover-columnstore-indexes","status":"publish","type":"post","link":"https:\/\/www.sqltabletalk.com\/?p=420","title":{"rendered":"Optimizing SQL Server with the Tuple Mover and Columnstore Indexes"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>SQL Server&#8217;s performance and efficiency hinge on its ability to manage and store data effectively. At the heart of this capability are Columnstore Indexes and the Tuple Mover, a duo that works together to ensure data is stored efficiently, making it readily accessible for fast query execution. This post takes a look into the interplay between Columnstore Indexes and the Tuple Mover, highlighting the operational details and the impact of recent enhancements introduced in SQL Server 2019.<\/p>\n<h3>Columnstore Indexes: A Primer<\/h3>\n<p>Columnstore Indexes represent a significant advancement in SQL Server data storage and retrieval mechanisms, designed primarily for analytical and read-heavy workloads. Unlike traditional row-oriented storage, Columnstore Indexes organize data by columns, enabling highly efficient data compression and faster query processing due to the reduced I\/O from reading only the necessary columns for a query.<\/p>\n<h4>Key Benefits:<\/h4>\n<ul>\n<li><strong>Efficient Data Compression<\/strong>: By storing data in columns, each column can be compressed independently, leading to significant reductions in storage requirements.<\/li>\n<li><strong>Improved Query Performance<\/strong>: Accessing only the necessary columns for a query minimizes disk I\/O, dramatically speeding up query execution times, especially for large datasets.<\/li>\n<\/ul>\n<h3>The Role of the Tuple Mover in Columnstore Indexes<\/h3>\n<p>When the Tuple Mover is compressing delta rowgroups into compressed rowgroups, it primarily uses two types of locks:<\/p>\n<ul>\n<li><strong>Sch-M (Schema Modification) Locks<\/strong>: These locks are taken briefly during the process of moving data from a delta rowgroup to a compressed rowgroup. The Sch-M lock is a high-level lock that prevents other operations from accessing the table structure during the modification. However, this lock is typically held for a very short period of time, as the operation is generally quick, especially when compared to traditional row-based operations.<\/li>\n<li><strong>Bulk Update (BU) Locks<\/strong>: For Columnstore indexes, SQL Server can use Bulk Update (BU) locks when performing bulk load operations or when the Tuple Mover is compressing delta rowgroups. BU locks allow multiple threads to load data into the same table or partition simultaneously without interfering with each other. These locks are designed to minimize blocking while ensuring data integrity.<\/li>\n<\/ul>\n<p>The Tuple Mover is intricately linked to the performance of Columnstore Indexes. It is responsible for converting data from delta rowgroups to compressed rowgroups, a process that directly impacts storage efficiency and query speed.<\/p>\n<h4>Operational Highlights:<\/h4>\n<ul>\n<li><strong>Delta Rowgroups Management<\/strong>: The Tuple Mover monitors these rowgroups, which temporarily store data before it is compressed, ensuring that data is moved to compressed rowgroups in a timely manner.<\/li>\n<li><strong>Compression and Locking<\/strong>: By compressing data into a columnar format and employing strategic locking mechanisms, the Tuple Mover optimizes storage without significantly disrupting database operations.<\/li>\n<\/ul>\n<h3>Impact of SQL Server 2019 Enhancements<\/h3>\n<p>SQL Server 2019 introduces enhancements that, while not directly modifying the Tuple Mover&#8217;s functionality, significantly impact its efficiency and the overall performance of Columnstore Indexes.<\/p>\n<h4>Enhancements Include:<\/h4>\n<ul>\n<li><strong>Batch Mode on Rowstore<\/strong>: By extending batch mode processing to rowstore indexes, SQL Server 2019 indirectly improves the performance of operations involving Columnstore indexes, benefiting the Tuple Mover&#8217;s underlying efficiency.<\/li>\n<li><strong>Dynamic Memory Grant Feedback<\/strong>: This optimization allows for better memory utilization during query execution, indirectly benefiting the Tuple Mover by potentially reducing memory overhead for operations involving large datasets.<\/li>\n<\/ul>\n<h3>Navigating Locking and Blocking with Columnstore Indexes<\/h3>\n<p>While the Tuple Mover is designed to minimize its impact on database performance, its operations can lead to locking and blocking, especially when compressing delta rowgroups. However, SQL Server&#8217;s architecture and the latest enhancements work together to mitigate these challenges.<\/p>\n<h4>Strategies for Mitigation:<\/h4>\n<ul>\n<li><strong>Table Partitioning<\/strong>: By partitioning data, the impact of locks can be localized, allowing other parts of the table to be accessed without interruption.<\/li>\n<li><strong>Optimized System Configuration<\/strong>: Adjusting the Columnstore index configurations, such as delta rowgroup thresholds, can help reduce the frequency and impact of locking and blocking.<\/li>\n<li><strong>Maintenance Windows<\/strong>: Scheduling data loading and compression activities during off-peak hours can help avoid potential conflicts with high-priority queries.<\/li>\n<li><strong>Monitoring and Tuning<\/strong>: Monitoring system performance and adjusting the configuration of the Columnstore index, such as the size of delta rowgroups, can help reduce the frequency and impact of locking and blocking.<\/li>\n<\/ul>\n<h3>Conclusion<\/h3>\n<p>The synergy between Columnstore Indexes and the Tuple Mover is pivotal for SQL Server&#8217;s data management capabilities. Understanding their roles, operational intricacies, and the benefits of SQL Server 2019&#8217;s enhancements allows database administrators to optimize their environments effectively. By employing strategic practices to mitigate potential locking and blocking, administrators can ensure that their SQL Server instances run efficiently, harnessing the full power of Columnstore Indexes for high-performance data workloads.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SQL Server&#8217;s performance and efficiency hinge on its ability to manage and store data effectively. At the heart of this capability are Columnstore Indexes and the Tuple Mover, a duo that works together to ensure data is stored efficiently, making it readily accessible for fast query execution. This post takes a look into the interplay between Columnstore Indexes and the Tuple Mover, highlighting the operational details and the impact of recent enhancements introduced in SQL Server 2019.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[104,12,5,40],"tags":[108,52,109],"class_list":["post-420","post","type-post","status-publish","format-standard","hentry","category-indexing","category-internals","category-performance","category-sql-server-2022","tag-columnstore-indexes","tag-sql-server-performance","tag-tuple-mover"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Optimizing SQL Server with the Tuple Mover and Columnstore Indexes - SQL Table Talk<\/title>\n<meta name=\"description\" content=\"Explore the critical role of the Tuple Mover in optimizing Columnstore Indexes for SQL Server, detailing operational mechanics, SQL Server 2019 enhancements, and strategies for addressing locking and blocking issues.\" \/>\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.sqltabletalk.com\/?p=420\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Optimizing SQL Server with the Tuple Mover and Columnstore Indexes - SQL Table Talk\" \/>\n<meta property=\"og:description\" content=\"Explore the critical role of the Tuple Mover in optimizing Columnstore Indexes for SQL Server, detailing operational mechanics, SQL Server 2019 enhancements, and strategies for addressing locking and blocking issues.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqltabletalk.com\/?p=420\" \/>\n<meta property=\"og:site_name\" content=\"SQL Table Talk\" \/>\n<meta property=\"article:published_time\" content=\"2024-04-02T13:00:00+00:00\" \/>\n<meta name=\"author\" content=\"Yvonne Vanslageren\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Yvonne Vanslageren\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=420#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=420\"},\"author\":{\"name\":\"Yvonne Vanslageren\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/68bb31b454bafe9e139183ed4f3e9082\"},\"headline\":\"Optimizing SQL Server with the Tuple Mover and Columnstore Indexes\",\"datePublished\":\"2024-04-02T13:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=420\"},\"wordCount\":746,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0\"},\"keywords\":[\"Columnstore Indexes\",\"SQL Server performance\",\"Tuple Mover\"],\"articleSection\":[\"Indexing\",\"Internals\",\"Performance\",\"SQL Server 2022\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.sqltabletalk.com\/?p=420#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=420\",\"url\":\"https:\/\/www.sqltabletalk.com\/?p=420\",\"name\":\"Optimizing SQL Server with the Tuple Mover and Columnstore Indexes - SQL Table Talk\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#website\"},\"datePublished\":\"2024-04-02T13:00:00+00:00\",\"description\":\"Explore the critical role of the Tuple Mover in optimizing Columnstore Indexes for SQL Server, detailing operational mechanics, SQL Server 2019 enhancements, and strategies for addressing locking and blocking issues.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=420#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqltabletalk.com\/?p=420\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=420#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqltabletalk.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Optimizing SQL Server with the Tuple Mover and Columnstore Indexes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#website\",\"url\":\"https:\/\/www.sqltabletalk.com\/\",\"name\":\"SQL Table Talk\",\"description\":\"Breaking Down SQL Server, One Post at a Time.\",\"publisher\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqltabletalk.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0\",\"name\":\"Stephen Planck\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g\",\"caption\":\"Stephen Planck\"},\"logo\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/dexterwiki.com\",\"https:\/\/www.linkedin.com\/in\/stephen-planck-4611b692?trk=people-guest_people_search-card&challengeId=AQErf8gbBmcVMwAAAYsyIsxO-0UvU8z7cHrBpZoo_n3xt9qEKpRN5B_jd_LmAMu-OfeArkQ7GDjobJ2uRoQQV35EQdh_rR6kxA&submissionId=09de7067-c335-8e17-40b8-8dc32b60ed6c&challengeSource=AgEcUCw35zpPmAAAAYsyI4vAWhJTV7Nt4vZYKc3V1qiDBpCkKgUvtlOBgYXcE84&challegeType=AgE_wZiTT09IAQAAAYsyI4vDmNvbZIYe6XHju5V2bXVvM3IVxnJslgY&memberId=AgESFTkUShzs_gAAAYsyI4vGYk0Gic1uc5kB6cKOABA26Gw&recognizeDevice=AgHdSZyUSI5CEwAAAYsyI4vKd_koF9JgpsCJShT8QfbK1QMiv8SI\",\"https:\/\/www.youtube.com\/linuxmate\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/68bb31b454bafe9e139183ed4f3e9082\",\"name\":\"Yvonne Vanslageren\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/22c274a7a354b81a0a8dc5b23e8e0be9bdd81a6bc0541474cfb6b954d6bb2089?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/22c274a7a354b81a0a8dc5b23e8e0be9bdd81a6bc0541474cfb6b954d6bb2089?s=96&d=mm&r=g\",\"caption\":\"Yvonne Vanslageren\"},\"url\":\"https:\/\/www.sqltabletalk.com\/?author=2\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Optimizing SQL Server with the Tuple Mover and Columnstore Indexes - SQL Table Talk","description":"Explore the critical role of the Tuple Mover in optimizing Columnstore Indexes for SQL Server, detailing operational mechanics, SQL Server 2019 enhancements, and strategies for addressing locking and blocking issues.","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.sqltabletalk.com\/?p=420","og_locale":"en_US","og_type":"article","og_title":"Optimizing SQL Server with the Tuple Mover and Columnstore Indexes - SQL Table Talk","og_description":"Explore the critical role of the Tuple Mover in optimizing Columnstore Indexes for SQL Server, detailing operational mechanics, SQL Server 2019 enhancements, and strategies for addressing locking and blocking issues.","og_url":"https:\/\/www.sqltabletalk.com\/?p=420","og_site_name":"SQL Table Talk","article_published_time":"2024-04-02T13:00:00+00:00","author":"Yvonne Vanslageren","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Yvonne Vanslageren","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sqltabletalk.com\/?p=420#article","isPartOf":{"@id":"https:\/\/www.sqltabletalk.com\/?p=420"},"author":{"name":"Yvonne Vanslageren","@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/68bb31b454bafe9e139183ed4f3e9082"},"headline":"Optimizing SQL Server with the Tuple Mover and Columnstore Indexes","datePublished":"2024-04-02T13:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sqltabletalk.com\/?p=420"},"wordCount":746,"commentCount":0,"publisher":{"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0"},"keywords":["Columnstore Indexes","SQL Server performance","Tuple Mover"],"articleSection":["Indexing","Internals","Performance","SQL Server 2022"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sqltabletalk.com\/?p=420#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sqltabletalk.com\/?p=420","url":"https:\/\/www.sqltabletalk.com\/?p=420","name":"Optimizing SQL Server with the Tuple Mover and Columnstore Indexes - SQL Table Talk","isPartOf":{"@id":"https:\/\/www.sqltabletalk.com\/#website"},"datePublished":"2024-04-02T13:00:00+00:00","description":"Explore the critical role of the Tuple Mover in optimizing Columnstore Indexes for SQL Server, detailing operational mechanics, SQL Server 2019 enhancements, and strategies for addressing locking and blocking issues.","breadcrumb":{"@id":"https:\/\/www.sqltabletalk.com\/?p=420#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqltabletalk.com\/?p=420"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqltabletalk.com\/?p=420#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqltabletalk.com\/"},{"@type":"ListItem","position":2,"name":"Optimizing SQL Server with the Tuple Mover and Columnstore Indexes"}]},{"@type":"WebSite","@id":"https:\/\/www.sqltabletalk.com\/#website","url":"https:\/\/www.sqltabletalk.com\/","name":"SQL Table Talk","description":"Breaking Down SQL Server, One Post at a Time.","publisher":{"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqltabletalk.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0","name":"Stephen Planck","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g","caption":"Stephen Planck"},"logo":{"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/dexterwiki.com","https:\/\/www.linkedin.com\/in\/stephen-planck-4611b692?trk=people-guest_people_search-card&challengeId=AQErf8gbBmcVMwAAAYsyIsxO-0UvU8z7cHrBpZoo_n3xt9qEKpRN5B_jd_LmAMu-OfeArkQ7GDjobJ2uRoQQV35EQdh_rR6kxA&submissionId=09de7067-c335-8e17-40b8-8dc32b60ed6c&challengeSource=AgEcUCw35zpPmAAAAYsyI4vAWhJTV7Nt4vZYKc3V1qiDBpCkKgUvtlOBgYXcE84&challegeType=AgE_wZiTT09IAQAAAYsyI4vDmNvbZIYe6XHju5V2bXVvM3IVxnJslgY&memberId=AgESFTkUShzs_gAAAYsyI4vGYk0Gic1uc5kB6cKOABA26Gw&recognizeDevice=AgHdSZyUSI5CEwAAAYsyI4vKd_koF9JgpsCJShT8QfbK1QMiv8SI","https:\/\/www.youtube.com\/linuxmate"]},{"@type":"Person","@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/68bb31b454bafe9e139183ed4f3e9082","name":"Yvonne Vanslageren","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/22c274a7a354b81a0a8dc5b23e8e0be9bdd81a6bc0541474cfb6b954d6bb2089?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/22c274a7a354b81a0a8dc5b23e8e0be9bdd81a6bc0541474cfb6b954d6bb2089?s=96&d=mm&r=g","caption":"Yvonne Vanslageren"},"url":"https:\/\/www.sqltabletalk.com\/?author=2"}]}},"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts\/420","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=420"}],"version-history":[{"count":3,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts\/420\/revisions"}],"predecessor-version":[{"id":459,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts\/420\/revisions\/459"}],"wp:attachment":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}