主从复制中定位回放慢涉及的表

MySQL主从延迟深度解析:成因、影响与解决方案 数据库主从复制是构建高可用分布式系统的核心技术,通过主库记录二进制日志、从库异步重放的机制实现数据同步。其技术价值在于提升系统读性能、实现故障容灾,广泛应用于电商、社交等读写分离场景。在实际工程实践中,主从延迟是常见挑战,可能导致用户注册后登录失败等数据不一致问题。本文基于MySQL主从复制原理,深入分析网络带宽、硬件配置差异、大事务等热词相关的延迟成因,并提供读写分离优化、并行复制配置等解决方案,帮助开发者有效应对分布式环境下的数据一致性问题。 阅读详情

主从复制中定位回放慢涉及的表

一、前提

世界千奇百怪,每个人都有自己独立的思想,有些事情即使你附耳告知,也可能如风般吹过,进而消逝,为了性能为了不延迟,表要加索引嘛,然而在某业务场景,业务表数千张,无索引的表几百张,这些表都是上百万的数据。

二、现象

在 GreatSQL 主从架构中,某天在系统资源充足的情况下,主从突然延迟,而且持续增长,我们通过SHOW PROCESSLIST 和 SHOW SLAVE STATUS 观察是由于回放 DELETE 事务造成的,但是 GTID`` 在不断地增长,不过增长的非常缓慢,但是平时的时候是没有如此缓慢的,我们该如何快速的定位这些回放缓慢的 GTID 的涉及表呢,接下来就在测试环境演示下如何定位。

三、模拟测试

1、主节点创建库

greatsql> CREATE DATABASE fcmark;
Query OK, 1 row affected (0.03 sec)

2、准备数据

$ sysbench --db-driver=mysql --mysql-host=192.168.139.230 --mysql-port=3307 --mysql-user=greatsql --mysql-password=greatsql@2024 --mysql-db=fcmark --table_size=10000000 --tables=5 oltp_write_only  prepare
sysbench 1.1.0-df89d34 (using bundled LuaJIT 2.1.0-beta3)

Creating table 'sbtest1'...
Inserting 10000000 records into 'sbtest1'
Creating a secondary index on 'sbtest1'...
Creating table 'sbtest2'...
Inserting 10000000 records into 'sbtest2'
Creating a secondary index on 'sbtest2'...
Creating table 'sbtest3'...
Inserting 10000000 records into 'sbtest3'
Creating a secondary index on 'sbtest3'...
Creating table 'sbtest4'...
Inserting 10000000 records into 'sbtest4'
Creating a secondary index on 'sbtest4'...
Creating table 'sbtest5'...
Inserting 10000000 records into 'sbtest5'
Creating a secondary index on 'sbtest5'...

3、主节点修改表结构,将表修改为无索引表

greatsql> ALTER TABLE sbtest1 MODIFY id int not null;
Query OK, 10000000 rows affected (3 min 2.62 sec)
Records: 10000000  Duplicates: 0  Warnings: 0

greatsql> ALTER TABLE sbtest1 DROP key `k_1`;
Query OK, 0 rows affected (0.15 sec)
Records: 0  Duplicates: 0  Warnings: 0

greatsql> ALTER TABLE sbtest1 DROP PRIMARY KEY;
Query OK, 10000000 rows affected (1 min 50.19 sec)
Records: 10000000  Duplicates: 0  Warnings: 0

greatsql> ALTER TABLE sbtest2 MODIFY id int not null;
Query OK, 10000000 rows affected (3 min 2.62 sec)
Records: 10000000  Duplicates: 0  Warnings: 0

greatsql> ALTER TABLE sbtest2 DROP key `k_2`;
Query OK, 0 rows affected (0.15 sec)
Records: 0  Duplicates: 0  Warnings: 0

greatsql> ALTER TABLE sbtest2 DROP  PRIMARY KEY;
Query OK, 10000000 rows affected (1 min 50.19 sec)
Records: 10000000  Duplicates: 0  Warnings: 0

greatsql> ALTER TABLE sbtest3 MODIFY id int not null;
Query OK, 10000000 rows affected (3 min 2.72 sec)
Records: 10000000  Duplicates: 0  Warnings: 0

greatsql> ALTER TABLE sbtest3 DROP key `k_3`;
Query OK, 0 rows affected (0.15 sec)
Records: 0  Duplicates: 0  Warnings: 0

greatsql> ALTER TABLE sbtest3 DROP PRIMARY KEY;
Query OK, 10000000 rows affected (1 min 52.19 sec)
Records: 10000000  Duplicates: 0  Warnings: 0

