|
|
|
interactive_timeout и wait_timeout
|
|||
|---|---|---|---|
|
#18+
Добрый день! Просветите насчет этих переменных. "interactive_timeout Количество времени в секундах, на протяжении которого сервер ожидает активности со стороны интерактивного соединения, прежде чем закрыть его. Интерактивный клиент - это клиент, который использует параметр CLIENT_INTERACTIVE для mysql_real_connect()." wait_timeout Время в секундах, на протяжении которого сервер наблюдает неактивность в неинтерактивном соединения прежде, чем закрыть его. Когда запускается поток, SESSION.WAIT_TIMEOUT инициализируется исходя из GLOBAL.WAIT_TIMEOUT или GLOBAL.INTERACTIVE_TIMEOUT, в зависимости от типа клиента (как определяется в CLIENT_INTERACTIVE опции соединения). Вопрос - 1) что такое CLIENT_INTERACTIVE и с чем его едят? У меня Windows 7 и коннект к базе через ODBC. 2) что понимать под интерактивным соединением. Внятного описания термина не нашел (или плохо искал) В my.ini у меня interactive_timeout = 60, wait_timeout явно не прописан (значит должен быть по умолчанию) Запускаю клиентскую программу. в show processlist появляется строчка. Значение столбца timer постепенно увеличивается. Я предполагал, что если клиент не шлет никаких запросов, то коннект должен оборваться по истечении значения, установленного в interactive_timeout. Ан нет! Шлю запрос с клиента, в show processlist значение timer обнуляется и все работает. Далее отрубаю клиента путем вытаскивания шнура из сетевой карты. В show processlist остается висеть сессия, которая благополучно через interactive_timeout секунд исчезает. И исчезают блокировки, поставленные GET_LOCK, что меня устраивает. Где тут подвох? В чем разница этих 2-х переменных? Надо ли "пинговать" с клиента пустым селектом сервер, если на первый взгляд по истечении interactive_timeout клиент не отвалился? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 10:18:42 |
|
||
|
interactive_timeout и wait_timeout
|
|||
|---|---|---|---|
|
#18+
miv32Когда запускается поток, SESSION.WAIT_TIMEOUT инициализируется исходя из GLOBAL.WAIT_TIMEOUT или GLOBAL.INTERACTIVE_TIMEOUT, в зависимости от типа клиента (как определяется в CLIENT_INTERACTIVE опции соединения).В вашем вопросе уже содержится ответ. Или я не понял вопрос. miv32wait_timeout явно не прописан (значит должен быть по умолчанию)А это умолчание аж 28800 секунд, т.е. 8 часов. miv32что такое CLIENT_INTERACTIVE и с чем его едят? http://dev.mysql.com/doc/refman/5.5/en/mysql-real-connect.html Permit interactive_timeout seconds (instead of wait_timeout seconds) of inactivity before closing the connection. The client's session wait_timeout variable is set to the value of the session interactive_timeout variable.По умолчанию этот флаг не передается, т.е. используется wait_timeout. miv32Далее отрубаю клиента путем вытаскивания шнура из сетевой карты. В show processlist остается висеть сессия, которая благополучно через interactive_timeout секунд исчезает.Вы уверены, что это не совпадение? Если изменить interactive_timeout, то это время тоже изменится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 10:40:56 |
|
||
|
interactive_timeout и wait_timeout
|
|||
|---|---|---|---|
|
#18+
Уверен, изменил interactive_timeout на 300. Загрузил клиента. Вижу сессию. Вытаскиваю шнур. Сети нет. Клиента снимаю через диспетчер задач. Гружу заново. В сессиях вижу новую + старую. Проходит 300 секунд и старая сессия из show processlist исчезает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 11:16:27 |
|
||
|
interactive_timeout и wait_timeout
|
|||
|---|---|---|---|
|
#18+
miv32Проходит 300 секунд и старая сессия из show processlist исчезает.Странный эффект. Но, как я понимаю, для вас это даже лучше. Можно установить interactive_timeout в небольшое время, например, 15 секунд, и тогда блокировки от потерянных сессий будут быстро умирать. А wait_timeout оставить большим, чтобы не отваливались коннекты при паузах между запросами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 11:21:48 |
|
||
|
interactive_timeout и wait_timeout
|
|||
|---|---|---|---|
|
#18+
Согласен, странный... Убрал из конфига строку interactive_timeout Повторяю манипуляции со шнуром и диспетчером задач. show processlist и SELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO Показывают наличие старых процессов и блокировок. И они продолжают висеть и висеть будут 28000сек, пока default не кончится. Мой конфиг: [mysqld] datadir=C:/MasterBase/data port=3306 character-sets-dir=C:/MasterBase/share/charsets/ character-set-server=cp1251 collation-server=cp1251_general_ci lc_time_names = 'ru_RU' sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" default_storage_engine=innodb innodb_buffer_pool_size=375M max_allowed_packet = 1073741824 innodb_log_file_size=50M date_format=%d-%m-%Y datetime_format=%d-%m-%Y %H:%i:%s server-id=1 group_concat_max_len=4294967295 pid-file = C:/MasterBase/data/0400wsit026.pid log-bin=mysql-bin expire_logs_days=5 replicate-wild-do-table=force%.tmp% sort_buffer_size = 1M read_buffer_size = 1M read_rnd_buffer_size = 4M thread_concurrency=12 myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size= 16M key_buffer_size = 256M table_open_cache = 256 #interactive_timeout = 300 [client] port=3306 character-sets-dir=C:/MasterBase/share/charsets/ Но тут ничего особенного. Может репликация вносит какую-то лепту? Но это уже из области фантастики. Где же тогда разница интерактивный и не интерактивный? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 11:36:44 |
|
||
|
interactive_timeout и wait_timeout
|
|||
|---|---|---|---|
|
#18+
miv32Где же тогда разница интерактивный и не интерактивный?Не понимаю вопрос. Ваш же предыдущий эксперимент (где было interactive_timeout = 300) показал разницу. Если оба параметра не указывать, то у них будет одинаковое значение по умолчанию и, действительно, разницы не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 12:06:14 |
|
||
|
interactive_timeout и wait_timeout
|
|||
|---|---|---|---|
|
#18+
Чудно все-таки работает. Поставил принудительно в конфиге interactive_timeout = 30 wait_timeout = 28800 show variables like '%timeout%' показывает wait_timeout = 30 Читаем доку: Permit interactive_timeout seconds (instead of wait_timeout seconds) of inactivity before closing the connection. The client's session wait_timeout variable is set to the value of the session interactive_timeout variable. На кой ляд тогда 2 переменных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 13:29:18 |
|
||
|
interactive_timeout и wait_timeout
|
|||
|---|---|---|---|
|
#18+
miv32На кой ляд тогда 2 переменных?Например, для того, чтобы подключающаяся программа могла выбирать по какому сценарию ей работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 13:46:36 |
|
||
|
interactive_timeout и wait_timeout
|
|||
|---|---|---|---|
|
#18+
В общем, крутил-вертел. Остановился на wait_timeout = 60 + по вашему совету из клиента каждые 30 секунд идет SELECT 0. Вопрос, что будет с долгоиграющим селектом, но вроде таких по плану быть не должно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 15:07:51 |
|
||
|
interactive_timeout и wait_timeout
|
|||
|---|---|---|---|
|
#18+
miv32Вопрос, что будет с долгоиграющим селектом, но вроде таких по плану быть не должно.Да ничего не будет. Таймер начинает тикать при переходе в состояние Sleep, когда запрос окончить выполняться. Как учитываются запросы, по которым не до конца выполнен фетч - не знаю, надо пробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 15:31:46 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=123&tid=1832657]: |
0ms |
get settings: |
8ms |
get forum list: |
24ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 252ms |
| total: | 397ms |

| 0 / 0 |
