Joel Bushart
Joel Bushart

Reputation: 78

Is is possible to use Postgresql's Explain to analyse queries generated by Grails GORM

I found and have used a closure that temporarily turns hibernate.SQL logging to Trace to allow me to see the exact queries that are generated. However I would like to be able to have PostgresQL's explain run automatically instead of having to pull out queries individually for analysis.

logging closure: (found here: http://www.intelligrape.com/blog/2011/10/21/log-sql-in-grails-for-a-piece-of-code/)

 public static def execute(Closure closure) {
    Logger sqlLogger = Logger.getLogger("org.hibernate.SQL");
    Logger transactionLogger = Logger.getLogger("org.hibernate.transaction");
    Level currentLevel = sqlLogger.level
    Level transLevel = transactionLogger.level
    sqlLogger.setLevel(Level.TRACE)
    transactionLogger.setLevel(Level.TRACE)
    def result = closure.call()
    sqlLogger.setLevel(currentLevel)
    transactionLogger.setLevel(transLevel)
    result
}

usage:

def result
    execute{
        result=Dog.createCriteria().list{
            eq("breed","Greyhound")
        }
    }

I would like something that can be used in a similar way.

Is this something I could do with a sub-class of Criteria or Hibernate.Restrictions ?

Or is there something I'm missing in the docs on how to modify the SQL statement that is sent to the DB from GORM?

Thanks for any info.

Upvotes: 2

Views: 1231

Answers (1)

Richard Huxton
Richard Huxton

Reputation: 22952

Assuming you don't want all queries, but only the longer-running ones you might find the "auto explain" add-on for PostgreSQL useful.

http://www.postgresql.org/docs/9.1/static/auto-explain.html

Upvotes: 3

Related Questions