>我有简单的主/从配置。我的两个生产机器上都有 8GB 的 RAM。我只使用主写,从只写。但是在周末,我运行了一项工作,即在主服务器上插入数据,这些数据应该复制到从属服务器上。由于我的奴隶在主人身后将近 15-16 小时,这给我的报告带来了很大的麻烦,因为我从奴隶那里阅读它,奴隶没有更新的信息。
关于这一点,我有几个疑问:
-
是否有任何合理的理由为什么应该使用slave而不是master。我师傅5分钟后就写了。并且某些作业计划从从属服务器读取。
-
我有 100GB 的表,每天在同一张桌子上插入一百条记录。所有选择和插入都发生在此表上。我选择了将数据逐年从此表分离到多个表的方法,以便优化此表,是否有任何其他方法可以优化并使该表的执行更快。
如果我留下了任何不清楚的地方,请告诉我。
以下是表格设计:
+----------------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------------+------+-----+---------------------+----------------+
| test_id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| prime_id | int(11) unsigned | NO | MUL | 0 | |
| prime2_id | int(11) unsigned | NO | MUL | 0 | |
| timestamp | datetime | NO | MUL | 0000-00-00 00:00:00 | |
| test_time | int(11) | NO | | 0 | |
| status | int(11) | NO | | 0 | |
| component | int(11) unsigned | NO | | 0 | |
| c_component | int(11) unsigned | NO | | 0 | |
| C2_component | int(11) unsigned | NO | | 0 | |
| C3_component | int(11) unsigned | NO | | 0 | |
| rt_component | int(11) unsigned | NO | | 0 | |
| code | int(11) unsigned | NO | | 0 | |
| ip | int(11) unsigned | YES | | 0 | |
| step_id | int(11) unsigned | YES | | NULL | |
+----------------+------------------+------+-----+---------------------+----------------+
This is the index information of the table:
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-------+------------+-----------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| tests | 0 | PRIMARY | 1 | test_id | A | 629448388 | NULL | NULL | | BTREE | |
| tests | 1 | ixf_prime_id | 1 | prime_id | A | 14 | NULL | NULL | | BTREE | |
| tests | 1 | ixf_prime2_id | 1 | prime2_id | A | 14 | NULL | NULL | | BTREE | |
| tests | 1 | ix_timestamp | 1 | timestamp | A | 157362097 | NULL | NULL | | BTREE | |
| tests | 1 | ix_prime_id_timestamp | 1 | prime_id | A | 14 | NULL | NULL | | BTREE | |
| tests | 1 | ix_prime_id_timestamp | 2 | timestamp | A | 629448388 | NULL | NULL | | BTREE | |
我们也有类似的情况,但是我们的奴隶有时落后于主人 3 或 4 天,而在其他时候则完全是最新的。
我们所做的是测试生成的每个页面(或计划作业的脚本)顶部的从属状态,如果"主节点后面的秒数"大于我们决定的任意数量,我们就在主服务器上触发对该页面/作业的所有查询。如果主站落后的秒数在我们允许的时间限制(通常为零)内,我们就知道向从站触发查询是安全的。
然后扩展以决定当我们有多个从属服务器时触发查询(有点像软件负载均衡器!
最终,我们重新设计了架构和插入查询,以确保从站滞后最终成为一个非常小的问题......
您可以做的一件事是尝试将插入分成较小的批次,这样单个插入不会花费太长时间,从而允许从站开始该插入,而主插件则忙于下一个插入。
希望这有帮助。
戴夫