技术分享 | MySQL 突如其来的主从复制延迟

MySQL:Waiting for dependent transaction to commit 这是一个stage,定义在mysqld.cc文件的11321行。 mysql在sql/rpl_mts_submode.cc文件的wait_for_last_committed_trx方法中进入此stage。 #rpl_mts_submode.cc bool Mts_submode_logical_clock::wait_for_last_committed_trx( Relay_log_info *rli, longlong last_committed_arg) { THD *thd = 阅读详情

作者:刘开洋

爱可生交付服务团队北京 DBA,对数据库及周边技术有浓厚的学习兴趣,喜欢看书,追求技术。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


前几天来自生产上的一个问题,又涨知识了,今天拿来分享给大家。

现象与分析

现象是监控显示主从出现延迟,那我们就得登上数据库看看究竟出现了什么事?

[root@localhost][(none)]> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.196.131.152
                  Master_User: universe_op
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.002805
          Read_Master_Log_Pos: 929207906
               Relay_Log_File: mysql-relay-bin.007053
                Relay_Log_Pos: 588591867
        Relay_Master_Log_File: mysql-bin.002805
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 588591694
              Relay_Log_Space: 929208373
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 808           // 与主之间存在着808s的延迟,并且延迟还在增加
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 685734686
                  Master_UUID: 85d68147-e6a2-11ea-944a-0050568e99a5
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Waiting for dependent transaction to commit
           Master_Retry_Count: 1
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set: 85d68147-e6a2-11ea-944a-0050568e99a5:901602108-1056122204      // 收到的Gtid在增长,binlog dump Gtid线程正努力工作
            Executed_Gtid_Set: 452dfe36-6508-11e9-85e2-00505694c5db:1-51354589,       // gtid一直在增大,说明从库持续在回放主库binlog,排除锁等待的情况
85d68147-e6a2-11ea-944a-0050568e99a5:1-1056051538
                Auto_Position: 1
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)
 
// 在processlist中也能看到并发线程长时间Waiting for an event from Coordinator的现象
[root@localhost][(none)]> show processlist;
+--------+-------------+----------------------+------+-----------------+---------+---------------------------------------------------------------+------------------+
| Id     | User        | Host                 | db   | Command         | Time    | State                                                         | Info             |
+--------+-------------+----------------------+------+-----------------+---------+---------------------------------------------------------------+------------------+
|      1 | system user |                      | NULL | Connect         | 3459230 | Waiting for master to send event                              | NULL             |
|      2 | system user |                      | NULL | Connect         |       0 | Waiting for dependent transaction to commit                   | NULL             |
|      3 | system user |                      | NULL | Connect         |     811 | Waiting for an event from Coordinator                         | NULL             |
|      4 | system user |                      | NULL | Connect         |     811 | Executing event                                               | NULL             |
|      5 | system user |                      | NULL | Connect         |     812 | Waiting for an event from Coordinator                         | NULL             |
|      6 | system user |                      | NULL | Connect         |     813 | Waiting for an event from Coordinator                         | NULL             |
|      7 | system user |                      | NULL | Connect         |     813 | Waiting for an event from Coordinator                         | NULL             |
|      8 | system user |                      | NULL | Connect         |     817 | Waiting for an event from Coordinator                         | NULL             |
|      9 | system user |                      | NULL | Connect         |     817 | Waiting for an event from Coordinator                         | NULL             |
|     10 | system user |                      | NULL | Connect         |     819 | Waiting for an event from Coordinator                         | NULL             |
| 705000 | zabbix_user | 10.195.129.195:27258 | NULL | Sleep           |       0 |                                                               | NULL             |
| 705003 | zabbix_user | 10.195.129.195:27286 | NULL | Binlog Dump Gtid|  141604 | Master has sent all binlog to slave; waiting for more updates | NULL             |
| 735026 | root        | localhost            | NULL | Query           |       0 | starting                                                      | show processlist |
+--------+-------------+----------------------+------+-----------------+---------+---------------------------------------------------------------+------------------+
25 rows in set (0.00 sec) 
  
