相关文章推荐
坚强的咖啡豆
·
如何使我的旋转木马自动滑行-腾讯云开发者社区 ...
·
2 月前
·
阳刚的熊猫
·
未能加载文件或程序集“netstandard ...
·
2 月前
·
狂野的人字拖
·
jtextarea设置大小-掘金
·
1 年前
·
面冷心慈的马克杯
·
selenium获取伪类元素_51CTO博客 ...
·
1 年前
·
爱吹牛的钥匙
·
word使用通配符查询以左中括号[开头右中括 ...
·
1 年前
·
Code
›
TiDB 6.0:让 TSO 更高效丨TiDB Book Rush | PingCAP
数据中心
tidb
事务
https://cn.pingcap.com/blog/tidb-6.0-make-tso-more-efficient/
精明的蜡烛
1 年前
</noscript><nav class="navbar index-module--header--+tJQO" role="navigation" aria-label="main navigation"><div class="navbar-brand index-module--mobileNavBar--shD-Y"><span><a class="navbar-item index-module--logo--nlzXC" href="/"><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTcuMzYgMTYwIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2ZmZjt9LmNscy0ye2ZpbGw6bm9uZTt9LmNscy0ze2ZpbGw6IzE3MmQ3Mjt9LmNscy00e2ZpbGw6IzAwYWVlZjt9LmNscy01e2ZpbGw6IzNkM2ZlYTt9PC9zdHlsZT48L2RlZnM+PGcgaWQ9IuWbvuWxgl8yIiBkYXRhLW5hbWU9IuWbvuWxgiAyIj48ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIj48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik00NzEuOCw5OC4zM2gwbC0uMTcuMjdhMzAuMjYsMzAuMjYsMCwwLDEtMTAuMzEsOS44NCwyNy42MSwyNy42MSwwLDAsMS0xNC4xLDQuMDhjLTguMjIsMC0xNS40MS0zLjI4LTIxLjM1LTkuNzRhMzIuOSwzMi45LDAsMCwxLTguNTQtMjMuMjcsMzIuMzYsMzIuMzYsMCwwLDEsOC44Mi0yMi4wN2M1LjczLTYuMTQsMTIuNjItOS4yNSwyMC41MS05LjI1LDEwLjc4LS4wOSwxOC45Miw0LjM2LDI0Ljg3LDEzLjYybC4xOC4yN2guMTZsNy00LjM0YTM5LDM5LDAsMCwwLTExLjU5LTEyLjMxLDM2LjEyLDM2LjEyLDAsMCwwLTIwLjA4LTYuMDgsMzUuMjIsMzUuMjIsMCwwLDAtMjYuOCwxMS40MmMtNy40Nyw3LjY5LTExLjI1LDE3LjQ5LTExLjI1LDI5LjEzYTQyLjEsNDIuMSwwLDAsMCwxMS4xNCwyOS4yMWM3LjM3LDgsMTYuMjksMTIsMjYuNTQsMTJoLjM4YzEzLjQ2LS4yOCwyNC41Ni02LjgsMzEuNjMtMTguNDdaIi8+PHBvbHlnb24gY2xhc3M9ImNscy0xIiBwb2ludHM9IjUyNC4xOCA0MC4zNyA1MTQuNjYgNDAuMzcgNDc5LjI0IDExOS42MyA0OTAuNTUgMTE5LjYzIDUwMS40OSA5My4yOSA1MDEuNTEgOTMuMjkgNTA1LjM3IDg1LjA1IDUwNS4zNiA4NS4wNSA1MTkuNjEgNTEuNiA1MzMuNTggODUuMDUgNTEzLjUzIDg1LjA1IDUwOS44NyA5My4yOSA1MzYuODQgOTMuMjkgNTQ3Ljg4IDExOS42MyA1NTcuODUgMTE5LjYzIDUyNC4xOCA0MC4zNyIvPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTYwOS42NSw0Ny42MmMtNS4yNi00Ljc1LTExLjg4LTcuMTUtMTkuNjctNy4xNUg1NjQuMzN2NzkuMTZoOS4zNXYtMzFoMFY4MC4yOWgwVjQ5aDE2LjcxYTE4LjU0LDE4LjU0LDAsMCwxLDEyLjE4LDQuMjMsMTMuNjQsMTMuNjQsMCwwLDEsNS41NCwxMC40OSwxMy45MiwxMy45MiwwLDAsMS01LDEyLjA3LDE3LjU0LDE3LjU0LDAsMCwxLTEyLjI1LDQuNWgtOS42OHY4LjM0aDExLjJBMjUuMDUsMjUuMDUsMCwwLDAsNjA5Ljg1LDgyYTIxLjc0LDIxLjc0LDAsMCwwLDcuNS0xNi40NkEyMi40MSwyMi40MSwwLDAsMCw2MDkuNjUsNDcuNjJaIi8+PHJlY3QgY2xhc3M9ImNscy0xIiB4PSIyNjEuNjEiIHk9IjQxLjkzIiB3aWR0aD0iOS4zNCIgaGVpZ2h0PSI5LjM0Ii8+PHJlY3QgY2xhc3M9ImNscy0xIiB4PSIyNjEuNjEiIHk9IjYyLjg2IiB3aWR0aD0iOS4zNCIgaGVpZ2h0PSI1Ni44OSIvPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTQwMi4zNSwxMTQuMDZWODkuNjNhMjksMjksMCwwLDAtOS4yLTIxLjkyLDI5LjYyLDI5LjYyLDAsMCwwLTQyLjk0LjQxLDMwLjE2LDMwLjE2LDAsMCwwLTguNDgsMjEuNDEsMzAuNzQsMzAuNzQsMCwwLDAsOS4yLDIyLjIyLDI4LjU4LDI4LjU4LDAsMCwwLDIxLjk0LDguOCwyOS4xNiwyOS4xNiwwLDAsMCwyMC42NC05LjI2djMuODdtMCwwYTE3LjgxLDE3LjgxLDAsMCwxLTYuMDksMTMuNDQsMjAuMzgsMjAuMzgsMCwwLDEtMTQuMjcsNS44LDIwLjg2LDIwLjg2LDAsMCwxLTEyLjcxLTQuMjQsMTkuNDEsMTkuNDEsMCwwLDEtNi43My03LjkxbC03LjE2LDQuMTNhMjcuNTIsMjcuNTIsMCwwLDAsNy40Nyw5LDMwLjcxLDMwLjcxLDAsMCwwLDE4LjIsNi40MWMuNDQsMCwuODksMCwxLjMzLDBhMzAuNywzMC43LDAsMCwwLDE5LjU1LTYuOTVjNi4xNC00Ljg5LDkuMjUtMTEuMTYsOS4yNS0xOC42MnYtMi4yMm0tOS0yMy44NEEyMS45MywyMS45MywwLDAsMSwzODcsMTA1LjQxYTE5LjMsMTkuMywwLDAsMS0xNC42NSw2LjMsMjAuNSwyMC41LDAsMCwxLTE1LjE2LTYuMzEsMjEuMTksMjEuMTksMCwwLDEtNi41MS0xNS4yOCwyMS41MywyMS41MywwLDAsMSw1LjkyLTE1LjQ4LDIwLjQ0LDIwLjQ0LDAsMCwxLDE0LjY3LTcuMDljLjM4LDAsLjc1LDAsMS4xMywwQTE5LjE3LDE5LjE3LDAsMCwxLDM4Nyw3NCwyMS40NCwyMS40NCwwLDAsMSwzOTMuMzEsOTAuMjJaIi8+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNMjQ1LDQ3LjYyYy01LjI2LTQuNzUtMTEuODgtNy4xNS0xOS42Ny03LjE1SDE5OS42NnY3OS4xNkgyMDl2LTMxaDBWODAuMjloMFY0OWgxNi43MWExOC41NCwxOC41NCwwLDAsMSwxMi4xOCw0LjIzLDEzLjY0LDEzLjY0LDAsMCwxLDUuNTQsMTAuNDksMTMuOTIsMTMuOTIsMCwwLDEtNSwxMi4wNywxNy41NCwxNy41NCwwLDAsMS0xMi4yNSw0LjVoLTkuNjh2OC4zNGgxMS4yQTI1LDI1LDAsMCwwLDI0NS4xOCw4MmEyMS43NCwyMS43NCwwLDAsMCw3LjUtMTYuNDZBMjIuNDEsMjIuNDEsMCwwLDAsMjQ1LDQ3LjYyWiIvPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTMwNy42NSw1OS4zOEEyNS4yNywyNS4yNywwLDAsMCwyODguOTIsNjdhMjYuMjQsMjYuMjQsMCwwLDAtNy40NSwxOXYzMy40NWg5Vjg1LjI2YTE2LjMzLDE2LjMzLDAsMCwxLDUuMDgtMTIuMDksMTYuNTQsMTYuNTQsMCwwLDEsMTIuMDktNS4wNywxNi4xLDE2LjEsMCwwLDEsMTEuODgsNS4wNywxNi40MiwxNi40MiwwLDAsMSw1LjE4LDEyLjA5djM0LjI2aDlWODYuMDdhMjYuMjQsMjYuMjQsMCwwLDAtNy40NS0xOUEyNS4xNSwyNS4xNSwwLDAsMCwzMDcuNjUsNTkuMzhaIi8+PHJlY3QgY2xhc3M9ImNscy0xIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjE2MCIgcng9IjE2LjY3Ii8+PHJlY3QgY2xhc3M9ImNscy0yIiB4PSIyMCIgeT0iMjAiIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIi8+PHBhdGggY2xhc3M9ImNscy0zIiBkPSJNOTIsNDgsMzkuMjYsMzMuMTRhNS43Miw1LjcyLDAsMCwwLTUsLjkyQTUuNTYsNS41NiwwLDAsMCwzMiwzOC41NHY5NS44NGE1LjU1LDUuNTUsMCwwLDAsMi4xNyw0LjQxQTUuNyw1LjcsMCwwLDAsMzcuNjgsMTQwYTUuNSw1LjUsMCwwLDAsMS4zMy0uMTZsNTIuNzUtMTIuMzloMEE1LjYxLDUuNjEsMCwwLDAsOTYuMTMsMTIyVjUzLjM3QTUuNjYsNS42NiwwLDAsMCw5Miw0OFoiLz48cGF0aCBjbGFzcz0iY2xzLTQiIGQ9Ik0xMjcuOTIsNDQuNTdhNS42NCw1LjY0LDAsMCwwLTQuMTItNS4zOWwtNjcuMTMtMTlhNS43Miw1LjcyLDAsMCwwLTUsLjkxLDUuNTUsNS41NSwwLDAsMC0yLjI2LDQuNDlWOTguMzRhNS41NSw1LjU1LDAsMCwwLDIuMTcsNC40MUE1LjcsNS43LDAsMCwwLDU1LjA5LDEwNGE1LjU4LDUuNTgsMCwwLDAsMS4zNC0uMTZsNjcuMjEtMTZBNS42MSw1LjYxLDAsMCwwLDEyOCw4Mi4zOFoiLz48cGF0aCBjbGFzcz0iY2xzLTUiIGQ9Ik05Miw0OCw0OS40MSwzNlY5OC4zNGE1LjU1LDUuNTUsMCwwLDAsMi4xNyw0LjQxQTUuNyw1LjcsMCwwLDAsNTUuMDksMTA0YTUuNTgsNS41OCwwLDAsMCwxLjM0LS4xNmwzOS43LTkuNDJ2LTQxQTUuNjYsNS42NiwwLDAsMCw5Miw0OFoiLz48L2c+PC9nPjwvc3ZnPg==" style="width:100px" alt="PingCAP logo"/></a></span><span class="index-module--mobileNavBarEnd--wJBf2"><a class="navbar-burger index-module--burger--JHKki" href="https://github.com/pingcap" target="_blank"><i class="iconfont icon-github index-module--icon--HqAmx"/></a><a role="button" class="navbar-burger index-module--burger--JHKki" aria-label="menu" aria-expanded="false"><i class="iconfont icon-menu index-module--icon--HqAmx"/></a></span></div><div class="navbar-menu index-module--desktopMenu--FioJ8"><div class="navbar-start"><div class="navbar-item px-5 index-module--menu--N9jNb"><a>产品</a></div><div class="navbar-item px-5 index-module--menu--N9jNb"><a>解决方案</a></div><div class="navbar-item px-5 index-module--menu--N9jNb"><a>文档</a></div><div class="navbar-item px-5 index-module--menu--N9jNb"><a>客户案例</a></div><div class="navbar-item px-5 index-module--menu--N9jNb"><a>合作伙伴</a></div><div class="navbar-item px-5 index-module--menu--N9jNb"><a>服务与支持</a></div><div class="navbar-item px-5 index-module--menu--N9jNb"><a>学习与社区</a></div></div><div class="navbar-end index-module--navbarEndContent--HqBKU"><div class="index-module--navbarEndItem--rYRre index-module--searchWrapper--JvFXI"><span class="index-module--icon--HqAmx index-module--navItem--ou3c9"><i class="iconfont icon-search"/><span class="index-module--iconLabel--GRGwr">搜索</span></span><div class="index-module--searchPanel--yTlLW"/></div><div class="navbar-item index-module--navItem--ou3c9 index-module--navbarEndItem--rYRre"><div class="dropdown is-center index-module--langSelector--mPyrj"><div class="dropdown-trigger"><div aria-haspopup="true" aria-controls="lang-menu" class="index-module--trigger--8EEgs"><i class="iconfont icon-language index-module--icon--HqAmx"/><span class="index-module--iconLabel--GRGwr">语言</span></div></div><div class="dropdown-menu index-module--menu--QgjOl" id="lang-menu" role="menu"><div class="dropdown-content index-module--dropdownContent--l+MWk"><a target="_blank" rel="noopener" href="https://en.pingcap.com/" class="dropdown-item index-module--item--Q3TbR">English</a><a target="_blank" rel="noopener" href="https://pingcap.co.jp/" class="dropdown-item index-module--item--Q3TbR">日本語</a></div></div></div></div><div class="navbar-item index-module--navbarEndItem--rYRre"><a class="index-module--icon--HqAmx index-module--navItem--ou3c9" href="https://github.com/pingcap" target="_blank"><i class="iconfont icon-github"/></a></div><div class="navbar-item"><a class="button is-white index-module--useFree--DEvR+" href="/product#SelectProduct">免费试用</a></div></div></div></nav><div class="index-module--layout--pDdDW"><main><div class="blog-header-module--container--EsMbA"><div class="container px-4 blog-header-module--fixedContainer--7ndgE"><div class="blog-detail-module--wrapper--esMKp"><h1 class="blog-detail-module--h1--Q3T+9">TiDB 6.0:让 TSO 更高效丨TiDB Book Rush</h1><a class="index-module--blogReturnBtn--igugB"><i class="iconfont icon-arrow-right"/><label>返回全部</label></a></div></div></div><div class="blog-detail-module--container--88yCh"><div class="container px-4 "><div class="blog-detail-module--row--BOEUq"><span>h5n1</span><span><a href="/blog/categories/案例实践">案例实践</a></span><span>2022-06-23</span></div><div class="columns"><div class="column is-8 px-4"><div class="index-module--markdown--RI+u5"><blockquote> <p>本文源自“TiDB 6.0 Book Rush” 投稿。作者:h5n1,TiDB 爱好者,目前就职于联通软件研究院。</p> <h2 id="前言">前言</h2><p>TiDB 作为一个分布式数据库,计算节点 tidb server 和存储节点 tikv/tiflash server 有着近乎线性的扩展能力,当资源不足时直接在线扩容即可。但作为整个集群大脑的 PD 节点因为只有 leader 提供服务,不能像其他组件一样通过扩展节点而提高处理能力。 过往版本 TSO 分配的主要问题: </p> <li>TSO 分配由 PD Leader 节点提供,大量请求下会导致 Leader 节点 CPU 利用率增高,影响事务延迟。</li> <li>PD Follower 节点基本处于空闲状态,系统资源利用率较低。</li> <li>TiDB 跨数据中心访问 PD Leader 时,数据中心间的延迟导致事务延迟增加。</li> <p>为提升 TSO 的处理性能针对部分场景 TiDB 引入了 TSO Follower Proxy、RC Read TSO 优化、Local TSO 等特性,通过扩展 PD 处理能力和减少 TSO 请求的方式,提升整体吞吐量,降低事务延迟。</p> <h2 id="tso">TSO</h2><p>TSO 是一个单调递增的时间戳,由 PD leader 分配。TiDB 在事务开始时会获取 TSO 作为 start_ts、提交时获取 TSO 作为 commit_ts,依靠 TSO 实现事务的 MVCC。TSO 为 64 位的整型数值,由物理部分和逻辑部分组成,高 48 位为物理部分是 unixtime 的毫秒时间,低 18 位为逻辑部分是一个数值计数器,理论上每秒可产生 262144000(即 2 ^ 18 * 1000)个 TSO。</p> <p>为保证性能 PD 并不会每次为一个请求生成一个 TSO,而是会预先申请一个可分配的时间窗口,时间窗口是当前时间和当前时间+3 秒后的 TSO,并保存在 etcd 内,之后便可以从窗口中分配 TSO。每隔一定时间就会触发更新时间窗口。当 PD 重启或 leader 切换后会从 etcd 内获取保存的最大 TSO 开始分配,以保证 TSO 的连续递增。</p> <h2 id="follower-proxy">Follower Proxy</h2><p>默认情况下 TSO 请求由 PD leader 处理,TiDB 内部通过 PD Client 向 PD leader 发送请求获取 TSO,PD client 并不会将收到的请求立刻发送给 PD leader ,而将同一时刻收到的所有请求打包发送给 PD leader,然后由 PD leader 返回一批 TSO。由于仅有 leader 提供服务,tidb server 数量较多时会有较多的 PD Client 和 PD Leader 建立连接,导致切换处理连接请求时 CPU 消耗较高。同时 follower 节点仅通过 raft 同步数据和提供选举等功能,基本处于空闲状态。 </p> <p>在 5.3.0 版本引入 TSO Follower Proxy 功能,当开启后 TiDB 的 PD Client 会随机选择一个 PD 节点(包括 leader 和 follower)发送 TSO 请求,PD Follower 会作为一个代理服务将收到的一批请求按照默认情况下 PD Client 处理 TSO 方式打包发送给 leader 处理,以进一步减少 PD Client 和 PD Leader 的交互次数以及 PD leader 的连接数,以此降低 leader 的 CPU 负载。 </p> <p>通过设置全局变量 tidb_enable_tso_follower_proxy 为 true 即可开启 PD follower 的 TSO 代理功能,该功能适用于 tidb server 数量较多并发请求很高,PD leader 因高压力的 TSO 请求而达到 CPU 瓶颈,导致 TSO RPC 请求的延迟较高的场景。</p> <h2 id="rc-read-tso-优化">RC Read TSO 优化</h2><p>Read-Commited 隔离级别需要在悲观事务模式下,在悲观事务中每个 SQL 执行时会从 PD 获取 TSO (for_update_ts) 用于一致性读、冲突检测等,每个 SQL 相当于一个 Snapshot-Isolation 的’小事务’,相比乐观事务模式悲观事务产生的 TSO 请求会更多,在整个事务期间如果能在不破坏事务一致性和隔离性的情况下减少 tso 请求次数,就能够降低 PD 的负载和事务延迟,从而提升整体性能。 </p> <p>6.0 版本中对 RC 事务中的 SELECT 语句 TSO 请求做了优化,使用一种乐观方式获取 TSO ,仅当遇到新版本后才会获取最新的 TSO 读取数据,通过减少读操作从 PD 获取 TSO 的请求次数,从而降低查询延迟,提升读写冲突较小场景的 QPS。该特性由 tidb_rc_read_check_ts 变量控制,默认为 off,开启该功能设置为 on 即可。 </p> <p>优化后 select 语句处理基本过程如下: </p> <li>Select 语句执行时不从 PD 获取 TSO 作为 for_update_ts,而是使用上一个有效的 TSO 作为 for_update_ts(即为 read_ts)。如果是事务中的第一个语句则是 start_ts,否则是上一个 SQL 的 for_update_ts。</li> <li>构建执行计划并执行,发送到 tikv 的数据读取请求(pointget、coprocessor)会带上 RcReadCheckTS 标志。</li> <li>数据读取请求使用前面获得的 read_ts 做一致性读取,并将数据返回 tidb server。</li> <li>TiKV 会检查返回的数据是否有更新版本,如果有更新的版本则返回 WriteConflict 错误,否则返回数据后正常结束执行。</li> <li>如果此时 tidb 还未向 client 发送数据则会从 PD 获取最新的 TSO 作为 for_update_ts 重新执行整个查询,否则会向 client 返回错误。 </li> <p>从上面的过程可以看出遇到新版本会导致 tidb server 使用正常的流程重新获取 TSO 和执行 SQL,在读写冲突的情况下会降低性能使得事务执行时间延长。如果已经有部分数据返回 client 的话会导致报错 SQL 执行失败,虽然通过增加 tidb_init_chunk_size 变量大小延迟 tikv 返回数据时间,可以降低一些上述错误发生的情况,但仍然不是一个根本解决方式。 </p> <h2 id="local-tso">Local TSO</h2><p>在多数据中心场景下 PD leader 位于某个数据中心内,数据中心间的延迟会造成 TSO 请求延迟增加,如果能够在数据中心内完成 TSO 请求和分配则可以大大降低 TSO 请求延迟。基于此 TiDB 引入了 Local TSO (实验功能),PD 中设计 2 个 TSO allocator 角色:local tso allocator 和 global tso allocator,相应的事务也被分成了本地事务 local transaction 和全局事务 global transaction 两种。 </p> <h3 id="local-tso">Local TSO</h3><p>当通过 enable-local-tso 启用后数据中心内的 PD 会选出一个节点作为 local tso allocator 用于分配 TSO,该节点作为 local tso 分配的 leader 角色(PD 角色仍为 follower)。当事务操作的数据仅涉及到本数据中心的数据时,则判断为本地事务,向本地 tso allocator 申请 local tso。 </p> <p>每个数据中心分配自己的 local tso,相互之间是独立的,为避免不同数据中心分配了相同的 TSO,PD 会设置 local tso 中的逻辑时间低几位做后缀,不同的数据中心使用不同的值,同时这些信息会持久化记录到 PD 内。</p> <h3 id="global-tso">Global TSO</h3><p>当事务操作的数据涉及到其他数据中心时则为全局事务,此时需要向 PD leader 申请 global tso, PD leader 作为 global tso allocator。当未启用 local-tso 功能时,仍按原来的逻辑所有数据中的 TSO 请求由 PD leader 负责处理。 </p> <p>为保证 local tso 和 global tso 的线性增长,global tso allocator 和 local tso allocator 会进行 max_tso 同步: </p> <li>Global tso allocator 收集所有 local tso allocator 的最大 local tso。</li> <li>从所有 local tso 中选出一个最大的 local tso 作为 max_tso 下发到 local allocator。</li> <li>如果 max_tso 比自己的大则更新 TSO 为 max_tso,否则直接返回成功。</li> <p>Local tso 的使用需要考虑不同的数据中心处理不同的业务,同时要结合 PlacementRules in SQL 将表根据业务规则按数据中心进行分布,同时可设置 txn_scope 变量为 local/global 用于人为控制获取 global tso 还是 local tso。 </p> <p>基本配置步骤(目前不支持 Local TSO 回退为 Global TSO 模式): </p> <p>1.PD、TiKV、TiDB server 均需要根据实际部署设置 label,为保证高可用每个 DC 的 PD 数量应>1。</p> <p>2.开启库或表级 Placement Rules in SQL,根据地域和业务关系进行调度。 </p> <pre><code><span class="hljs-keyword">CREATE</span> PLACEMENT <span class="hljs-keyword">POLICY</span> dc1_leader LEADER_CONSTRAINTS="DC1" FOLLOWER_CONSTRAINTS="DC1,DC2,DC3" FOLLOWERS=<span class="hljs-number">2</span>; <span class="hljs-keyword">Alter</span> <span class="hljs-keyword">table</span> new_order <span class="hljs-keyword">PARTITION</span> p0 PLACEMENT <span class="hljs-keyword">POLICY</span> dc1_leaders <p>3.设置 PD 参数 enable-local-tso=on 使用 tiup reload 重启 PD 开启 Local TSO 功能。启用之后可通过 <code>pd-ctl -u pd_ip:pd_port member</code> 中 <code>tso_allocator_leaders</code> 项内容查看每个中心的 local tso allocator leader。</p> <h2 id="测试">测试</h2><h3 id="测试环境">测试环境</h3><p><img src="https://img1.www.pingcap.com/prod/_66b447f291.png" alt="测试环境.png"/></p> <h3 id="tso-follower-proxy">TSO Follower Proxy</h3><p>在 1024 线程下使用 sysbench 对 6 张 1 亿记录表在开启 TSO Follower Proxy 前后的 TPS 和平均延迟如下:</p> <p>测试期间 TSO Follower Proxy 关闭和开启时的 CPU 利用率: </p> <h3 id="rc-read-tso">RC Read TSO</h3><p>使用 tiup-bench 测试不同线程下开启 tidb_rc_read_check_ts 前后的 TPCC,可以看到开启该功能后对 TPCC 有一定提升,但随着线程数增加冲突增多 TPCC 出现下降情况。</p> <p>通过 TiDB –> PD Client –> PD Client CMD OPS 监控可以看到 256 线程下开启 tidb_rc_read_check_ts 后 PD client 中等待 TSO 的次数明显降低。</p> <h3 id="local-tso">Local TSO</h3><p>Local TSO 作为实验功能尚需完善,TPCC 测试中当开启该功能后出现大量报主键重复错误。 <h2 id="总结">总结</h2><p>为提升 TSO 的扩展性和效率,TiDB 进行了大量的优化工作,但这些优化有确定的场景,需要结合业务和实际情况考虑,否则盲目开启有可能会造成 QPS 降低、延迟增高的情况: </p>
推荐文章
坚强的咖啡豆
·
如何使我的旋转木马自动滑行-腾讯云开发者社区-腾讯云
2 月前
阳刚的熊猫
·
未能加载文件或程序集“netstandard, version=2.0.0.0, culture=neutral, publick - CSDN文库
2 月前
狂野的人字拖
·
jtextarea设置大小-掘金
1 年前
面冷心慈的马克杯
·
selenium获取伪类元素_51CTO博客_selenium获取元素文本
1 年前
爱吹牛的钥匙
·
word使用通配符查询以左中括号[开头右中括号]结尾_word查找中括号_DiamondTan的博客-CSDN博客
1 年前