greatsql> ALTER TABLE sbtest4 MODIFY id int not null;
Query OK, 10000000 rows affected (3 min 3.64 sec)
Records: 10000000  Duplicates: 0  Warnings: 0

greatsql> ALTER TABLE sbtest4 DROP key `k_4`;
Query OK, 0 rows affected (0.15 sec)
Records: 0  Duplicates: 0  Warnings: 0

greatsql> ALTER TABLE sbtest4 DROP PRIMARY KEY;
Query OK, 10000000 rows affected (1 min 53.19 sec)
Records: 10000000  Duplicates: 0  Warnings: 0

greatsql> ALTER TABLE sbtest5 MODIFY id int not null;
Query OK, 10000000 rows affected (3 min 5.62 sec)
Records: 10000000  Duplicates: 0  Warnings: 0

greatsql> ALTER TABLE sbtest5 DROP key `k_5`;
Query OK, 0 rows affected (0.15 sec)
Records: 0  Duplicates: 0  Warnings: 0

greatsql> ALTER TABLE sbtest5 DROP PRIMARY KEY;
Query OK, 10000000 rows affected (1 min 51 sec)
Records: 10000000  Duplicates: 0  Warnings: 0

4、主库操作数据模拟延迟

greatsql> DELETE FROM sbtest1 WHERE k<200;
Query OK, 214 rows affected (41.14 sec)

greatsql> DELETE FROM sbtest2 WHERE k<200;
Query OK, 193 rows affected (41.58 sec)

greatsql> DELETE FROM sbtest3 WHERE k<200;
Query OK, 177 rows affected (40.00 sec)

greatsql> DELETE FROM sbtest4 WHERE k<200;
Query OK, 184 rows affected (39.38 sec)

greatsql> DELETE FROM sbtest5 WHERE k<200;
Query OK, 212 rows affected (37.56 sec)

greatsql> DELETE FROM sbtest1 WHERE k<400;
Query OK, 182 rows affected (39.09 sec)

greatsql> DELETE FROM sbtest2 WHERE k<400;
Query OK, 193 rows affected (38.21 sec)

greatsql> DELETE FROM sbtest3 WHERE k<400; 
Query OK, 215 rows affected (34.45 sec)

greatsql> DELETE FROM sbtest4 WHERE k<400;
Query OK, 219 rows affected (37.45 sec)

greatsql> DELETE FROM sbtest5 WHERE k<400;
Query OK, 224 rows affected (34.63 sec)

greatsql> DELETE FROM sbtest1 WHERE k<600;
Query OK, 185 rows affected (34.11 sec)

greatsql> DELETE FROM sbtest2 WHERE k<600;
Query OK, 245 rows affected (35.99 sec)

greatsql> DELETE FROM sbtest3 WHERE k<600;
Query OK, 173 rows affected (36.08 sec)

greatsql> DELETE FROM sbtest4 WHERE k<600;
Query OK, 230 rows affected (36.18 sec)

greatsql> DELETE FROM sbtest5 WHERE k<600;
Query OK, 186 rows affected (38.00 sec)

等待执行完

5、观察从库:查看延迟及GTID

通过 SHOW PROCESSLIST 观察到回放数据的时候是Applying batch of row changes (delete)

通过SHOW SLAVE STATUS观察到:数据库一直在应用133171 GTID,主库的binlog位置对应的位点是binlog.000064和714314051

注意:

  • Relay_Master_Log_File:SQL线程执行的最新事件对应在主库上的binlog日志文件名称
  • Exec_Master_Log_Pos:SQL县城已经读取和执行过程的中继日志,对应主库binlog日志文件的位点
  • Retrieved_Gtid_Set:从库已经接受到的GTID集合(I/O线程)
  • Executed_Gtid_Set:已经被写进binlog的GTID集合(SQL线程)