// 看看innodb存储引擎层整体的输出
[root@localhost][(none)]> show engine innodb status\G
*************************** 1. row ***************************
  Type: InnoDB
  Name:
Status:
=====================================
2021-09-26 10:58:26 0x7f7964b63700 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 3 seconds       // 过去3s内的计算数值
-----------------
BACKGROUND THREAD
-----------------
srv_master_thread loops: 3451511 srv_active, 0 srv_shutdown, 37 srv_idle
srv_master_thread log flush and writes: 3451269
----------
SEMAPHORES      // 通过下面的信号量说明事件计数器和当前等待线程的列表很高,waits很高,存在很高的工作负载。
----------
OS WAIT ARRAY INFO: reservation count 1997792220
OS WAIT ARRAY INFO: signal count 2815399081
RW-shared spins 0, rounds 2610682598, OS waits 181278068
RW-excl spins 0, rounds 93825427645, OS waits 1036416294   // 读写的锁计数器wait数量很高
RW-sx spins 1902710329, rounds 36619607564, OS waits 565415695
Spin rounds per wait: 2610682598.00 RW-shared, 93825427645.00 RW-excl, 19.25 RW-sx
······

之后我们来到操作系统层面看看能找到哪些蛛丝马迹。首先是 IO ,此时回顾之前的现象是从库执行的 Gtid 一直在涨,那此时是否有很高的 IO 写入呢?

cn0013vm3813:~ # iostat -x 1
Linux 4.12.14-122.12-default (cn0013vm3813)     09/26/21        _x86_64_        (8 CPU)
 
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.51    0.00    6.77    4.64    0.00   83.08
 
Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
sda              0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.00    0.00   0.00     0.00     0.00   0.00   0.00
sdb             38.00 7235.00    316.00 249236.00     0.00   247.00   0.00   3.30    0.84    0.03  10.40     8.32    34.45   0.09  65.60
dm-0             0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.00    0.00   0.00     0.00     0.00   0.00   0.00
dm-1             0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.00    0.00   0.00     0.00     0.00   0.00   0.00
dm-2             0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.00    0.00   0.00     0.00     0.00   0.00   0.00
dm-3            37.00 7937.00    300.00 256372.00     0.00     0.00   0.00   0.00    1.84    1.36  10.87     8.11    32.30   0.08  64.40
dm-4             0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.00    0.00   0.00     0.00     0.00   0.00   0.00
dm-5             0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.00    0.00   0.00     0.00     0.00   0.00   0.00
dm-6             0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.00    0.00   0.00     0.00     0.00   0.00   0.00
dm-7             0.00    0.00      0.00      0.00     0.00     0.00   0.00   0.00    0.00    0.00   0.00     0.00     0.00   0.00   0.00
sdc              0.00  398.00      0.00   6764.00     0.00    31.00   0.00   7.23    0.00    0.00   0.38     0.00    16.99   0.23   9.20
^C
cn0013vm3813:~ # top -p `pgrep mysqld`
top - 10:51:17 up 119 days,  6:39,  2 users,  load average: 2.05, 2.13, 2.35
Tasks: 251 total,   1 running, 250 sleeping,   0 stopped,   0 zombie
%Cpu(s): 17.3 us,  3.5 sy,  0.0 ni, 71.2 id,  6.8 wa,  0.0 hi,  1.3 si,  0.0 st
KiB Mem:  32742352 total, 32498472 used,   243880 free,   565520 buffers
KiB Swap:        0 total,        0 used,        0 free. 11892264 cached Mem
 
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                
 5387 mysql     20   0 20.712g 0.017t  14000 S 166.4 56.59  24781:43 mysqld           
 
// sar、lsof 和 pidstat 均可以辅助诊断出现的问题

在 iostat 的输出和 top 定位中,确实存在很高的磁盘 IO ,正好对应数据库挂载的 Device ,说明此时存在很高的 MySQL 数据变更操作,但是还没达到瓶颈。

MySQL 出问题我们肯定是要去错误日志中看看有什么现象的,遇到问题翻日志肯定有意想不到的收获(建议参数 log-error-verbosity=3 ):

