Advantage и PHP - ошибка 6303. Превышено максимальное количество подключений к серверу базы данных Advantage. - PullRequest
1 голос
/ 24 января 2012

Веб-сайт моей компании php подключен к серверу Advantage Database Server, где хранятся все необходимые данные, такие как пользователи, пароли и реестр клиентов.

В последнее время мы начали получать ошибку при запросе веб-страниц:

Предупреждение: ошибка SQL: [Расширенные системы] [Advantage SQL] [ASA] Ошибка 6303: Превышено максимальное количество подключений к серверу базы данных Advantage. axServerConnect, состояние SQL HY000 в SQLDriverConnect в C: \ ... \ www \ ... on line ...

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

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

На сервере базы данных у нас есть файл конфигурации ads.ini в папке C: \ Windows, где мы подняли настройку максимального количества подключений со значением "MAX_CONNECTIONS = 1000", которое действительно велико по сравнению с нашими потребностями.

Может ли это быть полезным, если мы также установим "RETRY_ADS_CONNECTS = 1" ??

Я нашел этот пост, где R & D подтверждает ошибку в мае 2009 года:

Это ошибка в базе данных Advantage?

Это было исправлено? В каком выпуске?

Где я могу увидеть реальное количество соединений, открытых apache на БД?

Каждая страница php закрывает рекламное соединение в нижнем колонтитуле, что может привести к превышению количества соединений?

Заранее спасибо за помощь.

- ИНФОРМАЦИЯ ОБ ОКРУЖАЮЩЕЙ СРЕДЕ

База данных: Сервер базы данных Advantage 10.10.0.6 на сервере Windows 2003

Веб-сервер: Apache / 2.0.59 (Win32) mod_ssl / 2.0.59 OpenSSL / 0.9.8d PHP / 4.4.7 в Windows XP pro

На странице phpinfo () мы получаем «Advantage Version» «8.00.0.0». Почему это? Нужно ли обновлять расширение php -advantage?

1 Ответ

2 голосов
/ 25 января 2012

Много вопросов, но я постараюсь ответить на каждый.

1) 6303 Ошибка.Использование MAX_CONNECTIONS является правильным способом решения этой проблемы.
Убедитесь, что MAX_CONNECTIONS находится в разделе [SETTINGS]. Проверьте, использует ли драйвер Apache / PHP / ADS правильный файл ads.ini.Вы можете использовать Process Monitor от Sysinternals, чтобы увидеть, какой файл ads.ini был успешно открыт.Если вы обновите свой драйвер PHP, вы можете установить переменную окружения adsini_path, указывающую на каталог, в котором находится файл ads.ini.

2) Будет полезно установить RETRY_ADS_CONNECTS = 1.Это также относится к разделу [НАСТРОЙКИ] файла ads.ini.Когда клиент ADS получает сетевую ошибку (обычно ошибку класса 6000), эта ошибка кэшируется драйвером клиента, и последующие попытки подключения будут использовать кэшированную ошибку вместо повторных попыток.Установка RETRY_ADS_CONNECTS скажет клиенту ADS игнорировать кэшированную ошибку и повторить соединение

3) Ошибка: похоже, это было исправлено в версии драйвера 9.10.0.9 на основе примечаний к выпуску http://devzone.advantagedatabase.com.

Исправлена ​​ошибка, из-за которой счетчик ссылок на сборку мусора в соединении был бы некорректным, если на нем было открыто несколько операторов SQL.

Поскольку вы работаете на сервере 10.1вы можете посмотреть обновление до клиента 10.1, которое также будет содержать исправление. 10.1 Advantage PHP Driver

4) Посмотрите реальное количество соединений, которые я бы порекомендовал использовать хранимую процедуру sp_mgGetConnectedUsers, вы можете использовать ARC (Advantage Data Architect), но это может быть сложно сгруппировать,порядок и т. д. Поскольку вы используете 10.1, вы можете включить результаты хранимой процедуры в запрос, например

SELECT COUNT(*) FROM (EXECUTE PROCEDURE sp_mgGetConnectedUsers()) u WHERE ADDRESS='xxx.xxx.xxx.xxx'

. Вы также можете использовать другие поля для идентификации приложения PHP, например, UserName (имя сервера).), DictionaryUser (при условии, что приложение php использует уникального пользователя), ApplicationID

5) PHPINFO отображает версию Advantage клиентского драйвера Advantage PHP.Вы можете обновить драйвер клиента по причинам, указанным выше.Это должно быть так же просто, как и замена файлов DLL (ace32.dll, axces32.dll, adsodbc.dll и php_advantage.dll), но я бы порекомендовал сначала проверить, чтобы убедиться, что вы получите все.

...