greatsql> SHOW PROCESSLIST;
+--------+-----------------+----------------------+--------+---------+---------+---------------------------------------------+------------------+------------+-----------+---------------+
| Id     | User            | Host                 | db     | Command | Time    | State                                       | Info             | Time_ms    | Rows_sent | Rows_examined |
+--------+-----------------+----------------------+--------+---------+---------+---------------------------------------------+------------------+------------+-----------+---------------+
|      5 | event_scheduler | localhost            | NULL   | Daemon  | 2356467 | Waiting on empty queue                      | NULL             | 2356467469 |         0 |             0 |
|     17 | system user     | connecting host      | NULL   | Connect | 2356460 | Waiting for source to send event            | NULL             | 2356459985 |         0 |             0 |
|     18 | system user     |                      | NULL   | Query   |      99 | Waiting for dependent transaction to commit | NULL             |      99081 |         0 |             0 |
|     19 | system user     |                      | fcmark | Query   |     697 | Applying batch of row changes (delete)      | NULL             |      32977 |         0 |             0 |
|     20 | system user     |                      | NULL   | Query   |    3244 | Waiting for an event from Coordinator       | NULL             |    3242579 |         0 |             0 |
|     21 | system user     |                      | NULL   | Connect | 2356460 | Waiting for an event from Coordinator       | NULL             | 2356459981 |         0 |             0 |
|     22 | system user     |                      | NULL   | Connect | 2356460 | Waiting for an event from Coordinator       | NULL             | 2356459980 |         0 |             0 |
| 540493 | greatsql         | 172.17.136.93:34298  | NULL   | Sleep   |      83 |                                             | NULL             |      83365 |         0 |             0 |
| 540593 | greatsql         | 172.17.139.230:51514 | NULL   | Query   |       0 | init                                        | show processlist |          0 |         0 |             0 |
| 540660 | greatsql         | 172.17.136.93:46212  | NULL   | Sleep   |     383 |                                             | NULL             |     383304 |         0 |             0 |
| 540730 | greatsql         | 172.17.136.93:51128  | NULL   | Sleep   |     143 |                                             | NULL             |     143319 |         0 |             0 |
| 540758 | greatsql         | 172.17.136.93:53112  | NULL   | Sleep   |      23 |                                             | NULL             |      23205 |         0 |             0 |
| 540763 | greatsql         | 172.17.139.230:52204 | NULL   | Sleep   |       1 |                                             | NULL             |       1246 |         0 |             0 |
+--------+-----------------+----------------------+--------+---------+---------+---------------------------------------------+------------------+------------+-----------+---------------+
13 rows in set (0.00 sec)

greatsql> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 172.17.139.230
                  Master_User: greatsql
                  Master_Port: 3307
                Connect_Retry: 60
              Master_Log_File: binlog.000064
          Read_Master_Log_Pos: 714784459
               Relay_Log_File: relaylog.000189
                Relay_Log_Pos: 714314261
        Relay_Master_Log_File: binlog.000064
             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: 714314051
              Relay_Log_Space: 714784956
              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: 700
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: 1000403307
                  Master_UUID: 1d0963e9-85d9-11ef-80e1-00163e28e06a
             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: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 1d0963e9-85d9-11ef-80e1-00163e28e06a:1-133182
            Executed_Gtid_Set: 1d0963e9-85d9-11ef-80e1-00163e28e06a:1-133170
                Auto_Position: 1
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
       Master_public_key_path: 
        Get_master_public_key: 0
            Network_Namespace: 
1 row in set, 1 warning (0.00 sec)

greatsql> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 172.17.139.230
                  Master_User: greatsql
                  Master_Port: 3307
                Connect_Retry: 60
              Master_Log_File: binlog.000064
          Read_Master_Log_Pos: 714784459
               Relay_Log_File: relaylog.000189
                Relay_Log_Pos: 714314261
        Relay_Master_Log_File: binlog.000064
             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: 714314051
              Relay_Log_Space: 714784956
              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: 704
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: 1000403307
                  Master_UUID: 1d0963e9-85d9-11ef-80e1-00163e28e06a
             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: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 1d0963e9-85d9-11ef-80e1-00163e28e06a:1-133182
            Executed_Gtid_Set: 1d0963e9-85d9-11ef-80e1-00163e28e06a:1-133170
                Auto_Position: 1
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
       Master_public_key_path: 
        Get_master_public_key: 0
            Network_Namespace: 
1 row in set, 1 warning (0.00 sec)

6、分析数据

主节点操作,根据从节点观察的信息,在主节点上观察 binlog 信息,回放内容是关于 fcmark.sbtest4`` 表的多个DELETE事件,观察该表结构是无索引,并且数据量接近 1千万

