審計監控
(g)v$sql_audit是基於虛擬表__all_virtual_sql_audit的視圖, 該虛擬表對應的數據存放在一個可配置的內存空間中,能夠記錄並顯示每一次SQL請求的來源、執行狀態及統計信息,由於存放這些記錄的內存是有限的,因此到達一定內存使用量,會觸發淘汰。
sql_audit相關設置
- 設置sql_audit使用開關
alter system set enable_sql_audit = true/false;
- 設置sql_audit內存上限
alter system set sql_audit_memory_limit = '3G';
3G是默認內存上限,可設置範圍爲[64M,+∞]
-
機制啓動間隔:
後臺任務每隔1s會檢測是否需要淘汰。
-
觸發淘汰的標準:
1)當內存或記錄數達到淘汰上限時觸發淘汰;
2)sql_audit內存最大可使用上限:
avail_mem_limit = min(OBServer可使用內存*10%, sql_audit_memory_limit);
3)淘汰內存上限:
當avail_mem_limit在[64M, 100M]時, 內存使用達到avail_mem_limit - 20M時觸發淘汰;
當avail_mem_limit在[100M, 5G]時, 內存使用達到availmem_limit*0.8時觸發淘汰;
當avail_mem_limit在[5G, +∞]時, 內存使用達到availmem_limit - 1G時觸發淘汰;
4)淘汰記錄數上限:
當sql_audidt記錄數超過900w條記錄時,觸發淘汰;
-
停止淘汰的標準:
1)如果是達到內存上限觸發淘汰則:
當avail_mem_limit在[64M, 100M]時, 內存使用淘汰到avail_mem_limit-40M時停止淘汰;
當avail_mem_limit在[100M, 5G]時, 內存使用淘汰到availmem_limit*0.6時停止淘汰;
當avail_mem_limit在[5G, +∞]時, 內存使用淘汰到availmem_limit-2G時停止淘汰;
2)如果是達到記錄數上限觸發的淘汰則淘汰到800w行記錄時停止淘汰;
sql_audit字段解釋
字段名稱 |
類型 |
描述 |
SVR_IP |
varchar(32) |
ip地址 |
SVR_PORT |
bigint(20) |
端口號 |
REQUEST_ID |
bigint(20) |
請求的id號 |
TRACE_ID |
varchar(128) |
這條語句的trace_id |
CLIENT_IP |
varchar(32) |
發送請求的client ip |
CLIENT_PORT |
bigint(20) |
發送請求的client port |
TENANT_ID |
bigint(20) |
發送請求的租戶id |
TENANT_NAME |
varchar(64) |
發送請求的租戶 名稱 |
USER_ID |
bigint(20) |
發送請求的用戶id |
USER_NAME |
varchar(64) |
發送請求的用戶名稱 |
SQL_ID |
varchar(32) |
這條SQL的id |
QUERY_SQL |
varchar(32768) |
實際的SQL語句 |
PLAN_ID |
bigint(20) |
執行計劃id |
AFFECTED_ROWS |
bigint(20) |
影響行數 |
RETURN_ROWS |
bigint(20) |
返回行數 |
PARTITION_CNT |
bigint(20) |
該請求涉及的分區數 |
RET_CODE |
bigint(20) |
執行結果返回碼 |
EVENT |
varchar(64) |
最長等待事件名稱 |
P1TEXT |
varchar(64) |
等待事件參數1 |
P1 |
bigint(20) unsigned |
等待事件參數1的值 |
P2TEXT |
varchar(64) |
等待事件參數2 |
P2 |
bigint(20) unsigned |
等待事件參數2的值 |
P3TEXT |
varchar(64) |
等待事件參數3 |
P3 |
bigint(20) unsigned |
等待事件參數3的值 |
LEVEL |
bigint(20) |
等待事件的level級別 |
WAIT_CLASS_ID |
bigint(20) |
等待事件所屬的class id |
WAIT_CLASS# |
bigint(20) |
等待事件所屬的class 的下標 |
WAIT_CLASS |
varchar(64) |
等待事件所屬的class 名稱 |
STATE |
varchar(19) |
等待事件的狀態 |
WAIT_TIME_MICRO |
bigint(20) |
該等待事件所等待的時間(微秒) |
TOTAL_WAIT_TIME_MICRO |
bigint(20) |
執行過程所有等待的總時間(微秒) |
TOTAL_WAITS |
bigint(20) |
執行過程總等待的次數 |
RPC_COUNT |
bigint(20) |
發送rpc個數 |
PLAN_TYPE |
bigint(20) |
執行計劃類型,local remote distribute |
IS_INNER_SQL |
tinyint(4) |
是否內部sql請求 |
IS_EXECUTOR_RPC |
tinyint(4) |
當前請求是否rpc請求 |
IS_HIT_PLAN |
tinyint(4) |
是否命中plan_cache |
REQUEST_TIME |
bigint(20) |
開始執行時間點 |
ELAPSED_TIME |
bigint(20) |
接收到請求到執行結束消耗 總時間 |
NET_TIME |
bigint(20) |
發送rpc到接收到請求時間 |
NET_WAIT_TIME |
bigint(20) |
接收到請求到進入隊列時間 |
QUEUE_TIME |
bigint(20) |
請求在隊列等待事件 |
DECODE_TIME |
bigint(20) |
出隊列後decode時間 |
GET_PLAN_TIME |
bigint(20) |
開始process到獲得plan時間 |
EXECUTE_TIME |
bigint(20) |
plan執行消耗時間 |
APPLICATION_WAIT_TIME |
bigint(20) unsigned |
所有application類事件的總時間 |
CONCURRENCY_WAIT_TIME |
bigint(20) unsigned |
所有concurrency類事件的總時間 |
USER_IO_WAIT_TIME |
bigint(20) unsigned |
所有user_io類事件的總時間 |
SCHEDULE_TIME |
bigint(20) unsigned |
所有schedule類事件的時間 |
ROW_CACHE_HIT |
bigint(20) |
行緩存命中次數 |
BLOOM_FILTER_CACHE_HIT |
bigint(20) |
bloom filter緩存命中次數 |
BLOCK_CACHE_HIT |
bigint(20) |
塊緩存命中次數 |
BLOCK_INDEX_CACHE_HIT |
bigint(20) |
塊索引緩存命中次數 |
DISK_READS |
bigint(20) |
物理讀次數 |
EXECUTION_ID |
bigint(20) |
執行ID |
SESSION_ID |
bigint(20) |
session id |
RETRY_CNT |
bigint(20) |
重試次數 |
TABLE_SCAN |
tinyint(4) |
判斷該請求是否含全表掃描 |
CONSISTENCY_LEVEL |
bigint(20) |
一致性級別 |
MEMSTORE_READ_ROW_COUNT |
bigint(20) |
MEMSTORE中的讀行數 |
SSSTORE_READ_ROW_COUNT' |
bigint(20) |
SSSTORE中國年讀的行數 |
REQUEST_MEMORY_USED |
bigint(20) |
該請求消耗的內存 |
參考ob官方文檔
https://oceanbase.alipay.com/docs