提交 34e8ef0a 编写于 作者: S serge-rider

#5633 Oracle: metadta queries optimizer (optional)

上级 a232d23c
......@@ -113,6 +113,8 @@ public class OracleMessages extends NLS {
public static String dialog_controlgroup_performance;
public static String edit_create_checkbox_group_use_rule;
public static String edit_create_checkbox_adds_rule_tool_tip_text;
public static String edit_create_checkbox_group_use_metadata_optimizer;
public static String edit_create_checkbox_group_use_metadata_optimizer_tip;
public static String pref_page_oracle_checkbox_disable_escape_processing;
public static String pref_page_oracle_checkbox_enable_dbms_output;
public static String pref_page_oracle_checkbox_use_rowid_to_identify_rows;
......
......@@ -81,6 +81,8 @@ edit_create_checkbox_content_group_use_sys_schema_description = Use SYS schema p
dialog_controlgroup_performance = Performance
edit_create_checkbox_group_use_rule = Use RULE hint for system catalog queries.
edit_create_checkbox_adds_rule_tool_tip_text = Adds RULE hint for some system catalog queries (like columns and constraints reading).\nIt significantly increases performance on some Oracle databases (and decreases on others).
edit_create_checkbox_group_use_metadata_optimizer = Use metadata queries optimizer
edit_create_checkbox_group_use_metadata_optimizer_tip = Use metadata queries optimizer. May significantly improve metadata reading performance on some systems.
pref_page_oracle_checkbox_disable_escape_processing=Disable escape processing in SQL scripts
pref_page_oracle_checkbox_enable_dbms_output=Enable DBMS Output
pref_page_oracle_checkbox_use_rowid_to_identify_rows=Use ROWID to identify rows
......
......@@ -78,6 +78,7 @@ public class OracleConstants {
public static final String PROP_ALWAYS_SHOW_DBA = DBConstants.INTERNAL_PROP_PREFIX + "always-show-dba@";
public static final String PROP_ALWAYS_USE_DBA_VIEWS = DBConstants.INTERNAL_PROP_PREFIX + "always-use-dba-views@";
public static final String PROP_USE_RULE_HINT = DBConstants.INTERNAL_PROP_PREFIX + "use-rule-hint@";
public static final String PROP_USE_META_OPTIMIZER = DBConstants.INTERNAL_PROP_PREFIX + "use-meta-optimizer@";
public static final String PROP_METADATA_USE_SYS_SCHEMA = DBConstants.INTERNAL_PROP_PREFIX + "meta-use-sys-schema@";
public static final String OS_AUTH_PROP = DBConstants.INTERNAL_PROP_PREFIX + "os-authentication@";
......
......@@ -22,7 +22,6 @@ import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ModelPreferences;
import org.jkiss.dbeaver.ext.oracle.model.plan.OraclePlanAnalyser;
import org.jkiss.dbeaver.ext.oracle.model.plan.OracleQueryPlanner;
import org.jkiss.dbeaver.ext.oracle.model.session.OracleServerSessionManager;
import org.jkiss.dbeaver.model.*;
......@@ -32,8 +31,6 @@ import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration;
import org.jkiss.dbeaver.model.connection.DBPDriver;
import org.jkiss.dbeaver.model.exec.*;
import org.jkiss.dbeaver.model.exec.jdbc.*;
import org.jkiss.dbeaver.model.exec.plan.DBCPlan;
import org.jkiss.dbeaver.model.exec.plan.DBCPlanStyle;
import org.jkiss.dbeaver.model.exec.plan.DBCQueryPlanner;
import org.jkiss.dbeaver.model.impl.jdbc.*;
import org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCObjectCache;
......@@ -217,7 +214,7 @@ public class OracleDataSource extends JDBCDataSource
JDBCUtils.executeSQL(
session,
"ALTER SESSION SET NLS_LANGUAGE='" + sessionLanguage + "'");
} catch (SQLException e) {
} catch (Throwable e) {
log.warn("Can't set session language", e);
}
}
......@@ -227,7 +224,7 @@ public class OracleDataSource extends JDBCDataSource
JDBCUtils.executeSQL(
session,
"ALTER SESSION SET NLS_TERRITORY='" + sessionTerritory + "'");
} catch (SQLException e) {
} catch (Throwable e) {
log.warn("Can't set session territory", e);
}
}
......@@ -237,10 +234,23 @@ public class OracleDataSource extends JDBCDataSource
JDBCUtils.executeSQL(
session,
"ALTER SESSION SET NLS_DATE_FORMAT='" + nlsDateFormat + "'");
} catch (SQLException e) {
} catch (Throwable e) {
log.warn("Can't set session NLS date format", e);
}
}
if (JDBCExecutionContext.TYPE_METADATA.equals(context.getContextName())) {
if (CommonUtils.toBoolean(connectionInfo.getProviderProperty(OracleConstants.PROP_USE_META_OPTIMIZER))) {
// See #5633
try {
JDBCUtils.executeSQL(session, "ALTER SESSION SET \"_optimizer_push_pred_cost_based\" = FALSE");
JDBCUtils.executeSQL(session, "ALTER SESSION SET \"_optimizer_squ_bottomup\" = FALSE");
JDBCUtils.executeSQL(session, "ALTER SESSION SET \"_optimizer_cost_based_transformation\" = 'OFF'");
} catch (Throwable e) {
log.warn("Can't set session optimizer parameters", e);
}
}
}
}
}
}
......
......@@ -47,6 +47,7 @@ public class OracleConnectionExtraPage extends ConnectionPageAbstract
private Button useDBAViewsCheckbox;
private Button useSysSchemaCheckbox;
private Button useRuleHint;
private Button useOptimizerHint;
public OracleConnectionExtraPage()
{
......@@ -109,8 +110,10 @@ public class OracleConnectionExtraPage extends ConnectionPageAbstract
final Group contentGroup = UIUtils.createControlGroup(cfgGroup, OracleMessages.dialog_controlgroup_performance, 1, GridData.HORIZONTAL_ALIGN_BEGINNING, 0);
useRuleHint = UIUtils.createCheckbox(contentGroup, OracleMessages.edit_create_checkbox_group_use_rule, true);
useRuleHint.setToolTipText(
OracleMessages.edit_create_checkbox_adds_rule_tool_tip_text);
useRuleHint.setToolTipText(OracleMessages.edit_create_checkbox_adds_rule_tool_tip_text);
useOptimizerHint = UIUtils.createCheckbox(contentGroup, OracleMessages.edit_create_checkbox_group_use_metadata_optimizer, true);
useOptimizerHint.setToolTipText(OracleMessages.edit_create_checkbox_group_use_metadata_optimizer_tip);
}
setControl(cfgGroup);
......@@ -159,6 +162,7 @@ public class OracleConnectionExtraPage extends ConnectionPageAbstract
useSysSchemaCheckbox.setSelection(CommonUtils.getBoolean(providerProperties.get(OracleConstants.PROP_METADATA_USE_SYS_SCHEMA), false));
useSysSchemaCheckbox.setSelection(CommonUtils.getBoolean(providerProperties.get(OracleConstants.PROP_METADATA_USE_SYS_SCHEMA), false));
useRuleHint.setSelection(CommonUtils.getBoolean(providerProperties.get(OracleConstants.PROP_USE_RULE_HINT), false));
useOptimizerHint.setSelection(CommonUtils.getBoolean(providerProperties.get(OracleConstants.PROP_USE_META_OPTIMIZER), false));
}
@Override
......@@ -203,6 +207,10 @@ public class OracleConnectionExtraPage extends ConnectionPageAbstract
providerProperties.put(
OracleConstants.PROP_USE_RULE_HINT,
String.valueOf(useRuleHint.getSelection()));
providerProperties.put(
OracleConstants.PROP_USE_META_OPTIMIZER,
String.valueOf(useOptimizerHint.getSelection()));
}
saveConnectionURL(dataSource.getConnectionConfiguration());
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册