greatsql> SHOW  BINLOG EVENTS IN 'binlog.000064' FROM  714314051 LIMIT 50;
+---------------+-----------+-------------+------------+-------------+------------------------------------------------------------------------+
| Log_name      | Pos       | Event_type  | Server_id  | End_log_pos | Info                                                                   |
+---------------+-----------+-------------+------------+-------------+------------------------------------------------------------------------+
| binlog.000064 | 714314051 | Gtid        | 1000403307 |   714314130 | SET @@SESSION.GTID_NEXT= '1d0963e9-85d9-11ef-80e1-00163e28e06a:133171' |
| binlog.000064 | 714314130 | Query       | 1000403307 |   714314207 | BEGIN                                                                  |
| binlog.000064 | 714314207 | Table_map   | 1000403307 |   714314274 | table_id: 207 (fcmark.sbtest4)                                         |
| binlog.000064 | 714314274 | Delete_rows | 1000403307 |   714322479 | table_id: 207                                                          |
| binlog.000064 | 714322479 | Delete_rows | 1000403307 |   714330684 | table_id: 207                                                          |
| binlog.000064 | 714330684 | Delete_rows | 1000403307 |   714338889 | table_id: 207                                                          |
| binlog.000064 | 714338889 | Delete_rows | 1000403307 |   714347094 | table_id: 207                                                          |
| binlog.000064 | 714347094 | Delete_rows | 1000403307 |   714349409 | table_id: 207 flags: STMT_END_F                                        |
| binlog.000064 | 714349409 | Xid         | 1000403307 |   714349440 | COMMIT /* xid=6241839 */                                               |
| binlog.000064 | 714349440 | Gtid        | 1000403307 |   714349519 | SET @@SESSION.GTID_NEXT= '1d0963e9-85d9-11ef-80e1-00163e28e06a:133172' |
| binlog.000064 | 714349519 | Query       | 1000403307 |   714349596 | BEGIN                                                                  |
| binlog.000064 | 714349596 | Table_map   | 1000403307 |   714349663 | table_id: 210 (fcmark.sbtest5)                                         |
| binlog.000064 | 714349663 | Delete_rows | 1000403307 |   714357868 | table_id: 210                                                          |
| binlog.000064 | 714357868 | Delete_rows | 1000403307 |   714366073 | table_id: 210                                                          |
| binlog.000064 | 714366073 | Delete_rows | 1000403307 |   714374278 | table_id: 210                                                          |
| binlog.000064 | 714374278 | Delete_rows | 1000403307 |   714382483 | table_id: 210                                                          |
| binlog.000064 | 714382483 | Delete_rows | 1000403307 |   714390118 | table_id: 210 flags: STMT_END_F                                        |
| binlog.000064 | 714390118 | Xid         | 1000403307 |   714390149 | COMMIT /* xid=6241935 */                                               |
| binlog.000064 | 714390149 | Gtid        | 1000403307 |   714390228 | SET @@SESSION.GTID_NEXT= '1d0963e9-85d9-11ef-80e1-00163e28e06a:133173' |
| binlog.000064 | 714390228 | Query       | 1000403307 |   714390305 | BEGIN                                                                  |
| binlog.000064 | 714390305 | Table_map   | 1000403307 |   714390372 | table_id: 198 (fcmark.sbtest1)                                         |
| binlog.000064 | 714390372 | Delete_rows | 1000403307 |   714398577 | table_id: 198                                                          |
| binlog.000064 | 714398577 | Delete_rows | 1000403307 |   714406782 | table_id: 198                                                          |
| binlog.000064 | 714406782 | Delete_rows | 1000403307 |   714414987 | table_id: 198                                                          |
| binlog.000064 | 714414987 | Delete_rows | 1000403307 |   714423192 | table_id: 198                                                          |
| binlog.000064 | 714423192 | Delete_rows | 1000403307 |   714425127 | table_id: 198 flags: STMT_END_F                                        |
| binlog.000064 | 714425127 | Xid         | 1000403307 |   714425158 | COMMIT /* xid=6242038 */                                               |
| binlog.000064 | 714425158 | Gtid        | 1000403307 |   714425237 | SET @@SESSION.GTID_NEXT= '1d0963e9-85d9-11ef-80e1-00163e28e06a:133174' |
| binlog.000064 | 714425237 | Query       | 1000403307 |   714425314 | BEGIN                                                                  |
| binlog.000064 | 714425314 | Table_map   | 1000403307 |   714425381 | table_id: 201 (fcmark.sbtest2)                                         |
| binlog.000064 | 714425381 | Delete_rows | 1000403307 |   714433586 | table_id: 201                                                          |
| binlog.000064 | 714433586 | Delete_rows | 1000403307 |   714441791 | table_id: 201                                                          |
| binlog.000064 | 714441791 | Delete_rows | 1000403307 |   714449996 | table_id: 201                                                          |
| binlog.000064 | 714449996 | Delete_rows | 1000403307 |   714458201 | table_id: 201                                                          |
| binlog.000064 | 714458201 | Delete_rows | 1000403307 |   714462226 | table_id: 201 flags: STMT_END_F                                        |
| binlog.000064 | 714462226 | Xid         | 1000403307 |   714462257 | COMMIT /* xid=6242139 */                                               |
| binlog.000064 | 714462257 | Gtid        | 1000403307 |   714462336 | SET @@SESSION.GTID_NEXT= '1d0963e9-85d9-11ef-80e1-00163e28e06a:133175' |
| binlog.000064 | 714462336 | Query       | 1000403307 |   714462413 | BEGIN                                                                  |
| binlog.000064 | 714462413 | Table_map   | 1000403307 |   714462480 | table_id: 204 (fcmark.sbtest3)                                         |
| binlog.000064 | 714462480 | Delete_rows | 1000403307 |   714470685 | table_id: 204                                                          |
| binlog.000064 | 714470685 | Delete_rows | 1000403307 |   714478890 | table_id: 204                                                          |
| binlog.000064 | 714478890 | Delete_rows | 1000403307 |   714487095 | table_id: 204                                                          |
| binlog.000064 | 714487095 | Delete_rows | 1000403307 |   714495300 | table_id: 204                                                          |
| binlog.000064 | 714495300 | Delete_rows | 1000403307 |   714503505 | table_id: 204 flags: STMT_END_F                                        |
| binlog.000064 | 714503505 | Xid         | 1000403307 |   714503536 | COMMIT /* xid=6242232 */                                               |
| binlog.000064 | 714503536 | Gtid        | 1000403307 |   714503615 | SET @@SESSION.GTID_NEXT= '1d0963e9-85d9-11ef-80e1-00163e28e06a:133176' |
| binlog.000064 | 714503615 | Query       | 1000403307 |   714503692 | BEGIN                                                                  |
| binlog.000064 | 714503692 | Table_map   | 1000403307 |   714503759 | table_id: 207 (fcmark.sbtest4)                                         |
| binlog.000064 | 714503759 | Delete_rows | 1000403307 |   714511964 | table_id: 207                                                          |
| binlog.000064 | 714511964 | Delete_rows | 1000403307 |   714520169 | table_id: 207                                                          |
+---------------+-----------+-------------+------------+-------------+------------------------------------------------------------------------+
50 rows in set (0.00 sec)

