gpt4 book ai didi

MySQL:如何避免 mysql 积压?

转载 作者:行者123 更新时间:2023-11-29 08:38:17 25 4
gpt4 key购买 nike

我正在我的从机上运行此查询。

查询:

从审核中选择 ID,其中 app='accounts'

解释输出

    +----+-------------+-----------------+------+---------------+------+---------+------+-----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------------+------+---------------+------+---------+------+-----------+-------------+
| 1 | SIMPLE | IAMAccountAudit | ALL | NULL | NULL | NULL | NULL | 155658522 | Using where |
+----+-------------+-----------------+------+---------------+------+---------+------+-----------+-------------+

执行后,我的从机在主机后面运行。

    *************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 182.31.251.94
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: bin.001487
Read_Master_Log_Pos: 2967065
Relay_Log_File: 172-relay-bin.004312
Relay_Log_Pos: 43303861
Relay_Master_Log_File: bin.001486
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: 43303721
Relay_Log_Space: 55397036
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: 365
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: 1302078

还在不断增加。

如何避免 mysql 积压? .

最佳答案

如果我有一个可以使用的表模式,将会有所帮助。但是,据我所知,您的查询没有使用索引,而是从第一条记录到最后一条记录依次读取表。

由于查询必须检查大约 155,658,522 或 1.55 亿行,因此将导致服务器资源耗尽。由于查询在您正在查询的列上没有适当的索引(解释输出中的 key= null),因此行将获得对其一一发出的读锁定。

当此读取发生时,MySQL 可能会阻止复制事件,即阻止对正在读取的行的更新。然后,MySQL 会将这些更新排队,因为它们无法完成。这个问题是由于服务器的 ACID 合规性而不是线程等造成的。由于我没有诸如引擎之类的表信息,这充其量只是一个有根据的猜测。

建议:

  1. 为表格上的应用列建立索引,以便您更快地进行选择。通过应用程序列上的索引,MySQL 将对表执行 B 树搜索,而不是顺序搜索。您的查询将运行得更快,发出更少的锁,因此它会更快且更轻量级。缺点是它会稍微延迟该表的更新和插入,因为需要维护一个额外的索引。
  2. 除非您需要纳秒级实时复制,否则请保持系统不变。请记住,如果对实时数据没有要求,复制落后并不是问题。复制失败的情况要糟糕得多。

希望这能有所帮助。

关于MySQL:如何避免 mysql 积压?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14577694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com