cn0013vm3813:/MYSQL/mdata/mysql_data # tail -f error.log
2021-09-26T11:10:44.341226+08:00 [Note] InnoDB: page_cleaner: 1000ms intended loop took 4504ms. The settings might not be optimal. (flushed=2006 and evicted=0, during the time.)
2021-09-26T11:10:49.450563+08:00 2 [Note] Multi-threaded slave statistics for channel '': seconds elapsed = 124; events assigned = 996024321; worker queues filled over overrun level = 3325; waited due a Worker queue full = 2; waited due the total size = 7479; waited at clock conflicts = 1074002060535300 waited (count) when Workers occupied = 603501 waited when Workers occupied = 1094588543400
2021-09-26T11:11:14.474659+08:00 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 4160ms. The settings might not be optimal. (flushed=2005 and evicted=0, during the time.)
2021-09-26T11:11:44.281841+08:00 735819 [Note] Got an error reading communication packets
2021-09-26T11:12:14.456899+08:00 735823 [Note] Got an error reading communication packets
2021-09-26T11:12:14.644479+08:00 2 [Note] Multi-threaded slave: Coordinator has waited 7481 times hitting slave_pending_jobs_size_max; current event size = 40906.
2021-09-26T11:12:14.797567+08:00 2 [Note] Multi-threaded slave: Coordinator has waited 7491 times hitting slave_pending_jobs_size_max; current event size = 40912.
2021-09-26T11:12:14.985773+08:00 2 [Note] Multi-threaded slave: Coordinator has waited 7501 times hitting slave_pending_jobs_size_max; current event size = 40916.
2021-09-26T11:12:15.145043+08:00 2 [Note] Multi-threaded slave: Coordinator has waited 7511 times hitting slave_pending_jobs_size_max; current event size = 40907.
2021-09-26T11:12:15.351211+08:00 2 [Note] Multi-threaded slave: Coordinator has waited 7521 times hitting slave_pending_jobs_size_max; current event size = 40897.
2021-09-26T11:12:15.827309+08:00 2 [Note] Multi-threaded slave: Coordinator has waited 7531 times hitting slave_pending_jobs_size_max; current event size = 40917.
2021-09-26T11:12:16.066707+08:00 2 [Note] Multi-threaded slave: Coordinator has waited 7541 times hitting slave_pending_jobs_size_max; current event size = 40910.

定位与结论

  • 在 page_cleaner 线程出现的一刻( page_cleaner 线程每秒刷新一次,此时刷新了2005个页面,耗费了4.504s),我们就明白,此时脏页很多,刷脏线程全力刷脏,也从侧面说明了写入很高,从库压力大,硬件无法跟上配置的运行速率,因此需要降低 innodb_io_capacity_max 值;

  • 从 Multi-threaded 出现信息输出进一步说明从库的SQL并行复制压力较大,可以适当增加并行线程数量以降低工作队列满而导致的等待;

  • MySQL error 日志在 MTS复制中出现了一个参数名 slave_pending_jobs_size_max,表示 Coordinator 在等了7000多次之后达到了 slave_pending_jobs_size_max 的最大值,这里也说明 MySQL 单条 SQL 很长,延长了 worker 线程的读取速度,去看看从库的 slave_pending_jobs_size_max 值。

[root@localhost][(none)]> show variables like '%slave_pending_jobs_size_max%';
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| slave_pending_jobs_size_max | 16777216 |  = 16M
+-----------------------------+----------+
1 row in set (0.00 sec)
// 而此时主库的最大允许发送的数据包大小
[root@localhost][(none)]> show variables like 'max_allowed_packet';
+--------------------+------------+
| Variable_name      | Value      |
+--------------------+------------+
| max_allowed_packet | 1073741824 |  = 1G
+--------------------+------------+
1 row in set (0.00 sec)

下面是这两个参数导致主从延迟的官方解释:https://dev.mysql.com/doc/refman/5.7/en/replication-features-max-allowed-packet.html

