![](/img/trans.png)
[英]Oracle - Parameterized Query has EXECUTIONS = PARSE_CALLS
[英]Oracle AWR - high SQL Parse Calls but 0 Executions
我試圖了解導致 Oracle (10) 數據庫打開查詢的原因。
在 AWR 上,它顯示了非常多的解析調用(例如,1 小時內超過 15,000 次),但執行次數為 0。
怎么能不執行查詢,然后解析 15000 次呢?
解析調用:15,000+
執行次數:0
SQL 文本:從 AVIEW 中選擇 *
SQL 中的 * 將解釋重復解析。 您應該將其替換為字段名稱列表。
甲骨文 11、java、jdbc 11.2.0.3
當您像這樣從插入中獲取序列時會出現問題
PreparedStatement ps = connection.prepareStatement(QUERY, new String[] { "student_id" });
我們發現 jdbc 驅動程序在每次插入之前准備“SELECT * FROM”語句。 只有解析操作沒有執行。
T4CConnection.doDescribeTable
T4CStatement localT4CStatement = new T4CStatement(this, -1, -1);
localT4CStatement.open();
String str1 = paramAutoKeyInfo.getTableName();
String str2 = new StringBuilder().append("SELECT * FROM ").append(str1).toString();
localT4CStatement.sqlObject.initialize(str2);
Oracle 解析器不會緩存帶有“*”的解析查詢,因此每次插入都有額外的解析操作。
零執行表示查詢未在 AWR 快照內完成
我們有一個類似的問題,但查詢略有不同:
select col1, col2, col3 from table
結果是一樣的。 高解析率但零執行。
原因是來自 spring-jdbc 的 StatementCreatorUtils#setNull。 ver 4.2.7 執行時:
insert into table (col1, col2, col3) values (val1, null, null)
有一個參數類型對數據庫的調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.