flush,analyze

本文介绍如何使用Oracle SQL命令及PL/SQL过程来刷新共享池、缓冲区缓存,并通过不同方式收集表统计数据,包括使用analyze命令及dbms_stats包。

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

 alter system flush shared_pool;
alter system flush buffer_cache; 





analyze  table tablename  compute  statistics;
analyze table abc estimate statistics sample 20 percent;
analyze  table tablename  delete statistics; 



9i以后推荐用dbms_stats.gather_table_stats
Begin
    Dbms_Stats.Gather_Table_Stats(Ownname          => 'BTAS', -- 用户
                                  Tabname          => 'F_DUEPAYEVENT', --表
                                  Cascade          => True, -- 分析索引
                                  Estimate_Percent => Null, --采样行的百分比 NULL为全部分析
                                  Method_Opt       => 'FOR ALL INDEXED COLUMNS SIZE 1', --索引列生成直方图 SKEWONLY
                                  Force            => True, --锁表也统计
                                  Granularity      => 'AUTO', --收集全局和分区统计数据
                                  Degree           => 8, --收集信息时并行度
                                  Stattab          => Null, -->统计数据将被存储在字典中
                                  Statid           => Null,
                                  Statown          => Null);
  End; 
修改问题,修改问题:用户点击指令界面(1.输入分析)后,模块1没有任何提示语,也没有向token里传递推荐号码。等到用户关闭子类界面后,出现下面的提示语启动主事件循环... [2025-07-29 15:39:36] INFO - ★ 模块初始化完成 [ID: input_analysis] 2025-07-29 15:39:36 - DLT_Module1 - INFO - ★ 模块初始化完成 [ID: input_analysis] [2025-07-29 15:39:36] INFO - ✅ 事件处理器注册完成 2025-07-29 15:39:36 - DLT_Module1 - INFO - ✅ 事件处理器注册完成 [2025-07-29 15:39:36] INFO - 🔧 收到指令 [来源: TEST] 2025-07-29 15:39:36 - DLT_Module1 - INFO - 🔧 收到指令 [来源: TEST] [2025-07-29 15:39:36] INFO - 📦 事件数据: {'exclude_front': [1, 2, 3], 'exclude_back': [1]} 2025-07-29 15:39:36 - DLT_Module1 - INFO - 📦 事件数据: {'exclude_front': [1, 2, 3], 'exclude_back': [1]} [2025-07-29 15:39:36] INFO - 🛠️ 正在分析... 排除前区: [1, 2, 3] 后区: [1] 2025-07-29 15:39:36 - DLT_Module1 - INFO - 🛠️ 正在分析... 排除前区: [1, 2, 3] 后区: [1] [2025-07-29 15:39:36] INFO - ✅ 分析结果已发送 2025-07-29 15:39:36 - DLT_Module1 - INFO - ✅ 分析结果已发送 === 程序结束 === ======================================== 模块1测试开始 ======================================== 进程已结束,退出代码为 0原代码# =================== 模块1.输入分析 =============================== import logging import sys from typing import List, Dict from datetime import datetime # 确保从正确路径导入 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from event_center import Event, EventType, event_center from global_config import GlobalConfig # 强制立即刷新日志的处理器 class ImmediateStreamHandler(logging.StreamHandler): def emit(self, record): super().emit(record) self.flush() # 配置模块独立日志器(立即刷新模式) logger = logging.getLogger('DLT_Module1') logger.setLevel(logging.INFO) handler = ImmediateStreamHandler() handler.setFormatter(logging.Formatter( '[%(asctime)s] %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' )) logger.addHandler(handler) # 单例模块控制 _module1_instance = None def get_module1(): """获取模块1单例实例""" global _module1_instance if _module1_instance is None: _module1_instance = InputAnalysisModule() return _module1_instance class InputAnalysisModule: def __init__(self): self.module_id = GlobalConfig.module1_id logger.info(f"★ 模块初始化完成 [ID: {self.module_id}]") self._setup_event_handlers() # 确保立即显示日志 sys.stdout.flush() def _setup_event_handlers(self): """设置事件处理器(立即生效)""" event_center.subscribe( event_type=EventType.MODULE_RUN, handler=self._handle_run_event, token=self.module_id ) logger.info("✅ 事件处理器注册完成") def _handle_run_event(self, event: Event): """实时处理运行指令""" try: # 立即刷新日志 print("", end="", flush=True) logger.info(f"🔧 收到指令 [来源: {event.source}]") logger.info(f"📦 事件数据: {event.data}") if event.target != self.module_id: logger.warning(f"⚠️ 目标模块不匹配: {event.target}") return # 实时处理数据 exclude_front = event.data.get('exclude_front', []) exclude_back = event.data.get('exclude_back', []) logger.info(f"🛠️ 正在分析... 排除前区: {exclude_front} 后区: {exclude_back}") result = self._analyze_numbers(exclude_front, exclude_back) # 发布结果事件 result_event = Event( event_id=event.event_id, type=EventType.ANALYSIS_RESULT, source=self.module_id, target=event.source, data=result, token=self.module_id ) event_center.publish(result_event) logger.info("✅ 分析结果已发送") except Exception as e: logger.error(f"❌ 分析失败: {str(e)}", exc_info=True) error_event = Event( event_id=event.event_id, type=EventType.ERROR, source=self.module_id, target=event.source, data={'error': str(e)}, token=self.module_id ) event_center.publish(error_event) @staticmethod def _analyze_numbers(exclude_front: List[int], exclude_back: List[int]) -> Dict[str, List[int]]: """核心分析逻辑(立即执行)""" # 强制刷新标准输出 sys.stdout.flush() all_front = set(range(1, 36)) all_back = set(range(1, 13)) return { 'recommended_fronts': sorted(all_front - set(exclude_front))[:5], 'recommended_backs': sorted(all_back - set(exclude_back))[:2] } # 程序启动时立即初始化模块 _module1_instance = InputAnalysisModule() # 兼容直接运行测试 if __name__ == "__main__": # 测试事件 test_event = Event( event_id=int(datetime.now().timestamp()), type=EventType.MODULE_RUN, source="TEST", target=GlobalConfig.module1_id, data={"exclude_front": [1, 2, 3], "exclude_back": [1]}, token=GlobalConfig.module1_id ) # 立即显示测试标题 print("\n" + "=" * 40) print("模块1测试开始") print("=" * 40) event_center.publish(test_event) # 保持进程 import time time.sleep(1)
07-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值