greatsql> SHOW CREATE TABLE  fcmark.sbtest4\G
*************************** 1. row ***************************
       Table: sbtest4
Create Table: CREATE TABLE `sbtest4` (
  `id` int NOT NULL,
  `k` int NOT NULL DEFAULT '0',
  `c` char(120) NOT NULL DEFAULT '',
  `pad` char(60) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

greatsql>SELECT  count(1) FROM fcmark.sbtest4;
+----------+
| count(1) |
+----------+
|  9999367 |
+----------+
1 row in set (11.35 sec)

四、总结

使用SHOW PROCESSLIST和SHOW SLAVE STATUS观察是数据库正在回放数据,找到正在回放的主库的binlog位点以及正在回放的GTID,在主库上使用 SHOW BINLOG EVENTS IN binlog文件 FROM 位点 LIMIT 步长,来找到对应的表结构和事件类型,进而观察表结构,该表无索引且数据量大,所以导致从库回放的时候比较慢,至于处理办法,可以临时KILL 掉回放线程,然后加上索引,在重启回放线程,具体细节就不详细展开了。

MySQL面试高频50问与索引调优实战指南 在数据库工程师的日常开发与面试准备中,索引原理、执行计划与慢查询优化始终是绕不开的核心能力。理解B+树、聚簇索引与二级索引的差异,掌握覆盖索引、索引下推等优化手段,能显著提升SQL查询性能。通过EXPLAIN分析执行计划,结合慢查询日志定位瓶颈,是排查性能问题的标准路径。从事务隔离级别、MVCC快照读,到锁机制与死锁排查,再到主从复制、表设计与批量处理,系统梳理MySQL高频考点,并以10万行订单数据实战演示索引失效、深分页优化等场景,为后端求职者提供可执行的复习路线,也为开发者提供工程落地的调优方法。 阅读详情

相关推荐

网易校招数据库运维笔试全解析:从Linux到高可用架构

数据库运维的日常工作中,数据库增删改查和linux常用命令大全是最基本也最关键的技能,只有扎实掌握这些基础操作,才能应对复杂多变的线上问题。深入理解MySQL主从复制原理、事务隔离级别与锁机制,则能帮助DBA快速定位并解决数据库死锁等高频故障。备份恢复策略与高可用架构设计,更是保障数据安全与业务连续性的核心能力。本文以网易2018校园招聘数据库运维工程师笔试卷为蓝本,系统拆解Linux命令、SQL调优、主从延迟排查、备份恢复及高可用方案选型等考点,并结合实际生产场景展示完整的排查思路,帮助备考者构建从基础操

weixin_34090562的博客 497

108.mysql8.0.34-GTID模式下主库取消长事务&从库遇到长事务夯死

主库需要给表建立主键或者索引,或者如果表比较大时可以对其分区,防止主库执行大事务,并未结束,而SQL传输到从库,导致从库夯死的情况发送,如果有这类情况发送,需要人工处理该夯死问题。在这个GTID的基础上加1;2.跳过该DELETE大事务对应的GTID。1.有GTID模式下从库不同步修复。

weixin_43346403的博客 1045

DBA校招笔试核心考点解析:从索引原理到高可用架构

数据库系统是现代互联网应用的基石,而DBA则是保障数据库稳定高效运行的关键角色。理解索引、事务、锁机制等核心概念,是深入掌握数据库原理的起点。以MySQL为例,其InnoDB存储引擎通过B+树实现高效查询,通过MVCC与redo/undo log保障事务的ACID特性。掌握SQL执行计划与慢查询优化,能显著提升系统性能。在高并发业务场景下,主从复制、读写分离以及分库分表等架构设计成为必备技能。本文以网易校招DBA笔试试卷为线索,系统梳理了数据库管理工程师笔试的核心知识点与解题思路,帮助求职者构建系统性知识框

weixin_33800463的博客 1041

一则 MySQL 从节点 hung 死问题分析

综合以上分析过程,导致此次故障的根本原因还是在于数据库的 Redo 配置参数过小,在问题时段从节点的压力下,Redo 的使用率过高,导致 InnoDB 无法完成检查点。并进一步导致从节点的 worker 线程在执行事务时,检查 Redo Log 是否存在有剩余 Log 文件时,而发生等待。当前一个 worker 线程执行事务挂起后,由于从节点采用 MTS,且,因此其它 worker 线程需要等待之前的事务提交,最终导致所有 worker 线程挂起。

ActionTech的博客 1245

图解八股:从死记硬背到构建技术知识地图的进阶指南

技术面试是每个开发者成长的必经关卡,而面试中常被提及的“八股”并非单纯的背诵题,它实际上是一张浓缩的技术知识地图。理解这一点,就能将零散的知识点串联成体系。图解作为一种高效的认知工具,能够将抽象的文字描述转化为直观的结构与流程,帮助学习者建立心智模型,快速掌握复杂机制,如JVM内存布局、TCP状态流转、Redis持久化原理等。无论是Java后端、C++底层,还是Docker云原生、嵌入式FPGA,图解都能显著降低理解门槛,提升记忆效率。结合费曼学习法,通过“看别人的图”到“画自己的图”,再辅以主动输出和代码

weixin_33634886的博客 249

Keil5调试遇坑记:手把手解决J-Link驱动与固件版本冲突(附老版本驱动包)

本文详细解析了Keil5与J-Link调试器版本冲突问题,特别是当出现'The connected J-Link is defective'警告时的解决方案。通过对比升级固件与降级驱动的优缺点,提供了详细的J-Link驱动降级操作指南,包括获取老版本驱动、替换步骤及常见问题排查,帮助开发者高效解决这一常见调试障碍。

metaverse5vr的博客 107

MySQL 主从同步延迟排查Slave_SQL_Running_State: Waiting for dependent transaction to commit

Slave_SQL_Running_State: Waiting for dependent transaction to commit

eagle89的专栏 2678

MOSFET高频响应实战:如何用LTspice仿真内部电容效应(附模型文件)

本文深入解析MOSFET高频响应中的内部电容效应,通过LTspice仿真工具详细展示如何提取模型参数并优化高频特性。从栅极相关电容到结电容的物理本质,再到实战案例中的开关损耗分析和频率响应扫描,提供全面的设计优化方法,帮助工程师有效应对高速开关电路中的电容挑战。

weixin_33725722的博客 390

mysql主从延时处理

Slave_SQL_Running_State: Waiting for dependent transaction to commit 或 Slave_SQL_Running_State: Waiting for Slave Worker queue 或 Slave_SQL_Running_State: Waiting for Slave Workers to free pending events

lihengfang的专栏 2413

网络流量监测技术

NetFlow是Cisco公司提出的网络数据包交换技术,该技术首先被用于网络设备对数据交换进行加速,并可同步实现对高速转发的IP数据流(Flow)进行测量和统计。  随着宽带互联网在中国 的迅速发展,全国各大电信运营商的网络规模都在不断扩张,网络结构日渐复杂,网络业务日趋丰富,网络流量高速增长。电信运营商需要通过可靠、有效的网络业 务流量监测系统对其网络以及网络所承载的各类业务进行及时、准

红杉树(ecitnet)的博客 5539

从“要啥”到“咋测”:手把手拆解Aspice SWE.1需求分析,为你的车载/嵌入式项目避坑

本文深入解析Aspice SWE.1需求分析在车载/嵌入式项目中的关键作用,帮助开发者将模糊的系统需求转化为可执行、可验证的软件需求。通过实战案例和结构化方法,详细拆解功能需求原子化、非功能需求工程化表达等核心技巧,为项目避坑提供实用指南。

weixin_31682031的博客 259

MySQL8.0真正的并行复制writeset

MySQL的主从架构依赖于 MySQL Binlog 功能, Master节点上产生Binlog并将Binlog写入到Binlog文件中。Slave节点上启动两个线程:一个IO线程,从MySQL上捞取Binlog日志并写入到本地的RelayLog日志;另一个SQL线程,不断的从RelayLog日志中读取日志,并解析执行。这样通过在主机和从机上增加几个文件的顺序读写操作,就可以保证所有在主机上执行过的SQL语句都在从机上一摸一样的执行过一遍。

不积跬步,无以至千里;不积小流,无以成江海。 2071

原神真端,原神服务端,虚拟机启动部署傻瓜式教学

没玩过抽卡 游戏想体验一下抽卡的感觉,听说原神有真端了,所以弄一个局域网的服务体验一下,这里要感谢一些服务端的分享者。

azyouyouyou的博客 1万+

主从复制延迟的原因有哪些?如何监控和优化?

主从复制延迟问题分析与优化指南 摘要: 主从复制延迟主要由三方面因素引起:主库端(高吞吐量、大事务、Binlog格式)、网络端(带宽不足、质量差)和从库端(单线程回放、硬件差、无主键表等)。监控可通过SHOW SLAVE STATUS和pt-heartbeat工具实现,重点关注位点差分判断瓶颈位置。优化方案包括:开启并行复制(5.7+用LOGICAL_CLOCK,8.0用WRITESET)、提升从库硬件、拆分大事务、强制主键索引、设置从库只读等。80%的延迟问题集中在从库端,解决核心在于提升从库消费Binl

zr333133的博客 294

uds协议之can总线程序升级

uds协议简介 如何利用uds协议升级 升级流程 uds服务类型介绍

fangye945a的博客 1万+

激光可燃气体传感器:核心技术环节分析

激光可燃气体传感器核心技术涵盖七个维度:1)TDLAS光谱吸收与调制技术(检测下限ppm级);2)DFB激光器与双闭环温控系统(波长稳定性±0.0036nm);3)微弱信号处理技术(信噪比提升60dB);4)环境补偿算法(温压补偿误差<±1%);5)本质安全防爆设计(ExiaIICT4Ga等级);6)智能边缘计算(STM32L476芯片);7)多重性能验证(响应时间<1秒)。通过微型化、多气体检测等创新,该技术已在工业安全等领域替代传统方案,实现高精度检测。(149字)

