MYSQL 8 часов, время ожидания проблемы - PullRequest
4 голосов
/ 05 мая 2009

Я использую MYSQL 5.0 и Tomcat 5.5. Через 8 часов MYSQL по умолчанию закрывает все незанятые соединения, и поэтому я получаю исключение SQL. Любое решение этой проблемы

Ответы [ 5 ]

6 голосов
/ 05 мая 2009

Какой пул соединений вы используете? Большинство из них позволяют периодически выполнять команду сердцебиения, чтобы не допустить простоя соединений.

РЕДАКТИРОВАТЬ: Глядя на страницу конфигурации DBCP , я думаю, что вы должны установить соответствующий (дешевый) validationQuery. Затем вы можете либо указать DBCP проверить это при потенциальном исключении неактивных соединений (testWhileIdle), либо указать, чтобы он проверял непосредственно перед возвратом соединения (testOnBorrow). Первый будет (надеюсь!) Поддерживать ваши пустые связи живыми; второй не сможет, но не вернет вам разорванные соединения (т. е. если создаст новое при необходимости).

2 голосов
/ 05 мая 2009

Вы имеете в виду, что вы поддерживаете соединения, пока они простаивают? Я не эксперт по mySql, но в базах данных, с которыми я работал, считается хорошей практикой держать соединение открытым только тогда, когда оно необходимо, а затем закрывать его.

1 голос
/ 26 октября 2011

В MySQL по умолчанию открытое соединение (часто ожидающее в пуле соединений) будет закрыто после 8 часов бездействия. Вы можете изменить это время с 8 часов, настроив переменную wait_timeout либо в своем my.cnf, либо в нашей командной строке mysql

См: http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_wait_timeout http://dev.mysql.com/doc/refman/5.0/en/gone-away.html

1 голос
/ 05 мая 2009

Я не знаю, как увеличить время ожидания, но я предполагаю, что должна быть настройка. Почему вы не создаете соединение, когда оно вам нужно, и закрываете его после использования, кроме как в зависимости от созданного соединения?

0 голосов
/ 23 декабря 2015

Этот вопрос задавался несколько лет назад, но я чувствую, что хорошо иметь правильный ответ. У меня была та же проблема, чтобы решить, мне пришлось немного поиграть с конфигурацией. вот что работает для меня. Продолжайте https://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html для получения дополнительной информации. Код ниже позаботился обо всем. Есть способ оптимизировать значения, но я позабочусь об этом позже.

<Resource name="jdbc/database" 
               auth="Container" 
               type="javax.sql.DataSource"
               maxActive="100" 
               maxIdle="30" 
               maxWait="10000"
          username="username" password="password" 
          driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql:///"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
          testWhileIdle="true"
          testOnBorrow="true"
          testOnReturn="false"
          validationQuery="SELECT 1"
          validationInterval="30000"`enter code here`
          timeBetweenEvictionRunsMillis="30000"
          minIdle="10" `enter code here`
          initialSize="10"
          removeAbandonedTimeout="60"
          removeAbandoned="true"
          logAbandoned="true"
          minEvictableIdleTimeMillis="30000" 
          jmxEnabled="true"         
           />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...