5

まず最初に、私が作業しているプログラムは既にコンパイルされており、ソース コードを見ることができないことをお伝えしたいと思います。

だから、ここに私の問題があります:

アプリケーションは、特定のデータベースへの約 31 の接続を正常に開きます。32 番目の接続を開こうとすると、以前の 31 の接続を含むすべての接続が閉じ始めます。

正直なところ、このアプリケーションが同じ 2 ~ 3 個のテーブルに対して多くの接続を開く必要がある理由はわかりませんが、すべての接続が閉じられた後、アプリケーションも閉じます。

17:41:38 004db680 ドライバー={SQL サーバー};サーバー=192.168.1.8:1433;UID=ユーザー;PWD=パスワード;データベース=データベース

17:41:38 004db680 08001 0000000e [Microsoft][ODBC SQL Server ドライバー][DBNETLIB]無効な接続です。0x00000000 17:41:38 004db680 01000 0000000e [Microsoft][ODBC SQL Server ドライバー][DBNETLIB]ConnectionOpen (ParseConnectParams())。0x00000000

それがそのアプリケーションからのログ出力です。

いくつかの追加情報:

  • SYN攻撃保護が無効になっている場合の同じ問題
  • データベースの最大接続数は 30,000 以上です
4

2 に答える 2

1

データベースで次のステートメントを実行して、最大接続数を超えているかどうかを確認します。

SELECT @@MAX_CONNECTIONS

于 2012-11-16T04:46:39.963 に答える
0

いくつかのことが思い浮かびます

  1. アプリの実行前と実行中に SQL プロファイラーを実行します。どのような出力が表示されますか? デッドロックが発生している可能性がありますか?

  2. これは以前は機能していましたが、最近機能しなくなりましたか? その場合、サービス パックまたはその他の修正プログラムを SQL に適用しましたか?

  3. アプリがマルチスレッドで、スレッドごとに X 接続を実行している場合は、アプリを複数のコアではなく単一のコアで実行するように制限してみてください。これは汚いハックですが、役立つかもしれません。

  4. 32x コマンド プロンプト ウィンドウを開き、osql または sqlcmd ユーティリティを使用して SQL への 32 接続を開いた場合はどうなるでしょうか。ばかげているように聞こえますが、上記が実を結ばない場合でも、少なくとも接続の数だけなのか、それとも何か他のことが進行中なのかを確認できます。他の何かがどちらかである可能性があります

    • データ関連 (#1 を参照)。また
    • ドライバー関連(アプリ内)。ODBCを使用していて、おそらく古い(Windowsのバージョン、SQLのバージョンなどが実行されているとは言いません)場合、MDAC(Microsoft Data Access Components)の更新を試すことができますか?
于 2012-11-16T06:07:42.290 に答える