ob集群视图查询数据未正常返回

【 使用环境 】生产环境
【 OB or 其他组件 】OB
【 使用版本 】3.1.2
【问题描述】

我们有一个下面结构的视图:

MySQL [(none)]> show create table market_db_v3.impl_volatility_quote_curve_and_surface \G
*************************** 1. row ***************************
                View: impl_volatility_quote_curve_and_surface
         Create View: CREATE VIEW `impl_volatility_quote_curve_and_surface` AS select `surf`.`id` AS `id`,`ivms`.`id` AS `model_surf_id`,`surf`.`instr` AS `instr`,`surf`.`snapshot_ts` AS `snapshot_ts`,`cbs`.`name` AS `snapshot_config`,`cifd`.`name` AS `impl_fwd_disc_config`,`civm`.`name` AS `impl_vol_model_config`,`ifdcp`.`discount` AS `impl_discount`,`ifdcp`.`impl_fwd` AS `impl_fwd`,`ivqg`.`expire_date` AS `expire_date`,`ivqg`.`exercise_price` AS `exercise_price`,`ivqg`.`is_call` AS `is_call`,`ivqg`.`quote_instr` AS `quote_instr`,`ivqg`.`ts` AS `ts`,`ivqg`.`bid_price` AS `bid_price`,`ivqg`.`ask_price` AS `ask_price`,`ivqg`.`bid_vol` AS `bid_vol`,`ivqg`.`ask_vol` AS `ask_vol`,`ivqg`.`bid_delta` AS `bid_delta`,`ivqg`.`ask_delta` AS `ask_delta`,`ivqg`.`bid_vega` AS `bid_vega`,`ivqg`.`ask_vega` AS `ask_vega`,`ivqg`.`bid_theta` AS `bid_theta`,`ivqg`.`ask_theta` AS `ask_theta`,`ivqg`.`bid_gamma` AS `bid_gamma`,`ivqg`.`ask_gamma` AS `ask_gamma`,`ivqg`.`bid_vanna` AS `bid_vanna`,`ivqg`.`ask_vanna` AS `ask_vanna`,`ivmg`.`fair_price` AS `fair_price`,`ivmg`.`fair_vol` AS `fair_vol`,`ivmg`.`fair_delta` AS `fair_delta`,`ivmg`.`fair_vega` AS `fair_vega`,`ivmg`.`fair_theta` AS `fair_theta`,`ivmg`.`fair_gamma` AS `fair_gamma`,`ivmg`.`fair_vanna` AS `fair_vanna` from ((((((((`market_db_v3`.`impl_volatility_quote_surface` `surf` join `market_db_v3`.`impl_volatility_quote_greeks` `ivqg` on ((`surf`.`id` = `ivqg`.`impl_volatility_quote_surface_id`))) join `market_db_v3`.`impl_fwd_discount_curve` `ifdc` on ((`surf`.`impl_fwd_discount_curve_id` = `ifdc`.`id`))) join `config_db_v3`.`config_book_snapshot` `cbs` on ((`ifdc`.`config_book_snapshot_id` = `cbs`.`id`))) join `config_db_v3`.`config_impl_fwd_discount` `cifd` on ((`ifdc`.`config_impl_fwd_discount_id` = `cifd`.`id`))) join `model_db_v3`.`impl_volatility_model_surface` `ivms` on ((`surf`.`id` = `ivms`.`impl_volatility_quote_surface_id`))) join `config_db_v3`.`config_implied_vol_model` `civm` on ((`ivms`.`impl_volatility_model_config_id` = `civm`.`id`))) join `model_db_v3`.`impl_volatility_model_greeks` `ivmg` on ((`ivqg`.`id` = `ivmg`.`impl_volatility_quote_id`))) join `market_db_v3`.`impl_fwd_discount_curve_point` `ifdcp` on ((`ifdc`.`id` = `ifdcp`.`impl_fwd_discount_curve_id`) and (`ifdcp`.`expire_date` = `ivqg`.`expire_date`)))
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
1 row in set (0.01 sec)

基表的数据在很久之前就已经写入好了。

但是在今天查询时发现有些sql查出来的并没有数据,比如:

上面这sql除了snapshot_ts条件不一样之外其他都一样。

上面snapshot_ts <= ‘2020-07-07 09 :44:40’ 和snapshot_ts <= '2020-07-07 09 :44:45’当时12:53查出来没有数据,实际上基表都是有数据的。我们现在查也是有数据。
2020-07-07 09 :44:50 查到数据了,如上襦return_row:1 所示。

在 2020-07-07 09 :44:45 到 2020-07-07 09 :44:50 之间应用人员一直在debug他们的查询为啥没有查到数据,可能在后台手动运行了一下对应的select sql,在2020-07-07 09 :44:45之后的sql就全都可以正常查出数据来了。因为之前发生过,后台手动select 一下试图查询就正常了,不知道select是不是会触发映射操作?

他们这些SQL正常情况下是使用prepare statement 写入不同的条件然后一起push过去查询的。
这个sql作用很简单limit 1是为了用来判断是否查询为空。

我把这三个sql中间所有的日志抽出来了,放附件了。
excep.log (5.5 MB)
请社区帮忙看看是什么原因?

不胜感激。

  1. 查询视图就是查询基表,没有中间层;
  2. 可以确认下数据确实提交了
  3. 确认下是否存在弱一致性查询

都是同一个流程,查询sql都是一模一样的,就条件不一样。
数据的话应用应该几个月前就提交了,有什么办法查到数据提交时间吗? 表里面没有字段可以表征数据更新时间。

日志里面能看出啥来吗?

数据读写都是在同一个节点进行,应该不存在一致性的问题吧

没有记录每个数据提交的时间。

日志并没有特殊的信息

都在同一个节点,不会存在弱一致性读的问题。