問題タブ [jtds]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - C3P0 接続チェックで jTDS ソケットがハングする (SQL Server 2008 R2)
ここに環境があります:
- Java5
- Windows 上の Tomcat 6.0.18 で実行されている Web アプリケーション (バージョンは不明)
- データベース: SQL Server 2008 R2
- JDBC ドライバー: jTDS 1.2.5
- 接続プール プロバイダー: C3P0 0.9.1.2
クライアントが抱えている問題をデバッグしようとしています。基本的に数週間ごとに、Web アプリケーションがサーバー上でロックアップし、アクセスできなくなります。再起動すると問題が解決します。さらに調査すると、すべてがロックされている理由は、すべてがデータベース接続が戻るのを待っているためであることがわかります。問題は C3P0 ではなく、SQL Server にある可能性が高いと思います。
私が信じているのは、C3P0 の「アイドル チェック クエリ」がハングしていることです。クエリは次のとおりです。
このクエリが実行されているように見えますが、結果は返されません。これが私のスレッドダンプにあるものです。DefaultConnectionTester.activeCheckConnection()
アイドルチェックであることに注意してください:
しかし、このような単純なクエリがソケットからの読み取り時にハングアップする原因は何でしょうか? このテーブルは C3P0 によって完全に管理され、挿入/更新されないため、このテーブルにデータベース ロックが発生するとは考えていません。また、プールから接続を取得しようとして失敗した場合 (これがハングの原因である場合)、スタックトレースがどこかにあると予想されます。代わりに、将来のすべての接続要求がこの「アイドルチェック」が完了するのを待っているため、アプリがロックされているだけです。
「アイドルチェック」が完了するのを待っているスレッドの 1 つを次に示します。
C3P0 のソース コードを見ると、上部の 2 行:
...接続が「アイドルチェック」を待っているときにのみ発生します。
残念ながら、これはクライアントであり、ここで環境の正確な詳細を報告することはできません. しかし、次の電話で彼らに提案できることは何でも構いません。
更新:
彼らのアプリケーションは今日もロックされました。これまでに試したことは次のとおりです。
- 最新の jTDS ドライバー (1.2.5) に更新されました。
- 接続文字列のプロパティを 300 に設定し
socketTimeout
ましたが、ドライバーは 5 分後も socketRead0() でスタックしたままです。 - アクティブ チェック クエリを「select * from c3p0_connection_test_table」から「select 1」に変更しました。
unreturnedConnectionTimeout
およびdebugUnreturnedConnectionStackTraces
プロパティを C3P0 に追加しました(ただし、これらは切断された接続をキャッチしません)。
設定したすべての C3P0 接続プロパティは次のとおりです。
アプリケーションがロックされている間に、アプリケーション ユーザーで SQL Server Management Studio にログインしようとしたところ、ログインできませんでした (通常のタイムアウト エラーだったと思います)。データベースは起動され、ポート 1433 でリッスンされていました (で確認済みtelnet
)。これは、データベースへの接続の最大数に達したことを意味すると思います。ただし、それがこの問題の原因を特定するのに役立つかどうかはわかりません。
成功しなかったリード:
- この人は、オペレーティング システムに問題があり、サーバー上の NIC カードの数に問題がある可能性があります。
- 以下の回答者は、ここで jTDS の古いバージョンのバグを指摘しました
役立つ回答は、クライアントのマシンで何かを確認するように依頼するか、考えられる根本原因を指摘することができます。これを追跡するのに役立つ回答があれば、賞金を獲得できます。
java - Java を使用して外部データベースに接続する
MS SQL データベースに接続する Java プログラムがあります。プログラムは Eclipse で実行すると完全に動作しますが、AIX で実行するとエラーが発生します。
java.sql.SQLException: ネットワーク エラー IOException: リモート ホストが試行された接続操作を拒否しました。
jtds を使用して接続しています。
java - telnet による外部データベースへの接続
MS SQL データベースに接続する Java プログラムがあります。プログラムはEclipse で実行すると完全に動作しますが、AIX で実行するとエラーが発生します。
java.sql.SQLException: ネットワーク エラー IOException: リモート ホストが試行された接続操作を拒否しました。
サーバーに正常に ping を実行できますが、サーバーに telnet で接続できません。Windows デスクトップから telnet することもできません。
jtds を使用して接続しています。
この問題に関する jTDS のドキュメントをいくつか示しますが、まだ問題を解決できません。
java - Netbeans で sqlserver&jtds ドライバーを使用して Hibernate を設定する方法
jtds ドライバーを使用して Hibernate と連携するように Netbeans をセットアップして、SQLSERVER 2008 に接続しようとしています。
sqlserver 2008 はローカルにインストールされ、ユーザー名やパスワードはありません。
これは hibernate.cfg です:
Hibernate リバース エンジニアリング ウィザードを使用して Hibernate リバース エンジニアリング ファイルをセットアップしようとすると、次のエラーが発生します。
つなげられない。net.sourceforge.jtds.jdbc.Driver を使用して jdbc:jtds:sqlserver://localhost:2545/MyDB への接続を確立できません (I/O エラー: SSO に失敗しました: ネイティブ SSPI ライブラリがロードされていません。java.library.path を確認してくださいシステム プロパティ)。
WINDOWS\system32 に ntlmauth.dll があります。
sql-server - MARS が有効になっていても、MSSQL への SQL クエリに一時停止が含まれる
jTDS と Microsoft の JDBC ドライバーをテストしていますが、クエリの実行で不要な一時停止が発生しています。このアプリケーションは多くの ResultSet を開き、それぞれから数行だけをフェッチします。各クエリは約 10 万行を選択しますが、フェッチするのは約 50 行のみです (ページを埋めるのに十分です)。問題は、最初のクエリ以降のすべてのクエリに約 2 秒の一時停止が含まれていることです。その間、ドライバは前の ResultSet からすべての行を一時ストレージ (メモリまたはディスク) にロードするため、後でトラバースできます。最悪のシナリオでは約 6 つのクエリがあるため、約 10 秒の一時停止が発生し、アプリケーションがユーザーに応答しなくなります。MSSQL のバージョンは 2005 です。
このような一時停止を取り除くために、Microsoft JDBC ドライバーの接続文字列パラメーターを介して MARS (複数のアクティブな結果セット) を有効にしようとしました (ドキュメントが不足しているため、https://sites.google.com/にリストされているすべてのものを試しました)。サイト/sqlconnect/sql2005strings )。接続文字列の例:
jdbc:sqlserver://TESTDBMACHINE;instanceName=S2005;databaseName=SampleDB;MarsConn=yes
しかし、どれも問題を解決しません。Microsoft JDBC ドライバーは、接続文字列で何でも受け入れるようです。MarsConn=yes を PleaseBeFast=yes に置き換えると、MS ドライバーはパラメーターを無視し、事実をログに記録しません。MARS が、以前にアクティブだった結果セットから行をキャッシュするだけのクライアントのみの機能なのか、それともサーバー機能なのかはわかりません。特定の接続が MARS を使用しているかどうかをサーバー側から検出する方法さえ知りません。これについてコメントいただければ、それは大歓迎です。
一時停止の別の解決策は、スクロール可能な (双方向) 結果セットを使用することでした。これにより一時停止は解消されますが、フェッチ時間が 80% 遅くなり、ネットワークの消費量が増えます。現在、実際の接続のプールを保持し、個別の「ResultSet フリー」接続に対してクエリを自動的に発行する JDBC 接続ラッパーの実装を検討しています。ただし、各接続とそのアクティブな ResultSet の間のリンクを保持する必要があるため、これはやや面倒です。また、サーバーからより多くの接続を消費し、DBA に問題を引き起こす可能性があります。また、すべてのクエリを同じ接続で発行する必要があるアクティブなトランザクションがある場合、このソリューションは役に立ちません。
2 回目以降のクエリ実行から一時停止を取り除くことができるパラメーター、構成、特定の API、リンク、またはトリックを知っていますか?
sql-server - JDBCを使用してMicrosoftSQLServer 2008 R2のストアドプロシージャにテーブル値パラメーター(配列のようなパラメーター)を渡す方法は?
Microsoft SQL Server 2008 R2 JDBCドライバーを使用して、テーブル値パラメーター(配列のようなパラメーター)をMicrosoft SQL Server 2008 R2のストアドプロシージャに渡す方法は?jTDSで可能ですか?
java - Management Studio よりもアプリケーションからの Stored Proc が遅い
アプリケーション (Spring - DBCP - jtds) から呼び出されたときに哀れに実行されるストアド プロシージャがあり、実際には 10 分後にタイムアウトしますが、SQL Server Managament Stuido から実行すると 30 秒で実行されます。誰かがこの問題への手がかりを提供できますか?
android - AndroidでJTDSドライバーを使用してSQLサーバーに接続する方法
私はアンドロイドが初めてです.JTDSドライバーを使用してSQLサーバーに接続したいです。誰でも教えてもらえますか..
thnx事前に...
sql-server - JTDSがMicrosoftJDBCドライバーよりも高速なのはなぜですか?
JBossで実行されているJavaEEアプリケーションのJTDSとMicrosoftSQLServerを比較しているところ、JTDSの方が30%から50%高速であり、同時性の高いシナリオでアプリケーションのベンチマークを行い、HW/SWをまったく同じに保つことがわかりました。データソース設定のドライバーのみを変更します。
JTDSに向けて多くの有利なオプションを見てきましたが、それを採用することを考えていますが、私はまだ興味があります。
- JTDSドライバーが非常に高速なのはなぜですか?
- なぜMicrosoftはドライバーをJTDSのように高速に更新しなかったのですか?
比較は、最新のJDBC 3.0バージョンと最新のJTDSバージョンを使用し、専用SANを備えた16コアインストールで実行されているSQLServer2008を使用して行われました。
java - JDBC-JTDSのバグ?タイプdateandtime(x)の列の場合
タイプとのResultSetMetaData
メソッドを使用して列タイプを取得しようとすると、が取得
されます。他のタイプの場合は問題なく動作するようです。これはバグですか?それで大丈夫のようです。私は走っていますgetColumnTypeName
date
time(x)
nvarchar
ResultSet
getString("TYPE_NAME")
MSSQL2008
@名のない馬
ResultSetMetaData
クエリを実行すると取得します。その場合、私はテーブルを持っていません。これがコードスニペットです