sql >> データベース >  >> RDS >> Oracle

非常に高速で行をフェッチする

    インターフェイス、ファイアウォール、プロキシなどの基本的なネットワークと、DBサーバーのハードウェア要素をすでに確認していると仮定します。

    オプション1:

    代わりに:

    Class.forName("oracle.jdbc.OracleDriver");
    Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@//xxx.xxx.xxx.xxx:1521/orcl", "user", "pass");
    

    使用してみてください:

    OracleDataSource ods = new OracleDataSource();
    java.util.Properties prop = new java.util.Properties();
    prop.setProperty("MinLimit", "2");
    prop.setProperty("MaxLimit", "10");
    String url = "jdbc:oracle:oci8:@//xxx.xxx.xxx.xxx:1521/orcl";
    ods.setURL(url);
    ods.setUser("USER");
    ods.setPassword("PWD");
    ods.setConnectionCachingEnabled(true);
    ods.setConnectionCacheProperties (prop);
    ods.setConnectionCacheName("ImplicitCache01");
    

    詳細こちら

    オプション2:フェッチサイズ

    スティーブンが強く指摘しているように、fetchsizeは大きすぎるようです。

    また、フェッチサイズが500,000の場合、-Xmsと-Xmxは何ですか。また、プロファイラーでは、最大のヒープサイズは何ですか?

    オプション3:DB

    • src_schema.big_table_viewのインデックスとクエリプランを確認します

    • これはツールですか、それともアプリケーションシステムですか。ツールだけの場合は、DBシステム機能に基づいて、並列度、インデックスヒント、パーティショニングなどを追加できます

    オプション4:スレッド

    nと言います <アプリケーションサーバー上のコアの数

    nを開始できます それぞれが特定のバケットを処理するように構成されたライターのスレッド。 thread1は0から10000を処理し、nに書き込みます さまざまなファイルを作成し、すべての処理が完了したら、結合後に、できれば低レベルのOSコマンドを使用してファイルをマージします。

    とは言うものの、これはすべて、現在のように事前定義されたコードであってはなりません。 'n' バケットは実行時に計算する必要があります。そして、システムがサポートするよりも多くのスレッドを作成するのは、ねじ込みだけです。

    オプション5:

    の代わりに
    select * from src_schema.big_table_view
    

    使用できます

    SELECT column1||CHR(9)||column2||CHR(9).....||columnN FROM src_schema.big_table_view
    

    これにより、500000 StringBuildersの作成が回避されます。 およびStrings 。 (他の複雑なフォーマットが含まれていないと仮定します)。 CHR(9)はタブ文字です。

    オプション6:

    それまでの間、DBシステムの問題についてDBAに確認し、Oracleサポート を使用してSRを発生させることもできます。 。



    1. TSQLコードからWebサービスを呼び出すことはできますか?

    2. Android-SQLite-Date1とDate2の間で選択

    3. アクセスフォームカスケードコンボボックスは、ドロップダウンメニューに何も表示されません

    4. Oracleは連続した日付ブロックでデータを選択します