我正在尝试弄清楚如何为我的服务器计算正确的 gcache,然后偶然发现了以下帖子,讨论了如何做到这一点:
https://www.percona.com/blog/2014/09/08/calculate-correct-size-percona-xtradb-clusters-gcache/
在帖子中,讨论了执行以下操作来获取计算所需的值:
show global status like 'wsrep_received_bytes';
show global status like 'wsrep_replicated_bytes';
select sleep(60);
show global status like 'wsrep_received_bytes';
show global status like 'wsrep_replicated_bytes';
我的问题是,在生产中运行 select sleep(60) 会阻止 MySQL 上的所有读取(通过保持 mysqld 线程繁忙)吗?如何计算生产中的最佳 gcache 值?
答案1
MySQL 是多线程的。 sleep(60) 将占用一个连接(也可能占用一个线程),但不会阻塞整个服务器。最大连接数和并发运行线程数在 中设置my.cnf
。 (在生产环境中,你可能也有ProxySQL等设置)。
如果您担心连接中断,避免这种情况的简单方法是断开连接、休眠并重新连接。例如,在 shell 中:
#!/bin/sh
mysql -e "show global status like 'wsrep_received_bytes'; show global status like 'wsrep_replicated_bytes';"
sleep 60
mysql -e "show global status like 'wsrep_received_bytes'; show global status like 'wsrep_replicated_bytes';"
大多数编程/脚本语言都可以完成类似的操作。
警告:在尝试调整 MySQL 之前,您似乎需要了解更多有关 MySQL 的知识。尤其是在生产环境中。就此而言,您应该有一个测试(甚至开发!)环境,您可以在其中尝试类似的东西sleep
并找出它的作用。