上市公司前技术负责人,20 年软硬件深耕 + 百人研发团队管理经验,名校理工科背景加持。从技术攻坚到团队掌舵,沉淀海量项目实战与管理心得,专注分享软硬件干货、疑难问题解决方案,既是靠谱知识传播者,也盼链接优质项目共成长。 1042

一次MySQL主从延迟引发的多级缓存穿透故障:从根因定位到架构加固的完整复盘

微服务架构中,任何一层看似合理的设计都可能成为雪崩效应的放大器。订单服务的缓存一致性校验逻辑在正常场景下是正确的设计,但在主从延迟的场景下变成了系统崩溃的催化剂。复盘的三个核心改进方向是:建立全链路的延迟感知和熔断机制,而不是依赖单一组件的可靠性;对缓存失效操作实施"冷却期"限制,避免批量操作引发次生灾害;建立能够在秒级时间内完成缓存恢复的预热能力,降低对数据库的直接依赖。故障不可避免,但架构的容灾能力决定了故障的影响范围——这也正是运维工程的核心价值所在。

qwe0iop0的博客 4608

hive get_json_object解析json结果为null咋办?

最近一位开发的同学在使用get_json_object函数对json数据解析的时候,出现了结果为null的问题,问题原因是sql语法导致的,那么今天就来详细介绍一下解析json函数的用法!最后还是提醒小伙伴们,在开发过程中,一定要注意sql语法格式的书写,避免一些意想不到的结果!

