TIMED_STATISTICS 设置的作用

本文探讨了Oracle数据库中Wait Event统计方式的选择及其对性能优化的重要性。通过对比TIMED_STATISTICS参数的不同设置,分析了如何根据等待事件的次数与时间来判断是否需要进行优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于这个参数,我的理解是:
oracle对wait event的统计有两种:
1、只统计wait event的等待的次数(TIMED_STATISTICS为false)
2、统计wait event的等待的时间和次数(TIMED_STATISTICS为true)
为了尽可能能获得wait event的运行情况,是要将值设置为true的。
举例来说:
一个等待事件的等待次数很多,但是实际上他的等待时间比较短,如2小时只等待了30秒,那么此事件可能根本不需要优化。
但是若一个等待事件的等待次数很少,但是其等待时间长,1小时中有45分钟在等待,那肯定是需要调查、优化的。
我将分三次发送同一个函数的代码int16_t canardHandleRxFrame(CanardInstance* ins, const CanardCANFrame* frame, uint64_t timestamp_usec) { const CanardTransferType transfer_type = extractTransferType(frame->id); const uint8_t destination_node_id = (transfer_type == CanardTransferTypeBroadcast) ? (uint8_t)CANARD_BROADCAST_NODE_ID : DEST_ID_FROM_ID(frame->id); // TODO: This function should maintain statistics of transfer errors and such. if ((frame->id & CANARD_CAN_FRAME_EFF) == 0 || (frame->id & CANARD_CAN_FRAME_RTR) != 0 || (frame->id & CANARD_CAN_FRAME_ERR) != 0 || (frame->data_len < 1)) { return -CANARD_ERROR_RX_INCOMPATIBLE_PACKET; } if (transfer_type != CanardTransferTypeBroadcast && destination_node_id != canardGetLocalNodeID(ins)) { return -CANARD_ERROR_RX_WRONG_ADDRESS; } const uint8_t priority = PRIORITY_FROM_ID(frame->id); const uint8_t source_node_id = SOURCE_ID_FROM_ID(frame->id); const uint16_t data_type_id = extractDataType(frame->id); const uint32_t transfer_descriptor = MAKE_TRANSFER_DESCRIPTOR(data_type_id, transfer_type, source_node_id, destination_node_id); const uint8_t tail_byte = frame->data[frame->data_len - 1]; uint64_t data_type_signature = 0; CanardRxState* rx_state = NULL; if (IS_START_OF_TRANSFER(tail_byte)) { if (ins->should_accept(ins, &data_type_signature, data_type_id, transfer_type, source_node_id)) { rx_state = traverseRxStates(ins, transfer_descriptor); if(rx_state == NULL) { return -CANARD_ERROR_OUT_OF_MEMORY; } } else { return -CANARD_ERROR_RX_NOT_WANTED; } } else { rx_state = findRxState(ins, transfer_descriptor); if (rx_state == NULL) { return -CANARD_ERROR_RX_MISSED_START; } } CANARD_ASSERT(rx_state != NULL); // All paths that lead to NULL should be terminated with return above // Resolving the state flags: const bool not_initialized = rx_state->timestamp_usec == 0; const bool tid_timed_out = (timestamp_usec - rx_state->timestamp_usec) > TRANSFER_TIMEOUT_USEC; const bool same_iface = frame->iface_id == rx_state->iface_id; const bool first_frame = IS_START_OF_TRANSFER(tail_byte); const bool not_previous_tid = computeTransferIDForwardDistance((uint8_t) rx_state->transfer_id, TRANSFER_ID_FROM_TAIL_BYTE(tail_byte)) > 1; const bool iface_switch_allowed = (timestamp_usec - rx_state->timestamp_usec) > IFACE_SWITCH_DELAY_USEC; const bool non_wrapped_tid = computeTransferIDForwardDistance(TRANSFER_ID_FROM_TAIL_BYTE(tail_byte), (uint8_t) rx_state->transfer_id) < (1 << (TRANSFER_ID_BIT_LEN-1)); const bool incomplete_frame = rx_state->buffer_blocks != CANARD_BUFFER_IDX_NONE; const bool need_restart = (not_initialized) || (tid_timed_out) || (same_iface && first_frame && (not_previous_tid || incomplete_frame)) || (iface_switch_allowed && first_frame && non_wrapped_tid);
03-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值