[CP] fix plan feek back bug
This commit is contained in:
		@ -1068,9 +1068,12 @@ int ObOperator::setup_op_feedback_info()
 | 
			
		||||
    int64_t &total_db_time = fb_info.get_total_db_time();
 | 
			
		||||
    total_db_time +=  op_monitor_info_.db_time_;
 | 
			
		||||
    if (fb_node_idx_ >= 0 && fb_node_idx_ < nodes.count()) {
 | 
			
		||||
      uint64_t cpu_khz = OBSERVER.get_cpu_frequency_khz();
 | 
			
		||||
      ObExecFeedbackNode &node = nodes.at(fb_node_idx_);
 | 
			
		||||
      node.block_time_ = op_monitor_info_.block_time_;
 | 
			
		||||
      node.block_time_ /= cpu_khz;
 | 
			
		||||
      node.db_time_ = op_monitor_info_.db_time_;
 | 
			
		||||
      node.db_time_ /= cpu_khz;
 | 
			
		||||
      node.op_close_time_ = op_monitor_info_.close_time_;
 | 
			
		||||
      node.op_first_row_time_ = op_monitor_info_.first_row_time_;
 | 
			
		||||
      node.op_last_row_time_ = op_monitor_info_.last_row_time_;
 | 
			
		||||
@ -1091,6 +1094,23 @@ int ObOperator::submit_op_monitor_node()
 | 
			
		||||
    // Reference document:
 | 
			
		||||
    op_monitor_info_.close_time_ = oceanbase::common::ObClockGenerator::getClock();
 | 
			
		||||
    ObPlanMonitorNodeList *list = MTL(ObPlanMonitorNodeList*);
 | 
			
		||||
 | 
			
		||||
    // exclude time cost in children, but px receive have no real children in exec view
 | 
			
		||||
    int64_t db_time = total_time_; // use temp var to avoid dis-order close
 | 
			
		||||
    if (!spec_.is_receive()) {
 | 
			
		||||
      for (int64_t i = 0; i < child_cnt_; i++) {
 | 
			
		||||
        db_time -= children_[i]->total_time_;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    if (db_time < 0) {
 | 
			
		||||
      db_time = 0;
 | 
			
		||||
    }
 | 
			
		||||
    // exclude io time cost
 | 
			
		||||
    // Change to divide by cpu_khz when generating the virtual table.
 | 
			
		||||
    // Otherwise, the unit of this field is inconsistent during SQL execution and after SQL execution is completed.
 | 
			
		||||
    op_monitor_info_.db_time_ = 1000 * db_time;
 | 
			
		||||
    op_monitor_info_.block_time_ = 1000 * op_monitor_info_.block_time_;
 | 
			
		||||
 | 
			
		||||
    if (list && spec_.plan_) {
 | 
			
		||||
      if (spec_.plan_->get_phy_plan_hint().monitor_
 | 
			
		||||
          || (ctx_.get_my_session()->is_user_session()
 | 
			
		||||
@ -1098,19 +1118,6 @@ int ObOperator::submit_op_monitor_node()
 | 
			
		||||
                  || (op_monitor_info_.close_time_
 | 
			
		||||
                      - ctx_.get_plan_start_time()
 | 
			
		||||
                      > MONITOR_RUNNING_TIME_THRESHOLD)))) {
 | 
			
		||||
        // exclude time cost in children, but px receive have no real children in exec view
 | 
			
		||||
        uint64_t db_time = total_time_; // use temp var to avoid dis-order close
 | 
			
		||||
        if (!spec_.is_receive()) {
 | 
			
		||||
          for (int64_t i = 0; i < child_cnt_; i++) {
 | 
			
		||||
            db_time -= children_[i]->total_time_;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        // exclude io time cost
 | 
			
		||||
        // Change to divide by cpu_khz when generating the virtual table.
 | 
			
		||||
        // Otherwise, the unit of this field is inconsistent during SQL execution and after SQL execution is completed.
 | 
			
		||||
        op_monitor_info_.db_time_ = 1000 * db_time;
 | 
			
		||||
        op_monitor_info_.block_time_ = 1000 * op_monitor_info_.block_time_;
 | 
			
		||||
 | 
			
		||||
        IGNORE_RETURN list->submit_node(op_monitor_info_);
 | 
			
		||||
        LOG_DEBUG("debug monitor", K(spec_.id_));
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user