我试图弄清楚如何为我的服务器计算正确的 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 值?
你的第一个问题的答案是否定的
当您执行休眠功能时,它只会阻止当前会话,而不会与其他会话相关。所以所有其他会话都可以正常工作
但是关于你的第二个问题。
注意:gcache 仅用于以循环缓冲区样式存储 writesets。
通常一个服务有一个用户与之有巨大交互的高峰时间。
因此,在系统的高峰时间执行您在问题中所说的那些查询。
之后使用此公式查找每分钟的 writesets 数据字节数
好了,现在您可以决定要将更改保存到服务器的时间了。
例如,如果 writesets 数据为每分钟 10 MB,并且您计划将更改数据保留为 24 小时,则需要将 gcache 大小设置为 14400 MB。
注意:在我看来,为了更加确定,每分钟增加 20% 的 writesets 数据字节数。在这种情况下,例如考虑 12 MB 而不是 10 MB。