これはAdvantage Databaseのバグですか?
-
03-07-2019 - |
質問
Advantage Database PHP Extensionのバグと思われるものに遭遇しています(知っています、知っています...)。私はそれをバグとして報告しましたが、まだ何も返事がないので、私はあなたたちによってそれを実行すると思いました。
作業コード:
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回ループし、dbに接続し、クエリを実行して、切断します。
非稼働コード:
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 );
}
2番目のクエリの実行に注意してください。このループは51番目のサイクルで失敗し(dbサーバーは各アプリケーションを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 );
}
ただし、これは DOES で問題を修正し、両方のクエリが正常かつ正確に実行されます!!
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 。 R&amp; Dは現在この問題を調査しており、次のサービスリリースで解決するよう取り組んでいます。
所属していません StackOverflow