mirror of https://github.com/apache/cloudstack.git
bug 11354: query cache option is being enabled at DAO level. To use the cache sql paramter query_cache_type should be set to 2 and query_cache_size should be set to a value greated than 40kb. These can be set in my.ini. There are more tuning paramters which can be fine tuned and they are mentioned here http://dev.mysql.com/doc/refman/5.5/en/query-cache-configuration.html
This commit is contained in:
parent
1ea9b5d703
commit
bd774ab7a7
|
|
@ -152,8 +152,23 @@ public interface GenericDao<T, ID extends Serializable> {
|
|||
*/
|
||||
List<T> search(SearchCriteria<T> sc, Filter filter);
|
||||
|
||||
|
||||
/**
|
||||
* Search for the entity beans using the sql SQL_CACHE option
|
||||
* @param sc
|
||||
* @param filter
|
||||
* @param enable_query_cache
|
||||
* @return list of entity beans.
|
||||
*/
|
||||
List<T> search(SearchCriteria<T> sc, Filter filter, final boolean enable_query_cache);
|
||||
|
||||
|
||||
List<T> searchIncludingRemoved(SearchCriteria<T> sc, final Filter filter, final Boolean lock, final boolean cache);
|
||||
|
||||
|
||||
List<T> searchIncludingRemoved(SearchCriteria<T> sc, final Filter filter, final Boolean lock, final boolean cache, final boolean enable_query_cache);
|
||||
|
||||
|
||||
/**
|
||||
* Customized search with SearchCritiria
|
||||
* @param sc
|
||||
|
|
|
|||
|
|
@ -126,6 +126,7 @@ public abstract class GenericDaoBase<T, ID extends Serializable> implements Gene
|
|||
|
||||
// This is private on purpose. Everyone should use createPartialSelectSql()
|
||||
private final Pair<StringBuilder, Attribute[]> _partialSelectSql;
|
||||
private final Pair<StringBuilder, Attribute[]> _partialQueryCacheSelectSql;
|
||||
protected StringBuilder _discriminatorClause;
|
||||
protected Map<String, Object> _discriminatorValues;
|
||||
protected String _selectByIdSql;
|
||||
|
|
@ -176,7 +177,7 @@ public abstract class GenericDaoBase<T, ID extends Serializable> implements Gene
|
|||
public final Map<String, Attribute> getAllAttributes() {
|
||||
return _allAttributes;
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
protected GenericDaoBase() {
|
||||
Type t = getClass().getGenericSuperclass();
|
||||
|
|
@ -199,7 +200,8 @@ public abstract class GenericDaoBase<T, ID extends Serializable> implements Gene
|
|||
_table = DbUtil.getTableName(_entityBeanType);
|
||||
|
||||
final SqlGenerator generator = new SqlGenerator(_entityBeanType);
|
||||
_partialSelectSql = generator.buildSelectSql();
|
||||
_partialSelectSql = generator.buildSelectSql(false);
|
||||
_partialQueryCacheSelectSql = generator.buildSelectSql(true);
|
||||
_embeddedFields = generator.getEmbeddedFields();
|
||||
_insertSqls = generator.buildInsertSqls();
|
||||
final Pair<StringBuilder, Map<String, Object>> dc = generator.buildDiscriminatorClause();
|
||||
|
|
@ -324,14 +326,30 @@ public abstract class GenericDaoBase<T, ID extends Serializable> implements Gene
|
|||
return searchIncludingRemoved(sc, filter, lock, cache);
|
||||
}
|
||||
|
||||
@DB(txn=false)
|
||||
protected List<T> search(SearchCriteria<T> sc, final Filter filter, final Boolean lock, final boolean cache, final boolean enable_query_cache) {
|
||||
if (_removed != null) {
|
||||
if (sc == null) {
|
||||
sc = createSearchCriteria();
|
||||
}
|
||||
sc.addAnd(_removed.second().field.getName(), SearchCriteria.Op.NULL);
|
||||
}
|
||||
return searchIncludingRemoved(sc, filter, lock, cache, enable_query_cache);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<T> searchIncludingRemoved(SearchCriteria<T> sc, final Filter filter, final Boolean lock, final boolean cache) {
|
||||
return searchIncludingRemoved(sc, filter, lock, cache, false) ;
|
||||
}
|
||||
|
||||
public List<T> searchIncludingRemoved(SearchCriteria<T> sc, final Filter filter, final Boolean lock,
|
||||
final boolean cache, final boolean enable_query_cache) {
|
||||
String clause = sc != null ? sc.getWhereClause() : null;
|
||||
if (clause != null && clause.length() == 0) {
|
||||
clause = null;
|
||||
}
|
||||
|
||||
final StringBuilder str = createPartialSelectSql(sc, clause != null);
|
||||
final StringBuilder str = createPartialSelectSql(sc, clause != null, enable_query_cache);
|
||||
if (clause != null) {
|
||||
str.append(clause);
|
||||
}
|
||||
|
|
@ -354,7 +372,7 @@ public abstract class GenericDaoBase<T, ID extends Serializable> implements Gene
|
|||
}
|
||||
|
||||
final String sql = str.toString();
|
||||
|
||||
|
||||
PreparedStatement pstmt = null;
|
||||
final List<T> result = new ArrayList<T>();
|
||||
try {
|
||||
|
|
@ -1104,6 +1122,21 @@ public abstract class GenericDaoBase<T, ID extends Serializable> implements Gene
|
|||
}
|
||||
}
|
||||
|
||||
@DB(txn=false)
|
||||
protected StringBuilder createPartialSelectSql(SearchCriteria<?> sc, final boolean whereClause, final boolean enable_query_cache) {
|
||||
StringBuilder sql = new StringBuilder(enable_query_cache ? _partialQueryCacheSelectSql.first() : _partialSelectSql.first());
|
||||
if (sc != null && !sc.isSelectAll()) {
|
||||
sql.delete(7, sql.indexOf(" FROM"));
|
||||
sc.getSelect(sql, 7);
|
||||
}
|
||||
|
||||
if (!whereClause) {
|
||||
sql.delete(sql.length() - (_discriminatorClause == null ? 6 : 4), sql.length());
|
||||
}
|
||||
|
||||
return sql;
|
||||
}
|
||||
|
||||
@DB(txn=false)
|
||||
protected StringBuilder createPartialSelectSql(SearchCriteria<?> sc, final boolean whereClause) {
|
||||
StringBuilder sql = new StringBuilder(_partialSelectSql.first());
|
||||
|
|
@ -1158,6 +1191,11 @@ public abstract class GenericDaoBase<T, ID extends Serializable> implements Gene
|
|||
return search(sc, filter, null, false);
|
||||
}
|
||||
|
||||
@Override @DB(txn=false)
|
||||
public List<T> search(final SearchCriteria<T> sc, final Filter filter, final boolean enable_query_cache) {
|
||||
return search(sc, filter, null, false, enable_query_cache);
|
||||
}
|
||||
|
||||
@Override @DB(txn=false)
|
||||
public boolean update(ID id, T entity) {
|
||||
assert Enhancer.isEnhanced(entity.getClass()) : "Entity is not generated by this dao";
|
||||
|
|
|
|||
|
|
@ -565,8 +565,10 @@ public class SqlGenerator {
|
|||
return sql.toString();
|
||||
}
|
||||
|
||||
public Pair<StringBuilder, Attribute[]> buildSelectSql() {
|
||||
public Pair<StringBuilder, Attribute[]> buildSelectSql(boolean enable_query_cache) {
|
||||
StringBuilder sql = new StringBuilder("SELECT ");
|
||||
|
||||
sql.append(enable_query_cache ? "SQL_CACHE ": "");
|
||||
|
||||
ArrayList<Attribute> attrs = new ArrayList<Attribute>();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue