印log: `logger.info(f"==={sys._getframe().f_lineno}===")` 效能監測相關: ``` 計算 Gunicorn 的具體線程數 ps -eLf | grep gunicorn | wc -l 列出 CPU 數量: cat /proc/cpuinfo | grep "^physical id" | sort | uniq | wc -l 列出每個 CPU 的核心數量: cat /proc/cpuinfo | grep "^cpu cores" | uniq 列出全部 CPU 核心數量: cat /proc/cpuinfo | grep "^processor" | wc -l ``` object not exist 會發生在同時有兩個Airflow的process執行同個procedure 顯示當前目錄的總大小 `$ du -sh .` 顯示當前目錄底下各檔案資料夾的 size `$ du -sh ./*` ``` -- 使用 V$SESSION 和 V$SQL 找出當前執行最久的 SQL SELECT s.sid, s.serial#, s.username, s.status, s.sql_id, s.event, q.sql_text, q.elapsed_time / 1000000 AS elapsed_seconds FROM v$session s JOIN v$sql q ON s.sql_id = q.sql_id WHERE s.status = 'ACTIVE' ORDER BY q.elapsed_time DESC; -- 使用 V$ACTIVE_SESSION_HISTORY(ASH)查詢過去的慢 SQL SELECT sql_id, sql_plan_hash_value, session_id, session_serial#, sample_time, event, wait_class, session_state FROM v$active_session_history WHERE sample_time > SYSDATE - INTERVAL '5' MINUTE ORDER BY sample_time DESC; -- 查詢 Oracle 內部的記憶體使用狀況 SELECT name, value/1024/1024 AS memory_MB FROM v$pgastat WHERE name IN ('total PGA allocated', 'maximum PGA allocated'); -- 查詢 Oracle 內部的 CPU 使用狀況 SELECT stat_name, valueFROM v$osstat WHERE stat_name IN ('NUM_CPUS', 'LOAD', 'BUSY_TIME'); -- 使用 V$SESSION 找出高 CPU 消耗的 SQL SELECT s.sid, s.serial#, s.username, s.status, s.sql_id, q.sql_text, q.cpu_time/1000000 AS cpu_seconds FROM v$session s JOIN v$sql q ON s.sql_id = q.sql_id WHERE s.status = 'ACTIVE'ORDER BY q.cpu_time DESC; ``` 重新Build DEV Image 紀錄 ![image](https://hackmd.io/_uploads/B1IqEmPYJg.png) 重新Build UAT Image 紀錄 ![image](https://hackmd.io/_uploads/rJZvNmDYyx.png) 查看package版本 `docker exec -it your_container_name conda run -n umc-dev pip show package_name` 用VS Code的正規取代,如果要用變數來代表查到的值,可以用$1、$2 舉例: 查詢: null, '(\w*)', \d* 取代: null, '$1', 以上範例就是用$1將(\w*)給取代(常犯的錯誤是忘記加括弧)