有生之年系列----MySQL分布式集群之MyCAT调优初探(四)

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 这是有生之年系列的填坑_(:з」∠)_ 前作第一篇:http://blog.itpub.net/29510932/viewspace-1664499/ 前作第二篇:http://blog.
这是有生之年系列的填坑_(:з」∠)_
前作第一篇:http://blog.itpub.net/29510932/viewspace-1664499/
前作第二篇:http://blog.itpub.net/29510932/viewspace-1667814/
前作第三篇:http://blog.itpub.net/29510932/viewspace-1678591/
MyCAT基准测试:http://blog.itpub.net/29510932/viewspace-1726924/和http://blog.itpub.net/29510932/viewspace-1717783/
------------------------------------------------------------------------------------------------------正文------------------------------------------------------------------------------------------------------------

背景:接本应接在基准测试之后就整理,不过有别的事情耽搁了

环境:与基准测试时保持一致, 4核32G,MyCAT-1.4-RC,6月17号 发布的版本,目前最新发布的版本应该是在7.29 ,七月底的样子。

相关配置文件:server.xml与cacheservice.properties

文件简介:
server.xml:保存了有关MyCAT的配置信息,包括MyCAT对外暴露的schema(包含这个schema对应的账户名和密码),MyCAT server的连接池等参数配置
cacheservice.properties:缓存区的配置

server.xml示例:

点击(此处)折叠或打开

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- - - Licensed under the Apache License, Version 2.0 (the "License");
  3.         - you may not use this file except in compliance with the License. - You
  4.         may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
  5.         - - Unless required by applicable law or agreed to in writing, software -
  6.         distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
  7.         WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
  8.         License for the specific language governing permissions and - limitations
  9.         under the License. -->
  10. <!DOCTYPE mycat:server SYSTEM "server.dtd">
  11. <mycat:server xmlns:mycat="http://org.opencloudb/">
  12.         <system>
  13.         <property name="processors">32</property>
  14.         <property name="processorExecutor">256</property>
  15.         <property name="processorBufferPool">204800000</property>
  16.         <property name="processorBufferChunk">40960</property>
  17.                 <!--默认是65535 64K 用于sql解析时最大文本长度 -->
  18.         <property name="maxStringLiteralLength">65535</property>
  19.                 <!--<property name="sequnceHandlerType">0</property>-->
  20.                 <!--<property name="backSocketNoDelay">1</property>-->
  21.                 <!--<property name="frontSocketNoDelay">1</property>-->
  22.                 <!--<property name="processorExecutor">16</property>-->
  23.                 <!--
  24.                         <property name="mutiNodeLimitType">1</property> 0:开启小数量级(默认) ;1:开启亿级数据排序
  25.                         <property name="mutiNodePatchSize">100</property> 亿级数量排序批量
  26.                         <property name="processors">32</property> <property name="processorExecutor">32</property>
  27.                         <property name="serverPort">8066</property> <property name="managerPort">9066</property>
  28.                         <property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property>
  29.                         <property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
  30.         <property name="defaultSqlParser">druidparser</property>
  31.         </system>
  32.         <!--
  33.         <user name="root">
  34.                 <property name="password">root</property>
  35.                 <property name="schemas">test</property>
  36.         </user>

  37.         <user name="root_read">
  38.                 <property name="password">root_read</property>
  39.                 <property name="schemas">test</property>
  40.                 <property name="readOnly">true</property>
  41.         </user>
  42.         -->
  43.         <user name="test">
  44.                 <property name="password">test</property>
  45.                 <property name="schemas">test</property>
  46.         </user>

  47.         <!-- <cluster> <node name="cobar1"> <property name="host">127.0.0.1</property>
  48.                 <property name="weight">1</property> </node> </cluster> -->
  49.         <!-- <quarantine> <host name="1.2.3.4"> <property name="user">test</property>
  50.                 </host> </quarantine> -->

  51. </mycat:server>
PS:MyCAT对外暴露的schema,是可以使用readonly模式的,如上面配置文件中的加红部分;

processors:用于指定可用线程数,实际上由于现在的多核CPU和超线程技术,这个值可以酌情调高, 这里调到了虚拟机核数的八倍,感觉稍稍有点高了,实际上四倍or五倍就差不多了

processorExecutor:类似于线程池大小的参数,酌情修改即可,在1.4之后,这个线程池是用来做异步处理逻辑的时候用的,对并发能力的影响相对较小了

processorBufferPool:BufferPool的大小,原则上来说,调高一些会比较好

processorBufferChunk:每一个Buffer块的大小,processorBufferPool/processorBufferChun可以得到buffer块的数量

server调整总结:
processors+processorExecutor会影响到MyCAT可用的线程数,虽然调高点会比较好,但是调的太高会导致频繁的上下文切换和软中断,在实际调整中,用top观察sys和si的百分比,如果服务器/虚拟机并没有什么不干净的后台程序和其他的服务在运行,sys在10%-15%之内,si在5%之内是比较理想的状态

processorBufferPool+processorBufferChunk影响的server缓存,保持processorBufferChunk大小合理的情况下,增加buffer块的数量才是关键


cacheservice.properties示例:

点击(此处)折叠或打开

  1. #used for mycat cache service conf
  2. factory.encache=org.opencloudb.cache.impl.EnchachePooFactory
  3. #key is pool name ,value is type,max size, expire seconds
  4. pool.SQLRouteCache=encache,1500000,60
  5. pool.ER_SQL2PARENTID=encache,2000,180
  6. layedpool.TableID2DataNodeCache=encache,3000,18000
  7. layedpool.TableID2DataNodeCache.TESTDB_ORDERS=10000,18000
cacheservice是SQL的缓存服务,

SQLRouteCache:sql路由缓存, 通过缓存SQL语句的路由信息,下次查询,不用再路由了,直接从缓存中获取路由信息,然后发到各个节点执行;
TableID2DataNodeCache : 表主键ID的路由缓存,为每一个表建一个缓存池,命名为TableID2DataNodeCache.TESTDB_表名,缓存的key是id的值,value是节点名;
ER_SQL2PARENTID : ER关系的缓存目前只是在Insert语句中才会使用缓存,子表插入数据的时候,根据joinKey的值,判断父表所在分片,从而定位子表分片,分片信息put缓存,以便下次直接获取

由于在测试的时候并没有对测试表是简单的区域划分,所以在测试中对后两个缓存是没有利用到的,具体对缓存大小的调整可以参考 SQLRouteCache;

首先贴出结论:
SQLRouteCache的大小对具体的QPS有比较大的影响(废话......._(:з」∠)_ ,在实际的测试过程中,保持线程并发不变的情况下,从100W-300W都有调整过, 大概每增加50W,有约 15% 的增加,直观来看的话,从100W-300W的增加过程中,128线程,5张表x5000W行/表的情况下,QPS范围从1W5-2W5, 然而有一个问题很重要,当这个值增加到比较高后,会频繁出现极高的sys占用率,同时vmstat命令下,proc列会有非常高的r和b,直接后果就是 MyCAT server本身会出现剧烈的性能波动 ,在基准测试中,QPS的低谷会降到3000-4000;但是free查看内存使用的时候,并没有出现内存不足的情况,推断为MyCAT本身的缓存设计中存在不完善的地方;

具体的设置值,在不断的测试中, 以之前的虚拟机的配置(4核,32G )为参考 ,当 SQLRouteCache 的值设置到180W以上的时候,就会不定时的出现性能波动,为了保证稳定运行,在基准测试时采用了较低的150W

PS:由于基准测试的时候, SQL语句模板里面的参数都是采用随机值,所以缓存的命中率是偏低的(150W的设置下,大约只有25%的命中率 ),生产环境下,这个命中率会高很多,同时QPS也会有一定程度的上升
PPS:这个routeCache和MySQL的queryCache比较像,缓存的都是具体的SQL语句,而不是框架里面的带?占位符的语句,queryCache的信息可以参考http://blog.itpub.net/29510932/viewspace-1694922/

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
5月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
428 2
|
8月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
3月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
579 6
|
10月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,展现卓越性能与性价比。其轻量版满足国产化需求,兼具高性能与低成本,适用于多种场景,推动数据库技术革新与发展。
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
646 66
|
9月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
170 3
|
9月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
9月前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
10月前
|
并行计算 PyTorch 算法框架/工具
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
922 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践

推荐镜像

更多