目錄
一、環境信息
二、介紹
三、數據字典表
1、V$MEM_POOL
2、V$SQL_STAT
3、V$SQL_STAT_HISTORY
4、V$LARGE_MEM_SQLS
5、V$SYSTEM_LARGE_MEM_SQLS
四、總結
一、環境信息
名稱 | 值 |
CPU | 12th Gen Intel(R) Core(TM) i7-12700H |
操作系統 | CentOS Linux release 7.9.2009 (Core) |
內存 | 4G |
邏輯核數 | 2 |
DM版本 | 1 ? ? ? ? ?DM Database Server 64 V8 2 ? ? ? ? ?DB Version: 0x7000c 3 ? ? ? ? ?03134284194-20240703-234060-20108 4 ? ? ? ? ?Msg Version: 12 5 ? ? ? ? ?Gsu level(5) cnt: 0 |
二、介紹
在工作中我們經常會遇到一些客戶詢問達夢進程占用了很多內存,該如何排查和降低,這種情況我們一般可以從大內存SQL、內存泄漏、數據庫參數配置三層去考慮這個問題。我們這次就只講大內存SQL的定位和監測的相關視圖。
三、數據字典表
1、V$MEM_POOL
顯示所有的內存池信息。
序號 | 列 | 說明 |
1 | ADDR | 內存結構地址 |
2 | NAME | 內存池名稱 |
3 | IS_SHARED | 是否是共享的 |
4 | CHK_MAGIC | 是否打開了內存校驗 |
5 | CHK_LEAK | 是否打開了泄漏檢查 |
6 | IS_OVERFLOW | 是否已經觸發 BAK_POOL 的分配 |
7 | IS_DSA_ITEM | 是否是 DSA(Dameng Share Area)項目, 目前一律 為 N |
8 | ORG_SIZE | 初始大小,單位為字節數 |
9 | TOTAL_SIZE | 當前總大小,單位為字節數 |
10 | RESERVED_SIZE | 當前分配出去的大小,單位為字節數 |
11 | DATA_SIZE | 當前分配出去的數據占用大小,單位為字節數 |
12 | EXTEND_SIZE | 每次擴展的塊大小,單位為字節數 |
13 | TARGET_SIZE | 可以擴展到的大小,單位為字節數。當 TARGET_SIZE 為 0 時,不限制此內存池的擴展; 對于共享內存池, 即使 TARGET_SIZE 不為 0,也不限制其擴展, TARGET_SIZE 用于提示系統盡快把內存占用釋放到 TARGET_SIZE 以下 |
14 | EXTEND_LEN | 擴展鏈長度 |
15 | N_ALLOC | 累計分配了幾次 |
16 | N_EXTEND_NORMAL | TARGET 范圍內累計擴展次數 |
17 | N_EXTEND_EXCLUSIVE | 超過 TARGET 累計擴展次數 |
18 | N_FREE | 累計釋放次數 |
19 | MAX_EXTEND_SIZE | 保留字段,始終返回 NULL |
20 | MIN_EXTEND_SIZE | 保留字段,始終返回 NULL |
21 | FILE_NAME | 本池創建點所在的源文件名 |
22 | FILE_LINE | 創建點所在的代碼行 |
23 | CREATOR | 創建者線程號 |
24 | EXTEND_MODE | 內存池的擴展模式 O:擴展時從操作系統(OS)申 請擴展塊; S:擴展時從共享池(Share Pool)申請擴 展塊 |
常用SQL:
SELECTA.CREATOR ,B.SQL_TEXT ,SUM(A.TOTAL_SIZE)/1024/1024||'M' ALL_SIZE,SUM(A.DATA_SIZE) /1024/1024||'M' ACTUAL_SIZE
FROMV$MEM_POOL A,V$SESSIONS B
WHEREA.CREATOR = B.THRD_ID
GROUP BYA.CREATOR,B.SQL_TEXT
ORDER BYALL_SIZE DESC;
2、V$SQL_STAT
語 句 級 資 源 監 控 內 容 。 記 錄 當 前 正 在 執 行 的 SQL 語 句 的 資 源 開 銷 。 需 要 ENABLE_MONITOR=1 才 開 始 監 控 。 針 對 63~68 列 中 的 監 控 項 , 還 需 開 啟 參 數 MONITOR_SQL_EXEC=1、ENABLE_MONITOR_DMSQL=1 才開始監控。
序號 | 列 | 說明 |
1 | SESSID | 會話 ID,系統內部標識 |
2 | SESS_SEQ | 會話序列號,每創建一個會話,系統自動為其生成一個全局遞增的序列號 |
3 | SQL_TXT | 語句 |
4 | SQL_ID | 語句編號 |
5 | EXEC_TIME | 以系統時間統計的執行時間,單位毫秒 |
6 | PARSE_CNT | 解析次數 |
7 | PARSE_TIME | 以系統時間統計的解析時間,單位毫秒 |
8 | HARD_PARSE_CNT | 硬解析次數 |
9 | HARD_PARSE_TIME | 硬解析時間,單位毫秒 |
10 | SEL_SQL_CNT | 執行的查詢語句總數 |
11 | INS_SQL_CNT | 執行的插入語句總數 |
12 | DEL_SQL_CNT | 執行的刪除語句總數 |
13 | UPD_SQL_CNT | 執行的更新語句總數 |
14 | DDL_SQL_CNT | 執行的 DDL 語句總數 |
15 | SEL_IN_PL_CNT | 執行的語句塊中的查詢語句總數 |
16 | INS_IN_PL_CNT | 執行的語句塊中的插入語句總數 |
17 | DEL_IN_PL_CNT | 執行的語句塊中的刪除語句總數 |
18 | UPD_IN_PL_CNT | 執行的語句塊中的更新語句總數 |
19 | DYN_EXEC_CNT | 執行的語句塊中的動態執行語句總數 |
20 | DDL_EVT_TRG_CNT | DDL 事件觸發器觸發次數 |
21 | STMT_BF_TRG_CNT | 語句級 BEFORE 觸發器觸發次數 |
22 | STMT_AF_TRG_CNT | 語句級 AFTER 觸發器觸發次數 |
23 | ROW_BF_TRG_CNT | 行級 BEFORE 觸發器觸發次數 |
24 | ROW_AF_TRG_CNT | 行級 AFTER 觸發器觸發次數 |
25 | INSTEAD_OF_TRG_CNT | INSTEAD OF 觸發器觸發次數 |
26 | OPTIMIZED_SORT_CNT | 最優排序次數 |
27 | ONE_WAY_SORT_CNT | 單路排序次數 |
28 | MULTI_WAY_SORT_CNT | 多路排序次數 |
29 | RUNTIME_OBJ_ALLOC_CNT | 運行時對象創建次數 |
30 | RUNTIME_OBJ_SIZE_CNT | 運行時對象占用空間大小,單位 BYTE |
31 | RUNTIME_OBJ_RECLAIM_CNT | 運行時對象回收次數 |
32 | LONG_ROW_CVT_CNT | 超長記錄字段壓縮次數 |
33 | LOGIC_READ_CNT | 邏輯讀頁次數 |
34 | PHY_READ_CNT | 物理讀頁次數 |
35 | PHY_MULTI_READ_CNT | 物理讀多頁次數 |
36 | RECYCLE_LOGIC_READ_CNT | 臨時表空間邏輯讀次數 |
37 | RECYCLE_PHY_READ_CNT | 臨時表空間物理讀次數 |
38 | HBUF_LOGIC_READ_CNT | HBUF 邏輯讀次數 |
39 | HBUF_PHY_READ_CNT | HBUF 物理讀次數 |
40 | HBUF_PHY_WRITE_CNT | HBUF 物理寫次數 |
41 | HBUF_PHY_READ_SIZE | HBUF 物理讀總大小,單位 BYTE |
42 | HBUF_PHY_WRITE_SIZE | HBUF 物理寫總大小,單位 BYTE |
43 | UNDO_PAGE_CHANGES_CNT | undo 頁變化次數 |
44 | RECYCLE_PAGE_CHANGES_CNT | 臨時頁變化次數 |
45 | DATA_PAGE_CHANGES_CNT | 數據頁變化次數 |
46 | IO_WAIT_TIME | I/O 等待時間(MS) |
47 | TAB_SCAN_CNT | 統計全表掃描次數 |
48 | HASH_JOIN_CNT | 統計哈希連接的次數 |
49 | BTR_SPLIT_CNT | B 樹分裂次數 |
50 | BTR_PAGE_DISCARD_CNT | 數據頁丟棄次數 |
51 | BTR_LEVEL_DISCARD_CNT | B 樹層丟棄次數 |
52 | BTR_LEFT_TRY_CNT | B 樹左移次數 |
53 | BTR_DIRECT_UPDATE_CNT | B 樹直接更新次數 |
54 | BTR_INSDEL_UPDATE_CNT | B 樹插入刪除更新次數 |
55 | BTR_UPDATE_2ND_CONFLICT_C NT | 二級索引更新沖突次數 |
56 | UPDATE_MVCC_RETRY_CNT | 多版本更新重試次數 |
57 | DELETE_MVCC_RETRY_CNT | 多版本刪除重試次數 |
58 | MAX_MEM_USED | 內存使用峰值(KB) |
59 | VIS_RECS_CNT | 可見數據獲取次數 |
60 | VIS_RECS_TIME | 可見數據獲取時間,單位微秒 |
61 | INVIS_RECS_CNT | 不可見數據獲取次數 |
62 | INVIS_RECS_TIME | 不可見數據獲取時間,單位微秒 |
63 | NET_BYTES_RECV | 從客戶端接收的數據字節數 |
64 | NET_BYTES_SEND | 向客戶端發送的數據字節數 |
65 | NET_ROUNDTRIPS | 和客戶端之間的數據往返傳送次數 |
66 | REDO_SIZE | REDO 日志大小,單位字節 |
67 | PARSE_ELAPSD | 以 CPU 時鐘統計的解析時間,單位毫秒 |
68 | EXEC_CPU | 以 CPU 時鐘統計的執行時間,單位毫秒 |
69 | PLN_ADDR | 執行計劃地址,與 V$CACHEPLN 的 CACHE_ITEM 列對應 |
3、V$SQL_STAT_HISTORY
語句級資源監控內容。記錄歷史SQL語句(不含存儲過程中的SQL)執行的資源開銷。需要ENABLE_MONITOR=1才開始監控。單機最大行數為10000。其中5~62、64和66列中的監控項,可以通過SP_SET_SQL_STAT_THRESHOLD()設置監控閾值,當資源超過設置的閾值才開始統計并記錄該項。
當前已設置的監控閾值內容,可以通過查詢視圖V$SQL_STAT_THRESHOLD進行查看。
序號 | 列 | 說明 |
1 | SESSID | 會話 ID,系統內部標識 |
2 | SESS_SEQ | 會話序列號,每創建一個會話,系統自動為其生成一個全局遞增的序列號 |
3 | SQL_TXT | 語句 |
4 | SQL_ID | 語句編號 |
5 | EXEC_TIME | 以系統時間統計的執行時間,單位毫秒 |
6 | PARSE_CNT | 解析次數 |
7 | PARSE_TIME | 以系統時間統計的解析時間,單位毫秒 |
8 | HARD_PARSE_CNT | 硬解析次數 |
9 | HARD_PARSE_TIME | 硬解析時間,單位毫秒 |
10 | SEL_SQL_CNT | 執行的查詢語句總數 |
11 | INS_SQL_CNT | 執行的插入語句總數 |
12 | DEL_SQL_CNT | 執行的刪除語句總數 |
13 | UPD_SQL_CNT | 執行的更新語句總數 |
14 | DDL_SQL_CNT | 執行的 DDL 語句總數 |
15 | SEL_IN_PL_CNT | 執行的語句塊中的查詢語句總數 |
16 | INS_IN_PL_CNT | 執行的語句塊中的插入語句總數 |
17 | DEL_IN_PL_CNT | 執行的語句塊中的刪除語句總數 |
18 | UPD_IN_PL_CNT | 執行的語句塊中的更新語句總數 |
19 | DYN_EXEC_CNT | 執行的語句塊中的動態執行語句總數 |
20 | DDL_EVT_TRG_CNT | DDL 事件觸發器觸發次數 |
21 | STMT_BF_TRG_CNT | 語句級 BEFORE 觸發器觸發次數 |
22 | STMT_AF_TRG_CNT | 語句級 AFTER 觸發器觸發次數 |
23 | ROW_BF_TRG_CNT | 行級 BEFORE 觸發器觸發次數 |
24 | ROW_AF_TRG_CNT | 行級 AFTER 觸發器觸發次數 |
25 | INSTEAD_OF_TRG_CNT | INSTEAD OF 觸發器觸發次數 |
26 | OPTIMIZED_SORT_CNT | 最優排序次數 |
27 | ONE_WAY_SORT_CNT | 單路排序次數 |
28 | MULTI_WAY_SORT_CNT | 多路排序次數 |
29 | RUNTIME_OBJ_ALLOC_CNT | 運行時對象創建次數 |
30 | RUNTIME_OBJ_SIZE_CNT | 運行時對象占用空間大小,單位 BYTE |
31 | RUNTIME_OBJ_RECLAIM_CNT | 運行時對象回收次數 |
32 | LONG_ROW_CVT_CNT | 超長記錄字段壓縮次數 |
33 | LOGIC_READ_CNT | 邏輯讀頁次數 |
34 | PHY_READ_CNT | 物理讀頁次數 |
35 | PHY_MULTI_READ_CNT | 物理讀多頁次數 |
36 | RECYCLE_LOGIC_READ_CNT | 臨時表空間邏輯讀次數 |
37 | RECYCLE_PHY_READ_CNT | 臨時表空間物理讀次數 |
38 | HBUF_LOGIC_READ_CNT | HBUF 邏輯讀次數 |
39 | HBUF_PHY_READ_CNT | HBUF 物理讀次數 |
40 | HBUF_PHY_WRITE_CNT | HBUF 物理寫次數 |
41 | HBUF_PHY_READ_SIZE | HBUF 物理讀總大小,單位 BYTE |
42 | HBUF_PHY_WRITE_SIZE | HBUF 物理寫總大小,單位 BYTE |
43 | UNDO_PAGE_CHANGES_CNT | undo 頁變化次數 |
44 | RECYCLE_PAGE_CHANGES_CNT | 臨時頁變化次數 |
45 | DATA_PAGE_CHANGES_CNT | 數據頁變化次數 |
46 | IO_WAIT_TIME | I/O 等待時間(MS) |
47 | TAB_SCAN_CNT | 統計全表掃描次數 |
48 | HASH_JOIN_CNT | 統計哈希連接的次數 |
49 | BTR_SPLIT_CNT | B 樹分裂次數 |
50 | BTR_PAGE_DISCARD_CNT | 數據頁丟棄次數 |
51 | BTR_LEVEL_DISCARD_CNT | B 樹層丟棄次數 |
52 | BTR_LEFT_TRY_CNT | B 樹左移次數 |
53 | BTR_DIRECT_UPDATE_CNT | B 樹直接更新次數 |
54 | BTR_INSDEL_UPDATE_CNT | B 樹插入刪除更新次數 |
55 | BTR_UPDATE_2ND_CONFLICT_C NT | 二級索引更新沖突次數 |
56 | UPDATE_MVCC_RETRY_CNT | 多版本更新重試次數 |
57 | DELETE_MVCC_RETRY_CNT | 多版本刪除重試次數 |
58 | MAX_MEM_USED | 內存使用峰值(KB) |
59 | VIS_RECS_CNT | 可見數據獲取次數 |
60 | VIS_RECS_TIME | 可見數據獲取時間,單位微秒 |
61 | INVIS_RECS_CNT | 不可見數據獲取次數 |
62 | INVIS_RECS_TIME | 不可見數據獲取時間,單位微秒 |
63 | NET_BYTES_RECV | 從客戶端接收的數據字節數 |
64 | NET_BYTES_SEND | 向客戶端發送的數據字節數 |
65 | NET_ROUNDTRIPS | 和客戶端之間的數據往返傳送次數 |
66 | REDO_SIZE | REDO 日志大小,單位字節 |
67 | PARSE_ELAPSD | 以 CPU 時鐘統計的解析時間,單位毫秒 |
68 | EXEC_CPU | 以 CPU 時鐘統計的執行時間,單位毫秒 |
69 | PLN_ADDR | 執行計劃地址,與V$CACHEPLN 的CACHE_ITEM 列對應 |
70 | START_TIME | SQL 執行的開始時間 |
71 | END_TIME | SQL 執行的結束時間 |
4、V$LARGE_MEM_SQLS
最近 1000 條使用大內存的 sql 語句。一條 sql 語句使用的內存值超過 ini 參數LARGE_MEM_THRESHOLD,就認為使用了大內存。
參數名 | 默認值 | 級別 | 描述 |
LARGE_MEM_THRESHOLD | 10000 | 動態, 系統級 | 大內存監控閾值。單位 KB,取值范圍 0~10000000。其中 0~100 關閉統計,100 以上才統計。 一條 SQL 語句使用的內存值超過這個值,就認為是使用了大內存,此時開啟大內存監控。 使用了大內存的 SQL 語句記 錄在 V$LARGE_MEM_SQLS, V$SYSTEM_LARGE_MEM_SQLS 視圖中 |
序號 | 列 | 說明 |
1 | SESS_ID | 會話 ID,系統內部標識 |
2 | SQL_ID | 語句的 SQL ID |
3 | SQL_TEXT | SQL 文本 |
4 | MEM_USED_BY_K | 使用的內存數,單位 KB |
5 | FINISH_TIME | 執行結束時間 |
6 | N_RUNS | 執行次數 |
7 | SEQNO | 編號 |
8 | TRX_ID | 事務號 |
9 | SESS_SEQ | 會話序列號,每創建一個會話,系統自動為其生成一個全 局遞增的序列號 |
5、V$SYSTEM_LARGE_MEM_SQLS
系統中使用大內存最多的 20 條 sql 語句。字段定義與 v$large_mem_sqls 相同。
四、總結
情況 | 推薦使用 |
當下SQL內存占用情況 | V$MEM_POOL |
歷史或當下SQL各種資源使用情況 | V$SQL_STAT_HISTORY V$SQL_STAT |
歷史或當下大內存SQL使用情況 | V$SYSTEM_LARGE_MEM_SQLS V$LARGE_MEM_SQLS |