On a multi-threaded replica (slave_parallel_workers > 0), ensure that the system variable slave_pending_jobs_size_max is set to a value equal to or greater than the setting for the max_allowed_packet system variable on the source. The default setting for slave_pending_jobs_size_max, 128M, is twice the default setting for max_allowed_packet, which is 64M. max_allowed_packet limits the packet size that the source can send, but the addition of an event header can produce a binary log event exceeding this size. Also, in row-based replication, a single event can be significantly larger than the max_allowed_packet size, because the value of max_allowed_packet only limits each column of the table.

The replica actually accepts packets up to the limit set by its slave_max_allowed_packet setting, which default to the maximum setting of 1GB, to prevent a replication failure due to a large packet. However, the value of slave_pending_jobs_size_max controls the memory that is made available on the replica to hold incoming packets. The specified memory is shared among all the replica worker queues.

The value of slave_pending_jobs_size_max is a soft limit, and if an unusually large event (consisting of one or multiple packets) exceeds this size, the transaction is held until all the replica workers have empty queues, and then processed. All subsequent transactions are held until the large transaction has been completed. So although unusual events larger than slave_pending_jobs_size_max can be processed, the delay to clear the queues of all the replica workers and the wait to queue subsequent transactions can cause lag on the replica and decreased concurrency of the replica workers. slave_pending_jobs_size_max should therefore be set high enough to accommodate most expected event sizes.

师爷,翻译翻译,什么叫 slave_pending_jobs_size_max ······

在多线程副本(slave_parallel_workers > 0)上,确保系统变量 slave_pending_jobs_size_max 的值等于或大于复制源中系统变量 max_allowed_packet 的设置。slave_pending_jobs_size_max 的默认设置应该是128M,是 max_allowed_packet 的默认设置(64M)的两倍。Max_allowed_packet 限制源端可以发送数据包的大小,但添加 event header 会产生超过这个大小的 binlog event 。另外在基于 ROW 模式的复制中,单个事件可能会显著大于 max_allowed_packet 的大小,因为 max_allowed_packet 的值只限制表中的每一列。

复制实际上接受的数据包不超过其 slave_max_allowed_packet 设置的限制,默认为最大设置1GB,以防止由于大数据包而导致复制失败。 但 slave_pending_jobs_size_max 的值控制了副本上可用来保存传入数据包的内存。指定的内存在所有复制工作队列中共享。slave_pending_jobs_size_max 的值是一个软限制,如果一个异常大的事件超过了这个大小,事务将被保持,直到所有的复制工作者都有空队列,然后处理。在大事务完成之前,将持有后续所有事务。因此可以处理大于 slave_pending_jobs_size_max 的异常事件,但清除所有副本工作人员队列的延迟和等待后续事务的队列会导致从库延迟,并降低副本工作线程的并发性。 因此 Slave_pending_jobs_size_max 应该设置得足够高,以适应大多数预期事件的大小。

看来 DBA 对于 MTS 的了解不足致使我们在数据库的参数配置中还有很大的优化空间,多翻翻官方文档还是能得到很多建议的。slave_pending_jobs_size_max 可以在线全局修改,但是需要重启复制才能生效。

参考:

https://www.percona.com/blog/2017/07/19/multi-threaded-slave-statistics/

http://mysql.taobao.org/monthly/2015/08/09/?spm=a2c6h.13066369.0.0.40e2c637F8gChL


主从延迟可能出现问题的场景,DBA 接触最多的还是大事务和锁等待现象,其他相关知识大家了解:

tips:MySQL的主从延迟

1、传输延迟

MySQL 的 master 使用 Binlog Dump 线程将二进制日志传输到 slave 中过程中产生的延迟。

传输延迟的大小就是主库 binlog 的生成位置 position 减去从库 binlog 传输的位置 position 。

传输延迟的原因:
  1. dump 线程是单线程,可能没有那么强的能力取读速度如此之快的并发事务产生的 binlog 。
  2. 交换机、路由器等硬件问题或网络带宽的限制导致的两台服务器之间的网络延迟。
  3. slave 上的 io 线程没有能力及时写入 relay log 。
