Grails MySQL MaxPoolSize

Я формализую свой комментарий в ответ.

"Привязка" не изменяет запрос, она просто "увеличивает" запрос с объектами, которые рассматривают только как данные, недостаток, смешиваемый с кодом.

последнее смешивание может быть проблематичным по нескольким причинам:

  1. Злорадный код, развертывающий "Внедрение SQL" ( https://xkcd.com/327 / , и объяснение Wiki ). Короче говоря, это использует в своих интересах закрытие заключенной в кавычки строки или литерала и выполнения кода SQL непосредственно, возможно, чтобы удалить или изменить данные, возможно, извлечь данные.

  2. Невинно достаточно, если "данные" Вы добавляете к запросу, содержит кавычки, которых не оставляют правильно, Вы могли непреднамеренно выполнить свое собственное Внедрение SQL, хотя, возможно, менее вероятно сделать как "Плохие Вещи", как № 1 сделает.

  3. Оптимизация кода SQL. Большинство систем управления базами данных проанализирует и оптимизирует SQL-запрос так, чтобы он работал лучше, использует в своих интересах ключи, и т.д. Они часто помнят запросы, так, чтобы повторный запрос не должен был быть повторно проанализирован, экономя время. При смешивании данных/параметров в с необработанным текстом SQL-запроса то при изменении одной вещи об этом (даже всего одна цифра в параметре) DBMS должен будет, вероятно, повторно проанализировать запрос. Неэффективный.

существуют функции, которые упрощают выход или заключение в кавычки литералов и строк, и если Вы чувствуете, что необходимо поместить литералы в SQL-запрос, затем я убеждаю Вас использовать их. Они включают (но не ограничены) DBI::dbQuoteString, DBI::dbQuoteLiteral, и DBI::dbQuoteIdentifier.

Другая такая функция glue::glue_sql, который обрабатывает корректное заключение в кавычки/выход литералов, и идентификаторы, к [1 111] "делают [s], создающий SQL-операторы безопасный и легкий" (заключенный в кавычки из github repo). Это - "просто" строковая интерполяция, поэтому в то время как она должна защитить Вас очень хорошо от № 1 и № 2 выше, она не обязательно разрешает/поощряет № 3.

(Она только берет неверную цитату того для напоминания Вам, который используется где для Вашего конкретного DBMS.)

Для записи, привязка довольно проста, как предусмотрено в ее документации:

iris_result <- dbSendQuery(con, "SELECT * FROM iris WHERE [Petal.Width] > ?")
dbBind(iris_result, list(2.3))
results <- dbFetch(iris_result)

, Если Вы хотите, Вы можете снова использовать тот же res (по крайней мере, в некоторых системах управления базами данных, не протестированных на всех), как в [1 127]

# same iris_result as above
dbBind(iris_result, list(2.5))
dbFetch(iris_result)
dbBind(iris_result, list(3))
dbFetch(iris_result)
dbBind(iris_result, list(3.2))
dbFetch(iris_result)

Так много раз, как Вам нужно, в конечном счете заканчивая с [1 128]

DBI::dbClearResult(iris_result)

6
задан Bob Herrmann 18 December 2008 в 00:28
поделиться

2 ответа

К сожалению, необходимо будет настроить боб пружины источника данных для себя, если Вы захотите получить больше контроля над ним. Это может быть сделано путем определения боба в "grails-app/conf/spring/resources.groovy"

beans = {

   dataSource(org.apache.commons.dbcp.BasicDataSource) {
      driverClassName = "com.mysql.jdbc.Driver"
      username = "someuser"
      password = "s3cret"
      initialSize = 15
      maxActive = 50
      maxIdle = 15
   }

}

Это переопределит Grails DataSource по умолчанию, который настроен в "grails-app/conf/DataSource.groovy".


Вероятно, это должно также работать для переопределения свойств размера пула чаш Грааля по умолчанию конфигурация DataSource.groovy как это усиление PropertyOverrideConfigurer (в Config.groovy):

beans = {
   dataSource.initialSize = 15
   dataSource.maxActive = 50
   dataSource.maxIdle = 15
}
7
ответ дан 9 December 2019 в 22:41
поделиться

Для grails 1.2 вы должны использовать немного другой формат:

dataSource {
    pooled = true
    dbCreate = "update"
    url = "jdbc:mysql://localhost/yourDB"
    driverClassName = "com.mysql.jdbc.Driver"
    username = "yourUser"
    password = "yourPassword"
    properties {
        maxActive = 50
        maxIdle = 25
        minIdle = 5
        initialSize = 5
        minEvictableIdleTimeMillis = 60000
        timeBetweenEvictionRunsMillis = 60000
        maxWait = 10000     
    }   
}
4
ответ дан 9 December 2019 в 22:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: