首页 文章 精选 留言 我的

精选列表

搜索[优化],共10000篇文章
优秀的个人博客,低调大师

MySQL 优化从库延迟的一些思路

作者:孙绪宗,新浪微博 DBA 团队工程师,主要负责 MySQL、PostgreSQL 等关系型数据库运维。 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 本文约 1000 字,预计阅读需要 3 分钟。 引言 在数据库运维过程中,无论是迁移扩容还是生产投量,都必不可少的会遇到从库迁移追不上的问题。这些问题令人头疼。 以下列举几个我个人遇到过的原因: buffer_pool 设置过大,导致 MySQL 使用 SWAP 备份导致 SQL_THREAD 回放等待 MDL 大事务 慢查询导致从库性能低下 并行复制导致从库延迟监控一直为 1s 网络问题 具体情况具体分析,这里不赘述。 如果你在常规排查之后,依然无法解决。接下来,我将根据自身的一些经验,提供一些参数调整思路,供大家参考。 思路一:sync 相关 我们在追延迟的情况,可以调整一下参数,增加日志落盘效率。后续上线从库可以再设置回来。 sync_binlog=0 sync_master_info=10000 #default sync_relay_log=10000 #default sync_relay_log_info=10000 #default 思路二:buffer 和并发等相关 可以考虑增加一下 buffer_pool,SQL_THREAD 回放执行的更快。 如果内存空间不足的话,可以适当调整 change buffer 的比例(前提是无读,正常情况下延迟库均为无业务连接)。 innodb_buffer_pool_size=24G #24*1024*1024*1024 innodb_change_buffer_max_size=50 innodb_thread_concurrency=0 innodb_adaptive_hash_index=0 增大 innodb_buffer_pool_size 风险点: 内存过度分配导致 SWAP 触发或 OOM,需预留足够内存给系统和 MySQL 其他组件,建议缓冲池不超过物理内存的 70%; 调整需分步进行,结合系统内存监控,避免一次性设置过大。 思路三:slave 相关 考虑开启并行复制 开启并行复制,8.0+ 版本考虑用 writeset。复制线程可以多观察一下,如果没够的话,可以考虑增加。但不建议超过 CPU 核心数或者 innodb_thread_concurrency 参数值。 slave_preserve_commit_order 会加一层锁,追延迟的时候建议关闭,后续上线从库可以再打开。 slave_parallel_type=LOGICAL_CLOCK slave_parallel_workers=16 slave_preserve_commit_order=OFF 个人不建议修改以下参数 ,性能虽然会有所增长,但同时会导致主库 commit 等待。当然部分非实时类业务可以调整。 binlog 的组提交的两个有关参数: binlog_group_commit_sync_delay 参数,表示延迟多少微秒后才调用 fsync 刷盘; binlog_group_commit_sync_no_delay_count 参数,表示累积多少次以后才调用 fsync。 考虑关闭 log_slave_updates log_slave_updates 这个需要重启生效。但是有 gdb 经验的小伙伴可以 gdb 修改,不需要重启,只需要重启 slave 复制即可生效。无 gdb 经验可能会导致 crash 不建议。 同时注意需要了解架构,没有 binlog 备份或者级联库,且无业务连接,建议可以关闭。 思路四 MGR 架构可以考虑先改为异步复制,关闭 slave_preserve_commit_order,待延迟追完后再加入到集群。 思路五 其他性能参数按照模板理论上不会有太大问题,这套操作下来延迟大概率会有所下降,降为 0 只是时间问题。 附录 并行复制积压日志解析: 2021-01-10T16:08:39.947611+08:00 85441 [Note] Multi-threaded slave statistics for channel '';seconds elapsed = 120;events assigned = 4005889;worker queues filled over overrun level = 0;waited due a Worker queue full = 0;waited due the total size = 0;waited at clock conflicts = 6918018179200 waited (count) when Workers occupied = 0 waited when Workers occupied = 0 -------------------------------- Multi-threaded slave statistics for channel ": seconds elapsed = 120; 每隔120s输出 eventsassigned = 4005889; 总共有多少个event被分配执行 queues filled over overrun level = 0; 多线程同步中,worker 的私有队列长度超长的次数 waited due aWorker queue full = 0; 因为worker的队列超长而产生等待的次数 waited due the total size = 0; 超过最大size的次数 waited at clock conflicts= 6918018179200;因为逻辑时间产生冲突的等待时间,单位是纳秒 waited (count) when Workers occupied = 0 因为workder被占用而出现等待的次数。(总计值) waited when Workers occupied = 0 因为workder被占用而出现等待的总时间,总计值,单位是纳秒

优秀的个人博客,低调大师

ip2region 3.11.1 发布 - Java 服务构建优化

Ip2region是一个离线的 IP 数据管理框架和定位库,同时支持 IPv4 和 IPv6,支持亿级别的 IP 断管理,10 微秒级别的查询性能,提供了很多主流编程语言的 xdb 数据格式的生成和查询实现。 ip2region 官方社区已正式上线旨提强化 IP 相关的工具链和数据服务,目前提供了稳定的商用离线数据、在线查询测试、xdb 使用 / 技术文档。 ip2region 3.11.1 详细更新如下: 1,java xdb 内部的 String xdbPath 全部替换为 File xdbFile,支持通过 File 创建查询对象。 2,java xdb.Searcher 增加通过 InputStream 加载整个 xdb 文件 / header / vectorIndex / 验证。 3,java service.ConfigBuilder 增加 setXdbInputStream 和 setXdbFile,支持通过 InputStream 和 File 构建 service.Config。 如果通过 setXdbInputStream 来指定 xdb 数据源,此时的缓存策略只能指定为 Config.BufferCache,该方式仅方便从 jar 包中加载 xdb 文件的内容,虽然我一直建议 xdb 文件不要打包到 jar 包里面,调用方式如下: import org.lionsoul.ip2region.service.Config; import org.lionsoul.ip2region.service.Ip2Region; final Config v4Config = Config.custom() .setCachePolicy(Config.VIndexCache) // 指定缓存策略: NoCache / VIndexCache / BufferCache .setSearchers(15) // 设置初始化的查询器数量 // .setXdbInputStream(InputStream) // 设置 v4 xdb 文件的 inputstream 对象 // .setXdbFile(File) // 设置 v4 xdb File 对象 .setXdbPath("ip2region v4 xdb path") // 设置 v4 xdb 文件的路径 .asV4(); // 指定为 v4 配置 4,maven pom 版本更新为 3.3.1,最新坐标如下: <dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2region</artifactId> <version>3.3.1</version> </dependency>

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册