【 使用环境 】生产环境
【 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)
请社区帮忙看看是什么原因?
不胜感激。