传输延迟的解决:
  1. 避免 master 上大批量 DML 的执行。
  2. 增加网络带宽或者更新网络硬件。
  3. 增加 slave 的写能力,比如使用 raid 卡 + 写 flash 。
  4. 增加 slave 进行物理读的能力,使用 Pcie 闪卡。
  5. 换数据库。

2、应用延迟

而应用延迟是 MySQL 的 master 传到 slave 上进行回放 binlog 的延迟,即延迟大小等于 slave 中 Read_Master_Log_Pos - Exec_Master_Log_Pos 的值。有的同学就说了,我们都升级使用 Gtid 了,position 这种老土的方法,同理我们可以通过对比同一 UUID 下

Retrieved_Gtid_Set - Executed_Gtid_Set 的事务差值就是我们的延迟大小啦,不过是以事务为计量单位的。

应用延迟的原因:
  1. 应用延迟最根本的原因是 master 上多线程并行复制,slave 的单线程回放机制。
  2. 再就是 MySQL 的 binlog 记录模式是 ROW 模式时,进行变更的表没有主键或者没有高效索引。
  3. 事务中存在问题 SQL(慢 SQL )。
应用延迟的解决:
  1. MySQL 在 5.7 中开启组提交会很有帮助。
  2. 建议业务人员在建表规范中将数据库中所有表都要有主键,dml 要走高效索引。
  3. 如果业务在进行大批量跑批,可以选择临时关闭 binlog ,从库进行特殊处理(数据库备份恢复或者单独执行批量 DML 后加入集群)。
  4. 使用多从库将业务分离。
MySQL主从延迟的解决方案 之前项目中基于 MySQL 主从复制以及 AOP 的方式实现了读写分离,也写了博客记录了这个实现过程,《SpringBoot实现MySQL读写分离》。 既然配置了 MySQL 主从复制,那么自然会存在主从延迟,如何尽可能减小主从延迟对应用系统的影响是很有必要的思考点,我个人认为主从延迟的解决方案正是实现读写分离、MySQL 主从复制的精髓。 关于这个话题其实我之前就想着写篇博客分享一下,但一直没有提上日程。最近有读者在《SpringBoot实现MySQL读写分离》 这篇博客中留言问到了这个问题,这也激励我写 阅读详情

相关推荐

(二十四)全解MySQL之主从篇:死磕主从复制中数据同步原理与优化

不论任何技术栈,但凡一提高可用、高性能、高稳定这些词汇,必然会牵扯到集群、主从架构的概念,如任何技术栈中都会有,而MySQL中同样不例外,官方也提供了主从架构的支持,通过调整多个MySQL节点的配置信息,即可将一个节点的数据同步给另一个或多个节点,但这种方式同步的是所有数据!有人也许会疑惑:为什么要同步所有数据呀?难道不能对数据作分片,不同的节点同步不同的数据嘛?

weixin_54542328的博客 3300

MYSQL篇-主从复制的延迟问题

同步延迟原因: Slave相对master出现延迟大,根本原因是master上提交事务后是多线程并发写入数据的,而在slave上,SQL线程是以单线程方式对rely-log中的sql进行重放。也就是说,master上是多线程写入数据,slave上是单线程写入,在高并发高负载时,slave就容易出现一定延迟,或落后于master。 常见的延迟场景: 场景1:slave库所在的机器资源有限或不足 因为slave从master同步binlog过来,是由一个IO线程和一个SQL线程来完成,这两个线程

qq_19676401的博客 4345

MySQL主从复制原理与实现

MySQL是一个开源的关系型数据库管理系统,可以说它是当下最流行的关系型数据库之一。作为一种优秀的关系型数据库,MySQL自成一体地支持了许多高级特性,包括支持主从复制、SQL优化、高可用性等,使得其在企业级应用中广受欢迎。作为企业级数据库,MySQL备份还会提供各种实用工具帮助用户管理和维护MySQL数据。本文将以MySQL主从复制的基本原理为基础,阐述主从复制的工作流程、配置方式以及实现难点。最后,本文还将进一步探讨主从复制的可靠性、扩展性、健壮性、安全性、恢复及运维方面的挑战。

AI天才研究院 2368

处理mysql 主从数据库延迟 3