笑看风云路的博客 2308

AI诊断与内核优化:根治MySQL主从复制延迟的实战方案

数据库主从复制是构建高可用、可扩展架构的核心技术,其原理是通过二进制日志将主库的数据变更同步到从库,实现读写分离与数据冗余。然而,复制延迟问题会直接导致从库数据陈旧,影响业务一致性与故障切换可靠性。传统监控方式难以快速定位根因,而结合AI智能诊断与深度内核优化,则能系统性解决这一顽疾。AI诊断系统通过多维数据采集与特征工程,利用异常检测与根因分析算法,精准识别出网络抖动、磁盘I/O瓶颈或大事务等延迟源头,并生成可行动的优化建议。在此基础上,像AliSQL这样的定制化内核,通过基于行锁冲突检测的并行复制、bi

weixin_34268310的博客 274

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

MySQL 主从延迟根因诊断法:全链路监控、根因定位与优化实战

MySQL主从复制延迟是影响业务稳定性的关键问题,涉及网络、资源、配置、设计和数据等多方面因素。本文系统分析了延迟的成因与影响,提出了五层诊断模型,并给出针对性解决方案:通过并行复制技术破解单线程瓶颈、优化配置参数、拆分大事务等。同时强调建立全链路监控体系,结合GTID复制和智能流量调度,实现毫秒级延迟控制。文章还分享了电商秒杀、跨洋网络等典型案例,指出预防性架构设计和标准化规范的重要性,为构建高可用的MySQL集群提供系统化指导。

