2012-01-24 2 views
1

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

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

Предупреждение: Ошибка SQL: [Extended Systems] [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 года:

Is this a bug with Advantage Database?

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

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

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

Заранее благодарим за помощь.

- СРЕДА INFO

База данных: базы данных 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-преимущества?

ответ

2

Много вопросов, но я постараюсь разобраться в каждом.

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

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

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

Fixed an issue where the garbage collection reference count on a connection would be incorrect if multiple SQL statements were opened on it.

Поскольку вы используете сервер 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), но я бы порекомендовал сначала тестирование, чтобы вы все получили.

+0

, пожалуйста, вы можете нам помочь? Я установил монитор процесса, но вижу только файлы .dll, а не .ini - где я должен изменить номер MAX_CONNECTIONS? –

+0

Вы можете попробовать разместить ads.ini в своем каталоге php или в папке windows или windows \ system32. Если вы обновили драйвер php, вы можете установить переменную systemini ads__path для указания папки, в которой находится ads.ini. – Edgar

 Смежные вопросы

  • Нет связанных вопросов^_^