---
# System prepended metadata

title: 開發筆記

---


印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*)給取代（常犯的錯誤是忘記加括弧）