一 序言 在运维MySQL数据库时,DBA会接收到比较多关于主备延时的报警: check_ins_slave_lag (err_cnt:1)critical-slavelag on ins:3306=39438 相信 slave 延迟是MySQL dba 遇到的一个老生长谈的问题了。我们先来分析一下slave延迟带来的风险 异常情况下,主从HA无法切换。HA 软件需要检查数据的一致性,...

u013452337的博客 2353

Unity游戏开发实战:如何用科大讯飞离线语音合成SDK实现NPC对话(附完整代码)

本文详细介绍了如何在Unity游戏开发中使用科大讯飞离线语音合成SDK实现NPC对话系统。通过完整的代码示例和优化技巧,开发者可以快速集成本地语音合成功能,提升游戏沉浸感,同时避免网络延迟问题。文章涵盖SDK集成、核心语音合成模块实现以及高级应用技巧,特别适合RPG游戏开发者参考。

weixin_29268385的博客 181

保姆级教程:用海思PQTool搞定ISP图像调试,从参数读取到固件烧录全流程

本文提供海思PQTool的ISP图像调试全流程指南,从参数读取、实时调试到固件烧录,涵盖环境配置、核心功能解析、参数固化及生产部署。通过实战案例和避坑指南,帮助开发者高效提升图像质量,适用于海思开发板的ISP调试与优化。

weixin_30872337的博客 280

MySQL 8 主从延迟监控(复制可观测性)

作者 | Frederic Descamps来源 |https://dev.mysql.com/blog-archive/mysql-8-and-replication-observability/大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 MySQL 8 主从延迟监控(复制可观测性),欢迎点击上方蓝字“JiekeXu DBA之路”关注我的公众号,标星或置顶,更多干货...

JiekeXu的博客 1219

NVIDIA Video Codec SDK-解码接口cuvid简介

特性已废弃的 NVCUVID现代的 NVDECODE (底层 API)现代的 NVDECODE (高层 API - NvDecoder)状态已废弃 (Deprecated)官方推荐 (底层控制)官方推荐 (易用性首选)编程模型C 函数C 函数C++ 类复杂度高,需要管理大量细节中高,仍需管理解码会话低,开箱即用灵活性高高中(满足绝大多数场景)推荐对象遗留项目维护需要极致控制的高级用户所有新项目、大多数开发者。

fudexiang的博客 1176

MySQL 8 的复制可观测性

本文讲解了 MySQL 8 在复制观测性上带来更丰富的观测信息。作者:Frederic Descamps MySQL 社区经理本文来源:Oracle MySQL 官网博客许多经验丰富的 MySQL DBA 都使用过输出中的来判断(异步)复制的运行状态。注意:这里使用新的术语 REPLICA。我相信所有人都使用过旧的术语。然而,MySQL 复制机制已经有很大进步,复制功能团队也做了很多工作,能够为 MySQL 中所有可用的复制模式提供的更丰富观测信息。

ActionTech的博客 489

组态王|组态王通过选择日期实现历史数据的查询

②在弹出的【插入通用控件】对话框选择【Calender Control】控件,然后点击【确定】按钮,关闭对话框,然后在画面上适当的位置按住鼠标左键并拖动,绘制出一个矩形框,放开鼠标,就完成了控件的绘制。此函数将指定的时间格式(年,月,日,时,分,秒)转换为以秒为单位的长整型数,转换的时间基准是UTC(格林尼治)1970年1月1日00:00:00。实现内容,通过两个日历控件选择开始日期和结束日期,然后点击【历史数据查询】按钮,在报表中显示对应时间段的数据集。另外你用过哪些组态软件?

做有价值的事,积累有价值的笔记! 4561

YOLO26涨点改进| TGRS 2026 | 独家创新首发、注意力改进篇| 引入CSSCA频谱-空间交叉注意力,含多种创新改进,小目标检测、图像分割、高光谱图像分类、语义分割任务任务涨点

