VB + ASP + MySQL: как узнать, открыты ли у меня незанятые соединения с mysql?

0

Ситуация:

  • У меня есть веб-сайт на веб-хостинге Windows
  • Он использует как VBScript + classic ASP, так и VB.NET + ASP.NET.
  • Он содержит тысячи кодовых страниц (частично написанных мной, частично другими)

Эта проблема:

  • У меня много соединений, которые остаются открытыми в "незанятом" состоянии
  • Эти соединения заставляют сайт быстро достигать предела одновременных подключений к MySQL DB
  • Досягаемость ограничения соединения означает, что он отключается от моего веб-сайта
  • Очевидно, я не могу изменить лимит соединений на сервере (и это не очень хорошая идея)

Вопросы:

  • Как я могу найти плохо написанный код, где соединения открыты и не закрыты (учитывая, что проблема происходит только через Интернет)?

Спасибо заранее, чтобы все ответили, чтобы помочь мне решить эту большую большую проблему.

  • 2
    «Как я могу найти плохо написанный код, где соединения открыты, а не закрыты (учитывая, что проблема происходит только онлайн)?» Вам нужно пройти через ваш исходный код вручную без других вариантов.
  • 0
    очистите свой код, когда вы закончите. Сделайте встречу и получите изменения как можно скорее. это плохая практика. если вы все используете один и тот же класс для доступа к БД, понять это не составит труда
Показать ещё 2 комментария
Теги:
asp-classic
vbscript
connection-pooling

1 ответ

1

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

если вы обычно используете одни и те же имена переменных для вашего набора записей/соединений, вы можете проверить его существование с помощью функции isObject(), а затем проверить его состояние, чтобы увидеть, открывать ли он, а затем выполнять очистку работы, чтобы что-то вроде:

classic asp code

function cleanUp( obj )
    if isObject( obj ) then
        if obj.State <> 0 then obj.Close      '-- check to see if the connection is open, if so, close it'
        set obj = nothing
    end if
end function

если у вас есть файл include, который находится на каждой странице (например, нижний колонтитул), вы можете вставить его туда и называть его различными переменными, которые вы, возможно, использовали:

cleanUp( rs )
cleanUp( rsUsers )
cleanUp( rsProfiles )
cleanUp( myConnectionObject )

даже если вы не используете это конкретное имя переменной в определенном файле, это не сработает из-за проверки isObject().

Это был бы первый подход, который я бы принял, поскольку это даст мне некоторое облегчение. Тем не менее, это эквивалентно полосе помощи, вам все равно нужно исправить основную проблему.

  • 0
    Я пытаюсь ... спящие соединения могут также появиться для слишком длинных запросов?
  • 0
    Я не уверен, что вы имеете в виду под «спящими соединениями», но да, запросы, выполнение которых длится дольше, будут вызывать беспокойство в вашей базе данных, влияя на производительность.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню