問題タブ [connection-pooling]
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.
java - C3p0 での順序のロック
c3p0 を使用して、アプリケーションでのデータベース接続の作成と破棄をログに記録しようとしていますConnectionCustomizer
。その中に、次のようなコードがあります。
私はデッドロックに陥っています。c3p0 のライブラリには、同期メソッドを使用する少なくとも 2 つのオブジェクトがあり、意図したロック順序を指定していないようです。接続をログに記録すると、ロックがかかっていてC3P0Registry
、最終的にはPoolBackedDataSource
(単純にデータソースのリストを作成すると、ハッシュコードにアクセスしてロックが発生します)。
接続プロバイダーをシャットダウンする ( を呼び出すC3P0ConnectionProvider.close()
) と、ロックが逆の順序で呼び出されます。しかし、子データソースがシャットダウンされている間、ログがトリガーされています。その結果、デッドロックが発生します。
私がc3p0ライブラリに行っている呼び出しは両方とも有効で、予想される呼び出しのようです:
C3P0ConnectionProvider.close()
C3P0Registry.getPooledDataSources()
また、(ドキュメントに明示的に記載されていない限り)独自のロック戦略を管理するのはライブラリの責任であるように思われます。(これは誰かを責めるために言っているのではありません..ベストプラクティスについての私の理解を確認するためだけです)
この問題にどのように対処すればよいですか? c3p0 は最新のメカニズムではなく同期メソッドを使用しているため、実際にロックをテストすることはできません。
DataSource
クロージング コードから、最初にC3P0Registry
ロックを取得してからDataSource
. 私は正しいロック順序を推測していますが、それが快適かどうかはわかりません。
ロギング呼び出しのロック順序を逆にすることはできないと思います。C3P0Registry
のリストを取得するにはが必要なので、それらへの参照を取得するために最初にロックしDataSources
ないと をロックできませんでした。DataSources
C3P0Registry
もちろん、別の解決策は、すべての c3p0 の上に別のより高いレベルのロックを提供することです。接続プールの場合、それはポイントを無効にしているようです。
今のところ、ログをロールバックしています。助けてくれてありがとう。
asp.net - asp.net アプリケーションでデータベースへの接続を管理する
asp.netでデータベースへの接続を管理する最良の方法は何ですか。
私のアプリケーションは、N 層アーキテクチャを使用して構築されています。DAL は、次のようなメソッドを持つ静的クラスで構成されています。
ここで注意すべき点は、接続を BLL から DAL に渡すことです。
以下は私が検討したポイントですが、どれも私には良くないように思われるので、アドバイスを求めています。
MasterPage で接続を作成し、それをオブジェクトに格納してから、作成時にビジネス オブジェクトに渡す必要があります (回避しようとしています)。
静的クラスを使用して接続を作成し、ビジネス オブジェクトのコンストラクターから CreateConnection のようなメソッドを呼び出す必要があります (何かしたいのですが、オブジェクトごとに接続したくありません。オブジェクトのすべてのインスタンスで共有されますが、asp.net はマルチスレッドであるため、静的クラスは接続を保存する意味がありません)
理想的には、このソリューションは Windows フォーム環境でもうまく機能する必要があります (現在のコンテキストでは、接続をセッションに保存せず、クラスの静的メソッドで取得する必要はありません)。
connection - jdbc接続プールで共有可能な接続と共有できない接続の違いは?
Sun アプリ サーバー エンタープライズ エディション 8.1 でホストされている Struts Web アプリケーションに奇妙な点があることに気付きました。
JDBC リソースの監視に使用される NumConnUsed は、ユーザー アクティビティが比較的非常に少ないにもかかわらず、接続全体で 100 のままです。
私はいくつかの調査を試み、次のリンクを見つけました http://j2ee-performance.blogspot.com/ http://www.ibm.com/developerworks/websphere/library/techarticles/0506_johnsen/0506_johnsen.html
「アプリケーションが共有可能な接続を閉じると、接続は完全に閉じられず、空きプールにも返されません。むしろ、共有接続プールに残り、同じリソースへの接続に対する同じ LTC 内の別の要求に備えます。 ."
上記のコメントに基づいて、私の web.xml リソース ref スコープが共有可能に設定されている場合、アプリケーション側で接続を閉じると、それは共有接続プールに残るため、numconnused は常に非常に高くなりますか?
connection-pooling - 接続リークを見つける方法は?
開発環境で負荷テスト/システム統合テストを行っているにもかかわらず、Sun アプリケーション サーバーにデプロイされた Struts Web アプリケーションがあります。接続リークのシナリオはありません。
ただし、本番環境では。使用中の接続が増加し続けるため、接続リークが見られます。
アプリケーション コード以外に、接続リークを引き起こす可能性のあるシナリオは何ですか?
mysql - Django 接続プーリングと時間フィールド
Django、SQLAlchemy、および MySQL で動作する接続プールを持っている人はいますか?
私はこのチュートリアル(http://node.to/wordpress/2008/09/30/another-database-connection-pool-solution-for-django-mysql/)を使用しましたが、うまくいきましたが、私が抱えている問題はいつでもDjango 固有の変換が使用されていないため、timedelta に変換されている時間フィールドを戻します。
django/db/backends/mysql/base.py からの変換コード
}))
記事の接続コード:
.net - Webサービス、ADO.NET接続プール、タイムアウトエラー
1つの呼び出しのみを公開する.asmxWebサービスがある場合。いくつかのパラメータを取り、それらの値をSQLServer2005テーブルのレコードとして挿入するもの。そのメソッドは、ADO.NET接続プールに対して可能な限り「親切」であるように見える必要がありますか?複数のクライアントで1秒間に10回呼び出される(広がる)としたら、どのように見えるでしょうか。微調整する必要がある他の設定はありますか?
現在、エラーが発生しています。
System.Web.Services.Protocols.SoapException:
サーバーはリクエストを処理できませんでした-> System.Data.SqlClient.SqlException:タイムアウトが期限切れになりました。操作の前にタイムアウト期間が経過したか、サーバーが応答していません。
接続プールに問題があった場合、エラーは異なりますか?これが接続プールの問題なのか、SOAPの制限なのか、データベースが非常にビジーで呼び出しが実際にタイムアウトしているのかをどのように判断できますか?
tomcat - tomcat 接続プーリング
Tomcat で単純なサーブレットを実行しています。サーブレットはデータベースに接続するため、接続プールを使用する必要があります。ただし、インターネット上のすべての例では、(開発者が) サーブレットが接続しているデータベースを決して変更しないことを前提としています。
たとえば、サンプルの context.xml ファイルを次に示します。
私の場合、テスト サーバー (postgresql) と運用サーバー (ms sql) があるため、context.xml で設定をハードコーディングできると仮定したすべてのチュートリアルは機能しません。
データベースの URL、認証などに 2 つの異なるプロパティ ファイルを使用しています。1 つはテスト サーバー用、もう 1 つは運用サーバー用です。私のサーブレット?
Netbeans 6.5 で「ビルド」を実行し、dist ディレクトリで war を取得し、いずれかのサーバーの tomcat アプリケーション ディレクトリにドロップできるようにしたいと考えています。新しい war がデプロイされた後に xml ファイルを変更する必要はありません。サーブレットは、各システムでプロパティ ファイルを取得する場所を認識しているため、プロパティ ファイルを接続プーリング プロパティと統合できれば、準備は万端です。
何か案は... ?
delphi - Delphi 7 アプリで OLEDB リソース プールを有効にする方法
Delphi 7 アプリでプーリングを有効にするには、何をする必要がありますか? 私の接続文字列は次のとおりです。
プロバイダー=SQLOLEDB.1;初期カタログ=%s;データ ソース=%s;パスワード=%s;ユーザー ID=%s;OLE データベース サービス=-1
SQLServer:GeneralStatistics UserConnections パフォーマンス カウンターを見ると、接続プールが実行されていないことがわかります。アプリケーションの実行時に激しく変動します。接続プーリングを使用すると、安定した状態になると思います。また、ログイン/秒とログアウト/秒のカウンターが両方とも非常に高いことがわかります。接続プールが使用されている場合、ログアウト/秒はゼロかほぼゼロになります。
検索すると、リソース プールに関する次の記事が見つかりました。
http://www.ddj.com/database/184416942
接続プールを取得するには、「ATL を使用して OLEDB SDK (または COM) レベルで作業している場合は、さらにコードを記述する必要があります」(接続文字列に OLE Db Services=-1 を追加する以外に) ことを示唆しています。
CDataSource db; CDBPropSet dbinit(DBPROPSET_DBINIT);
dbinit.AddProperty(DBPROP_AUTH_USERID, "MyName); dbinit.AddProperty(DBPROP_INIT_DATASOURCE, "MyServer); dbinit.AddProperty(DBPROP_INIT_CATALOG, "MyDb ); dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4); dbinit.AddProperty(DBPROP_INIT_LCID, (long)1033); dbinit.AddProperty(DBPROP_INIT_OLEDBSERVICES, (long)DBPROPVAL_OS_ENABLEALL); HRESULT hr = db .OpenWithServiceComponents(_T("sqloledb"), &dbinit);
残念ながら、そのコードは私にとってギリシャ語であり、それを Delphi に変換する方法がわかりません (または必要な場合でも)。
また、接続文字列をまったく変更しないように注意しています。リソース プールを有効にするために他に何をする必要があるかについて何か提案はありますか?
c# - 静的クラス間でデータベース接続を共有するための適切な設計?
私はいくつかの静的ユーティリティ クラスを持つ ac# dll を持っています。それらはすべてデータベースにアクセスする必要があり、現時点では各クラスに独自の接続があります。これは面倒になりつつあり、接続の単一の「プロバイダー」が必要なため、クラスは ConnProvider.Query(...) のようなことを行うことができます。ここで、ConnProvider はすべてのユーティリティ クラスからアクセス可能な静的クラスです。ConnProvider は何らかの接続プールを管理する必要があると思いますが、これがこれを実装する正しい方法であるかどうか、またそうであれば内部がどのように見えるかは完全にはわかりません。私はここで正しい軌道に乗っていますか?これは Web ベースではなく、スレッド セーフは必須ではありません (ただし、将来的には便利です)。また、この dll を使用するアプリ/マシンはほんの一握りです。
spring - スプリング接続プール
Springで接続プールを使用する方法を説明しているドキュメント/チュートリアルを教えてもらえますか?