7.4. 测试数据库复制性能

如果集群和单个节点都健康且稳定,您可以通过查询特定的数据库变量,在复制吞吐量上运行性能基准测试。

每次查询其中一个变量时,FLUSH STATUS 命令都会重置变量值。要运行基准测试,您必须运行多个查询和分析差异。这些差异可帮助您确定正在运行的 流控制 是否影响到集群性能。

流控制是集群用来管理复制的机制。当本地 接收队列 超过特定阈值时,流控制会暂停复制,直到队列大小停机。有关 Flow Control 的更多信息,请参阅 Galera Cluster 网站上的流控制。

流程

运行以下命令并将 VARIABLE 替换为您要检查的 wsrep 数据库变量:

$ sudo docker exec galera-bundle-docker-0 sudo mysql -B --password="[MYSQL-HIERA-PASSWORD]" -e "SHOW STATUS LIKE 'VARIABLE';"

下表列出了可用于测试数据库复制性能的 wsrep 数据库变量。

表 7.3. 用于检查数据库复制性能的数据库变量

变量概述使用

wsrep_local_recv_queue_avg

最后一次查询后本地接收的 write-set 队列的平均大小。

高于 0.0 的值表示节点无法像接收 write-sets 时快速应用 write-sets,这会触发复制节流。检查 wsrep_local_recv_queue_minwsrep_local_recv_queue_max 查看这个基准的详细查看。

wsrep_local_send_queue_avg

最后一次查询后的平均发送队列长度。

值高于 0.0 表示复制节流和网络吞吐量问题的可能性较高。

wsrep_local_recv_queue_min and wsrep_local_recv_queue_max

最后一次查询后本地接收队列的最小和最大大小。

如果 wsrep_local_recv_queue_avg 的值大于 0.0,您可以检查这些变量以确定队列大小的范围。

wsrep_flow_control_paused

流控制在最后一次查询后暂停节点的时间部分。

高于 0.0 的值表示流控制暂停该节点。要确定暂停的持续时间,请在查询之间使用以秒为单位的 wsrep_flow_control_paused 值。最佳值是尽可能接近 0.0

例如:

  • 如果在最后一次查询后 wsrep_flow_control_paused 的值为 0.50 1 分钟,则 Flow Control 会暂停节点 30 秒。
  • 如果在最后一次查询后 wsrep_flow_control_paused 的值为 1.0,则 Flow Control 会暂停整个一分钟的节点。

wsrep_cert_deps_distance

可并行应用的最低和最高序列号(seqno)值之间的平均区别

如果节流和暂停,这个变量指示平均可并行应用多少个 write-sets。将该值与 wsrep_slave_threads 变量进行比较,以查看实际可同时应用了多少 write-sets。

wsrep_slave_threads

可同时应用的线程数

您可以增加这个变量的值来同时应用更多线程,这也会增加 wsrep_cert_deps_distance 的值。wsrep_slave_threads 的值不得高于节点中 CPU 内核数。

例如,如果 wsrep_cert_deps_distance 值是 20,您可以将 wsrep_slave_threads 的值从 2 增加到 4,以增加节点可以应用的写入设置量。

如果有问题的节点已经有最佳 wsrep_slave_threads 值,您可以在调查可能的连接问题时从集群中排除该节点。