Skip to content

Commit 9f1e41c

Browse files
authored
[Cherry-pick](branch-2.1) Pick "[Enhancement](audit log) Add print audit log sesssion variable #38419" (#38624)
## Proposed changes <!--Describe your changes.--> Pick #38419
1 parent 184b8cb commit 9f1e41c

File tree

2 files changed

+30
-8
lines changed

2 files changed

+30
-8
lines changed

fe/fe-core/src/main/java/org/apache/doris/qe/MysqlConnectProcessor.java

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -136,18 +136,26 @@ private void handleExecute(PrepareStmt prepareStmt, long stmtId) {
136136
executor = new StmtExecutor(ctx, executeStmt);
137137
ctx.setExecutor(executor);
138138
executor.execute();
139-
PrepareStmtContext preparedStmtContext = ConnectContext.get().getPreparedStmt(String.valueOf(stmtId));
140-
if (preparedStmtContext != null) {
141-
stmtStr = executeStmt.toSql();
139+
//For the `insert into` statements during group commit load via JDBC.
140+
//Printing audit logs can severely impact performance.
141+
//Therefore, we have introduced a session variable to control whether to print audit logs.
142+
//It is recommended to turn off audit logs only during group commit load via JDBC.
143+
if (ctx.getSessionVariable().isEnablePreparedStmtAuditLog()) {
144+
PrepareStmtContext preparedStmtContext = ConnectContext.get().getPreparedStmt(String.valueOf(stmtId));
145+
if (preparedStmtContext != null) {
146+
stmtStr = executeStmt.toSql();
147+
}
142148
}
143-
} catch (Throwable e) {
149+
} catch (Throwable e) {
144150
// Catch all throwable.
145151
// If reach here, maybe doris bug.
146152
LOG.warn("Process one query failed because unknown reason: ", e);
147153
ctx.getState().setError(ErrorCode.ERR_UNKNOWN_ERROR,
148154
e.getClass().getSimpleName() + ", msg: " + e.getMessage());
149155
}
150-
auditAfterExec(stmtStr, executor.getParsedStmt(), executor.getQueryStatisticsForAuditLog(), true);
156+
if (ctx.getSessionVariable().isEnablePreparedStmtAuditLog()) {
157+
auditAfterExec(stmtStr, executor.getParsedStmt(), executor.getQueryStatisticsForAuditLog(), true);
158+
}
151159
}
152160

153161
private void handleExecute(PrepareCommand prepareCommand, long stmtId, PreparedStatementContext prepCtx) {
@@ -199,15 +207,19 @@ private void handleExecute(PrepareCommand prepareCommand, long stmtId, PreparedS
199207
executor = new StmtExecutor(ctx, stmt);
200208
ctx.setExecutor(executor);
201209
executor.execute();
202-
stmtStr = executeStmt.toSql();
203-
} catch (Throwable e) {
210+
if (ctx.getSessionVariable().isEnablePreparedStmtAuditLog()) {
211+
stmtStr = executeStmt.toSql();
212+
}
213+
} catch (Throwable e) {
204214
// Catch all throwable.
205215
// If reach here, maybe doris bug.
206216
LOG.warn("Process one query failed because unknown reason: ", e);
207217
ctx.getState().setError(ErrorCode.ERR_UNKNOWN_ERROR,
208218
e.getClass().getSimpleName() + ", msg: " + e.getMessage());
209219
}
210-
auditAfterExec(stmtStr, executor.getParsedStmt(), executor.getQueryStatisticsForAuditLog(), true);
220+
if (ctx.getSessionVariable().isEnablePreparedStmtAuditLog()) {
221+
auditAfterExec(stmtStr, executor.getParsedStmt(), executor.getQueryStatisticsForAuditLog(), true);
222+
}
211223
}
212224

213225
// process COM_EXECUTE, parse binary row data

fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,8 +451,11 @@ public class SessionVariable implements Serializable, Writable {
451451
public static final String EXTERNAL_TABLE_ANALYZE_PART_NUM = "external_table_analyze_part_num";
452452

453453
public static final String ENABLE_STRONG_CONSISTENCY = "enable_strong_consistency_read";
454+
454455
public static final String GROUP_COMMIT = "group_commit";
455456

457+
public static final String ENABLE_PREPARED_STMT_AUDIT_LOG = "enable_prepared_stmt_audit_log";
458+
456459
public static final String PARALLEL_SYNC_ANALYZE_TASK_NUM = "parallel_sync_analyze_task_num";
457460

458461
public static final String TRUNCATE_CHAR_OR_VARCHAR_COLUMNS = "truncate_char_or_varchar_columns";
@@ -1601,6 +1604,9 @@ public void setEnableLeftZigZag(boolean enableLeftZigZag) {
16011604
@VariableMgr.VarAttr(name = GROUP_COMMIT)
16021605
public String groupCommit = "off_mode";
16031606

1607+
@VariableMgr.VarAttr(name = ENABLE_PREPARED_STMT_AUDIT_LOG, needForward = true)
1608+
public boolean enablePreparedStmtAuditLog = true;
1609+
16041610
@VariableMgr.VarAttr(name = INVERTED_INDEX_CONJUNCTION_OPT_THRESHOLD,
16051611
description = {"在match_all中求取多个倒排索引的交集时,如果最大的倒排索引中的总数是最小倒排索引中的总数的整数倍,"
16061612
+ "则使用跳表来优化交集操作。",
@@ -3916,6 +3922,10 @@ public String getGroupCommit() {
39163922
return groupCommit;
39173923
}
39183924

3925+
public boolean isEnablePreparedStmtAuditLog() {
3926+
return enablePreparedStmtAuditLog;
3927+
}
3928+
39193929
public boolean isEnableMaterializedViewRewrite() {
39203930
return enableMaterializedViewRewrite;
39213931
}

0 commit comments

Comments
 (0)