Это ошибка в базе данных Advantage?
-
03-07-2019 - |
Вопрос
Я столкнулся с ошибкой в PHP-расширении базы данных Advantage (я знаю, я знаю...).Я сообщил об этом как об ошибке, но до сих пор ничего не получил в ответ, поэтому решил рассказать об этом вам, ребята.
Рабочий код:
for ($i = 0; $i < 100; $i++)
{
$connection = ads_connect( 'DataDirectory=\\some\path\;ServerTypes=2;RightsChecking=Off;TrimTrailingSpaces=true;CommType=TCP_IP;', '', '' );
$results = ads_do( $connection , 'SELECT TOP 1 * FROM projects');
ads_close( $connection );
}
Это просто повторяется 100 раз, подключается к базе данных, выполняет запрос и отключается.
НЕрабочий код:
for ($i = 0; $i < 100; $i++)
{
$connection = ads_connect( 'DataDirectory=\\some\path\;ServerTypes=2;RightsChecking=Off;TrimTrailingSpaces=true;CommType=TCP_IP;', '', '' );
$results = ads_do( $connection , 'SELECT TOP 1 * FROM projects');
$results = ads_do( $connection , 'SELECT TOP 1 * FROM projects');
ads_close( $connection );
}
Обратите внимание на выполнение второго запроса?Этот цикл завершается сбоем на 51-м цикле (сервер БД ограничивает каждое приложение до 50 одновременных подключений) с ошибкой
Ошибка 6303:Соединения сервера базы данных максимального преимущества превышены.
Я пробовал несколько других вещей, включая это, но безуспешно:
for ($i = 0; $i < 100; $i++)
{
$connection = ads_connect( 'DataDirectory=\\some\path\;ServerTypes=2;RightsChecking=Off;TrimTrailingSpaces=true;CommType=TCP_IP;', '', '' );
$results = ads_do( $connection , 'SELECT TOP 1 * FROM projects');
ads_free_result( $results );
$results = ads_do( $connection , 'SELECT TOP 1 * FROM projects');
ads_free_result( $results );
ads_close( $connection );
}
Это, однако, ДЕЛАЕТ устраните проблему, и ОБА запроса по-прежнему будут выполняться успешно и точно!
for ($i = 0; $i < 100; $i++)
{
$connection = ads_connect( 'DataDirectory=\\some\path\;ServerTypes=2;RightsChecking=Off;TrimTrailingSpaces=true;CommType=TCP_IP;', '', '' );
$results = ads_do( $connection , 'SELECT TOP 1 * FROM projects');
ads_close( $connection );
$results = ads_do( $connection , 'SELECT TOP 1 * FROM projects');
ads_close( $connection );
}
Мне все это кажется очень странным...Любые идеи?
РЕДАКТИРОВАТЬ: Я использую PHP 5.2.5 и ADS 8.1.
Решение
В базе знаний есть этот пункт по ошибке 6303 и как увеличить количество возможных подключений от клиента, http://devzone.advantagedatabase.com/dz/content.aspx?Key=17&RefNo=981124-0621.В настоящее время отдел исследований и разработок изучает эту проблему и работает над ее решением в следующем выпуске службы.