Это решение работает, но производительность ниже ожидаемой.Запрос, возвращающий 200K строк, занимает несколько минут и привязывает ЦП к моему устройству разработки.Выполнение одного и того же * запроса в анализаторе запросов возвращает все результаты в течение <1 минуты. </p>
Class MyController {
def index = {...}
...
def csv = {
...
def rs = DomainClass.createCritera().scroll {}
while(rs.next()){
response.getOutputStream().print(rs.getString(1)\n)
}
...
}
DB = сервер SQL Server 2005 на выделенном поле, отдельном от моей машины разработчика.
У меня естьчерез SQL Server Profiler также заметил, что gorm / hibernate использует sp_cursorprepexec и sp_cursorfetch для чтения результатов 128 строк одновременно.Я хотел бы попытаться не использовать курсор, если это вариант.
Не уверен, что это проблема, но может только помочь.В спящем режиме можно установить прокрутку только как вперед, но у меня возникают проблемы с поиском аналогичной настройки для грааля.
оригинальный спящий режим выпуск .
Решение: Обойти спящий режим.От 10 минут до 15 секунд.
Class MyController {
def DataSource
def index = {...}
...
def csv = {
...
def out = response.getOutoutStream()
Sql sql = new Sql(dataSource)
sql.eachRow("select c1, c2 from t1",{
out.println( it.c1 + "," + it.c2 )
})
...
}
* same = вырезать и вставлять из SQL Server Profiler, но исключая перенос sp_cursorprepexec sproc.