🔥本文提出CSSCA(频谱-空间交叉注意力)模块,通过中心像素引导的光谱与空间交叉注意力机制,有效提升YOLO26模型的特征表达能力。该模块实现了光谱与空间信息的协同优化,能够自适应强化关键通道与重要空间区域,增强模型对小目标和复杂场景的感知能力。文章详细介绍了CSSCA的网络结构、工作原理及四大优势,包括精准特征表达、协同信息优化、小样本适应性和轻量化设计。同时提供了完整的代码实现和四种改进方案的YAML配置文件,包括基础版、增强版、C3k2融合版和C2PSA融合版,为YOLO26模型的性能提升

Ai缝合怪、助力小伙伴高效发论文 265

mysql主从复制延迟问题及解决方案

上篇我们分享了主从复制的原理可参考 今天我们分享主从复制所遇到的延时问题及解决方案:及在主库刚刚写入,就立刻去从库中取数据,此时主库数据开没有同步到从库,造成查不到数据的后果。这块技术方案是一个业界的难点,很能考验一个公司或者个人的技术功,废话少说,现在开始! 一、查看同步延迟状态 在从服务器上通过 show slave status 脚本命令查看具体的参数,有几个参数比较重要: master_log_file: slave中的IO线程正在读取的主服务器二进制日志文件的名称 read_maste.

nandao158的博客 2681

VIIRS-NPP夜间灯光遥感数据下载和预处理

右侧搜索框搜索“按掩膜提取”,提取出夜光影像中国区域。将其转换为Albers积投影和重采样到400m。点击右上角Export,选择shp格式。最后点export导出就行。点击复制按钮,来到这个。,ctrl + v粘贴。将小于0.3的值置为0。下载好月合成产品后,

热爱分享,热爱记录 1万+

MySQL - 主从复制延迟:原因排查与优化方案

MySQL主从复制延迟分析与优化 主从复制延迟是MySQL读写分离架构中的常见问题,主要表现为从库数据滞后于主库。主要原因包括:单线程SQL回放瓶颈、大事务阻塞、从库硬件性能不足、网络延迟、读压力过大以及DDL操作锁表等。 解决方案: 启用并行复制(MySQL 5.7+)提升回放效率 拆分大事务,避免长事务阻塞 均衡主从硬件配置,确保从库性能足够 优化网络环境,减少跨机房延迟 限制从库复杂查询,降低负载 使用在线DDL工具(如gh-ost)减少锁表影响 Java应用优化: 通过动态数据源强制关键读请求走主库

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

基于Termux的Android平台OpenClaw部署:移动端AI助理实现

本文介绍了在Android设备上通过Termux部署OpenClaw AI助理的方案。Android设备的便携性、Termux提供的完整Linux环境以及多样化的硬件配置使其成为理想的部署平台。文章详细分析了不同级别Android设备的硬件规格(从入门级到旗舰级),并提供了最低/推荐配置要求。部署步骤包括Termux安装初始化、Python环境配置以及性能优化建议。该方案充分利用Android设备的传感器和电池供电优势,为移动办公、学习等场景提供了低成本、高便携性的AI助理解决方案。

博客 3011

9.23华为OD机试真题 新系统 - 小菊的寻宝之旅 (Java/Py/C/C++/Js/Go)

9.23华为OD机试真题 新系统 - 小菊的寻宝之旅 (Java/Py/C/C++/Js/Go)

算法大师! 985

从根本上解决mysql主从复制的延迟问题

上篇分享了从系统层面解决mysql主从复制的延迟问题可先参考 今天分享根本上解决mysql主从复制的延迟问题。 一、并行复制的原理: 很多码友在自己线上的业务系统中都使用了mysql的主从复制,但是大家需要注意的是,并不是所有的场景都适合主从复制,一般情况下是读要远远多于写的应用,同时读的时效性要求不那么高的场景。如果真实场景中真的要求立马读取到更新之后的数据,那么就只能强制读取主库的数据,所以在进行实现的时候要考虑实际的应用场景,不要为了技术而技术,这是很严肃的事情。 在mysql5.6版本.

nandao158的博客 3447

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

讲讲Mysql主从复制原理与延迟

讲讲Mysql主从复制原理与延迟

java1234的博客 794

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

MySQL面试题:主从复制binlog延迟太多怎么办

概述 之前在网上看到有人分享面试经验:binlog复制延迟太多怎么办,对于这个问题在工作当中也是很常见的一个问题。 之前分析过,MySQL基于二进制日志binlog实现的主从复制是一种异步复制,即主库对于数据库修改操作,首先记录到binlog然后在修改数据库文件。主库的复制线程读取binlog然后传输给从库,从库的复制线程接收保存为relay log,然后再由SQL线程读取relay log并在...

源码之下,了无秘密 9120

mysql主从复制 坑_MySQL 主从复制延迟的踩坑

MySQL 主从复制延迟的踩坑MySQL 主从复制延迟的踩坑最近开发中遇到的一个 MySQL 主从延迟的坑,记录并总结,避免再次犯同样的错误。### 情景一个活动信息需要审批,审批之后才能生效。因为之后活动要编辑,编辑后也可能触发审批,审批中展示的是编辑前的活动内容,考虑到字段比较多,也要保存审批活动的内容,因此设计采用了一张临时表,审批中的活动写进审批表(activity_tmp),审批通过之后...

weixin_34377186的博客 137

【集群】MySQL的主从复制了解吗?会有延迟吗,原因是什么?

MySQL主从复制(Master-Slave Replication)是指将一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)的过程。主服务器负责处理写操作(INSERT、UPDATE、DELETE等),而从服务器则复制主服务器的数据变更,主要用于读操作。

casually的博客 630

MySQL主从复制延迟问题的排查过程和路径

插个广告,ITPub的IT新媒体影响力年度评选,如果各位方便的,登录网址或者扫这个二维码,https://zt.itpub.net/topic/peanit/,最长的大事务执行了约 7 小时 48 分钟,每个大事务涉及 400 万行数据,分别写入 100 个分表。表,以查看当前活跃事务的状态。结果显示存在插入行数较多的大事务,且事务数量不断变化,初步确认大事务是导致延迟的潜在原因。

bisal的专栏 173

MySQL的主从延迟怎么解决,hr打压面试者

2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。更多JVM面试整理:一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!人才能走的更远。

2401_84170522的博客 1192

Mysql主从复制数据架构全面解读

大家好,我是山子,今天给大家分析Mysql 实现主从复制的方方面面,主从复制当然也是我们做读写分离的前提,以下内容是从各网络平台摘录整理总结归纳在一起的;内容已经从主从复制的各方面的维度进行了阐述;非常的全面;可以帮助大家节省时间,再次去从各网络平台进行查找;当然由于内容比较多,有小部分内容存在重复;就当是再次巩固阅读了把;全篇内容教比较长,请大家耐心的读完,相信大家一定会有收获的,对主从复制这块的知识一定会有很大认知的提升,用来做面试准备也是全面无死角覆盖!加油,看完哦!

用键盘与世界交流 1570

Mysql 主从复制

上次给读者们分享了关于数据库相关的基础操作命令以及相关实验实例,今天我将对MySQL数据库的主从复制做一个详细的讲解。今天我对MySQL数据库的主从复制做了一个详细的讲解,希望对读者们有所帮助!

m0_48877765的博客 973

MySQL - 读写分离实战:基于主从复制的架构搭建与优化

MySQL读写分离实战:主从复制架构搭建与优化 本文全面介绍MySQL读写分离技术,从原理到实践深入讲解: 核心原理:通过主库处理写操作,从库分担读请求,提升系统吞吐能力与可用性 搭建步骤:详细演示主从复制环境配置,包括GTID模式设置和状态验证 关键问题:分析主从延迟成因,提供并行复制、大事务拆分等解决方案 应用集成:对比ShardingSphere和Dynamic DataSource等Java实现方案 性能优化:包含硬件配置建议和事务处理最佳实践 文章包含可视化架构图、性能对比数据和权威文档链接,适合

千淘万漉虽辛苦,吹尽狂沙始到金 2万+
上一篇: 技术分享 | 实时慢查询监控系统构建
下一篇: 第47问:Table definition cache 有什么作用
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值