我们有一台主服务器和两台VIP从数据库服务器。我们在master上将列的数据类型从VARCHAR(255)更改为TEXT。
该应用程序当前配置为仅使用主设备进行写入操作,而配置了从设备进行读取操作。
使用ALTER TABLE命令更改主服务器上的数据类型后,从服务器将无响应。
我们正在使用Mariadb 10.0
[过程信息]
ID用户主机Db命令时间(秒)状态信息
-------------------------------------------------- ---------------------
203739 repl slave1 Binlog Dump 75,143,121主机已将所有Binlog发送给从机;等待binlog更新
203740 repl slave2 Binlog Dump 75,143,121主机已将所有Binlog发送给从机;等待binlog更新
从属实例由于查询缓慢而变得非常慢。
会话数:1590
thread_pool_max_thread = 500
当前值= 648
在主服务器上执行ALTER TABLE之后,它正在复制到从服务器上,与此同时,从服务器上的会话数也迅速增加。
我认为由于查询速度慢,奴隶变得反应迟钝。
但是我不知道为什么这个查询变得如此缓慢,而奴隶却没有响应。
DBA的说法是,在执行ANALYZE TABLE命令之后,该问题已解决。
但是我不明白为什么会这样,因为ANALYZE TABLE仅更新统计信息。
如果有人对此事发表评论,这将很有帮助?
将来如何避免此类问题。
最佳答案
在一种较小的情况下,TEXT
比VARCHAR
慢。当SELECT
需要构建临时表(由于GROUP BY
或ORDER BY
经常用于排序)时,它首先尝试构建MEMORY
表。但是,TEXT
和BLOB
阻止它使用它,因此它改用MyISAM
。这比较慢(但是可以完成工作)。
我说这是“次要情况”,因为用户很少用“非常慢”和“变得无反应”之类的短语来识别它。我猜想SELECT
的运行速度可能是它的两倍。
同样,ANALYZE TABLE
讨论也没有成功。同样,这可能是巧合,而不是因果关系。
因此,对TEXT
的更改可能是“红色鲱鱼”。取而代之的是,让我们通过使用slowlog发现正在变慢的东西。请参阅this了解我的工作方式。
关于mysql - 复制问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47710557/