美文网首页
Clickhouse同一条sql执行结果不同

Clickhouse同一条sql执行结果不同

作者: 清蒸三文鱼_ | 来源:发表于2024-06-06 15:33 被阅读0次

描述和解决

  • 环境
    Distributed + MergeTree, 2分片2副本, 4节点
  • 问题
    数据插入到ck, 每次查询结果不大一样
  • 步骤
  1. 查看所有时钟是否同步, 经排查有一天机器的时间在2020年, 修正后重启, 问题依旧存在
  2. 检查/etc/metrika.xml配置, internal_replication是否设置为false, 改完后数据查询正常

    官方文档来看这个值的意思是是否启用内部布置, 如果配置了true, 那么写入数据时只会同步到第一个健康的副本, 不会同步所有副本, 那么就会可能导致数据不一致

配置详解

四种复制模式

  1. 非复制表,internal_replication=false。写入单机表时,不同服务器查询结果不同;插入到分布式表中的数据被插入到两个本地表中,如果在插入期间没有问题,则两个本地表上的数据保持同步。我们称之为“穷人的复制”,因为复制在网络出现问题的情况下容易发生分歧,没有一个简单的方法来确定哪一个是正确的复制。
  2. 非复制表,internal_replication=true。数据只被插入到一个本地表中,但没有任何机制可以将它转移到另一个表中。因此,在不同主机上的本地表看到了不同的数据,查询分布式表时会出现非预期的数据。显然,这是配置ClickHouse集群的一种不正确的方法。
  3. 复制表,internal_replication=true。插入到分布式表中的数据仅插入到其中一个本地表中,但通过复制机制传输到另一个主机上的表中。因此两个本地表上的数据保持同步。这是官方推荐配置。
  4. 复制表,internal_replication=false。数据被插入到两个本地表中,但同时复制表的机制保证重复数据会被删除。数据会从插入的第一个节点复制到其它的节点。其它节点拿到数据后如果发现数据重复,数据会被丢弃。这种情况下,虽然复制保持同步,没有错误发生。但由于不断的重复复制流,会导致写入性能明显的下降。所以这种配置实际应该是避免的。

相关文章

  • mysql : float,double,decimal

    执行一条sql 执行结果如下: sql 语句里面是880960.08,插入的结果却不同???让我们带着疑问往下看!...

  • clickhouse-client docker 执行sql语

    执行sql语句 其中clickhouse-server是本地docker下clickhouse服务名称 批量导入数...

  • MySQL查询缓存命令大全

    MySQL查询缓存功能对一条SQL查询语句第一次执行时,会将其结果缓存起来。以后执行同一条语查询句时(SQL字符串...

  • Mysql使用强制索引

    问题 生成环境,同一条sql在不同的从库执行,产生的执行计划不同,一个使用了索引,一个未使用索引 原因分析 分析是...

  • clickhouse-sql 记录常用操作

    clickhouse-sql 记录常用操作 sql 相关 主要记录 mysql 导入 clickhouse 过程其...

  • mysql基础——sql 执行流程

    内容 一条sql查询语句如何执行 一条sql更新语句如何执行 一 1条sql查询语句如何执行 1.1 执行流程例如...

  • MySQL 子查询中order by不生效问题

    一个偶然的机会,发现一条SQL语句在不同的MySQL实例上执行得到了不同的结果。 问题描述 创建商品表produc...

  • 幻读

    什么是幻读? 在同一事务中,连续执行两次同样的SQL语句可能导致不同的结果,第二次的SQL语句可能会返回之前不存在...

  • 二级缓存

    创建两个SqlSession,获取两个mapper后,先后调用同一个方法执行同一条SQL,查看日志中输出SQL语句...

  • 数据库订正工具

    直接执行sql语句 带有返回结果的sql语句执行

网友评论

      本文标题:Clickhouse同一条sql执行结果不同

      本文链接:https://www.haomeiwen.com/subject/vrwpqjtx.html