ting9452000的专栏 551

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

MySQL-BinLog是如何做到数据同步的

BinLog 数据同步 =主库记录变更日志(ROW 格式最佳)→ 从库拉取并按顺序回放 → 通过 GTID 或位点定位进度,从而实现最终一致的副本。t=Q239人工智能教程​​​​https://www.captainai.net/troubleshooter。

了解➔熟悉➔掌握➔精通 493

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

网易校招数据库管理工程师笔试备考:SQL、事务与索引优化全攻略

数据库管理工程师是支撑业务数据底座的关键角色,不仅需要扎实的SQL基本功,还要深入理解事务、锁、索引与高可用架构。从数据库增删改查到多表关联、窗口函数,从ACID机制到MVCC与死锁分析,从索引失效场景到执行计划解读,每一个知识点都直接关系到线上系统的稳定性与性能表现。在云原生与国产数据库生态快速演进的背景下,掌握主从复制、备份恢复与容量规划等工程实践,已成为数据库岗位候选人的核心竞争力。无论是准备校招笔试还是日常开发中的慢SQL治理,理解数据库底层原理并具备手写SQL与场景分析能力,都能让技术人走得更远。

weixin_29231027的博客 351

网易互娱运维开发笔试解析:Linux、MySQL与故障排查

系统稳定性是互联网业务的基石,而运维开发正是保障这一基石的关键角色。从Linux基础命令到网络协议分析,从MySQL主从复制到Redis缓存策略,这些底层技术构成了排查线上故障的核心能力。理解负载均衡、健康检查、发布回滚等原理,能够帮助工程师在高并发场景下快速定位问题、设计高可用架构。本文以一份2015年网易互娱运维开发岗笔试真题为线索,结合游戏业务真实场景,拆解Linux、数据库、脚本自动化等高频考点,剖析题目背后的工程判断与排查思维,为准备运维开发、SRE岗位的读者提供实战参考。

weixin_26905423的博客 245

《Java 100 天进阶之路》第89篇:MySQL面试压轴题(2026版)

摘要:覆盖存储引擎、事务MVCC、锁机制、SQL优化与工具链、高可用架构、分库分表等 45+ 道高频面试题。深度剖析 InnoDB vs MyISAM、MVCC 原理、死锁排查、深分页优化,并新增 AI 辅助慢 SQL 诊断、Optimizer Trace / 直方图调优、云原生 Serverless 数据库选型 等 2026 前沿视角。每个考点配套标准话术 + 加分回答 + 实战经验。面试突击,这一篇就够了。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 4878

Redis知识点总结

一. 概述 ¥1. 什么是Redis?Redis的特点 Redis是一个高性能非关系型(NoSQL)的键值对数据库。 Redis的特点: 数据均存放在内存中,读写性能优异 所有的操作都是原子操作,保证线程安全 支持数据持久化,支持事务,数据结构丰富,支持主从复制 ¥2. Redis的应用场景 高速缓存,计数器,会话缓存(分布式Session),全页缓存 消息队列(发布/订阅功能):List 通过 lpush 和 rpop 写入和读取消息 分布式锁(SETNX 命令, RedLock ) Set 可以实

wanger61的博客 484

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

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

qq_19676401的博客 4345
上一篇: 【GreatSQL优化器-13】直方图
下一篇: 【GreatSQL优化器-14】直方图应用
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值