ヘッダーをスキップ
Oracle TimesTen Cache Connect to Oracle開発者および管理者ガイド
リリース7.0
E05172-03
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

キャッシュ・グループのロードおよびリフレッシュ

Oracleのデータは、LOAD CACHE GROUPまたはREFRESH CACHE GROUP文のいずれかを使用してキャッシュ・グループにロードできます。いずれのSQL文の場合も、WHERE句またはWITH ID句を使用して(または使用せずに)データがOracleからキャッシュ・グループにコピーされます。ロードとリフレッシュの違いは、次のとおりです。

例4.23

OracleからWesternCustomersキャッシュ・グループにデータをロードするには、次のように入力します。

LOAD CACHE GROUP WesternCustomers

    COMMIT EVERY 256 ROWS;

例4.24

顧客のZIPコードが94022であるキャッシュ・グループ・インスタンスのみOracleからWesternCustomersキャッシュ・グループにロードするには、次のように入力します。

LOAD CACHE GROUP WesternCustomers

    WHERE (user1.customer.zip = 94022)

    COMMIT EVERY 256 ROWS;

例4.25

WesternCustomersキャッシュ・グループ全体をOracle表からリフレッシュするには、次のように入力します。

REFRESH CACHE GROUP WesternCustomers

    COMMIT EVERY 256 ROWS;

例4.26

注文品目2353に関連付けられているキャッシュ・グループ・インスタンスのみリフレッシュするには、次のように入力します。

REFRESH CACHE GROUP WesternCustomers

    WHERE (user1.orderdetails.itemid = 2353)

    COMMIT EVERY 256 ROWS;

詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のLOAD CACHE GROUPおよびREFRESH CACHE GROUPに関する説明を参照してください。

この項の後半では、次の内容について説明します。

AUTOREFRESHおよびREADONLYキャッシュ・グループのロードおよびリフレッシュ

AUTOREFRESHおよびREADONLYキャッシュ・グループのロードとリフレッシュには、次の制約があります。

AUTOREFRESHキャッシュ・グループをロードするには、次の手順を実行します。

  1. AUTOREFRESHの状態をPAUSEDに設定します。
  2. ALTER CACHE GROUP testcache SET AUTOREFRESH STATE PAUSED;

    COMMIT;

  3. キャッシュ・グループをアンロードします。
  4. UNLOAD CACHE GROUP testcache;

    COMMIT;

  5. キャッシュ・グループをロードします。
  6. LOAD CACHE GROUP testcache COMMIT EVERY 256 ROWS;

    COMMIT;

  7. AUTOREFRESHの状態をONに設定します。
  8. ALTER CACHE GROUP testcache SET AUTOREFRESH STATE ON;

    COMMIT;

「キャッシュ・グループのアンロード」を参照してください。

WITH IDを使用したキャッシュ・グループのロードおよびリフレッシュ

WITH ID句を使用すると、WHERE句を使用せずに、主キーの値に基づいてキャッシュ・グループをロードまたはリフレッシュできます。主キー値は、リテラルまたはバインディング・パラメータとして表現できます。WITH ID句は、同等のWHERE句より高速に処理できます。また、ロード・トランザクションが失敗したときにロールバックすることもできます。

WITH ID句は、AUTOREFRESHまたはREADONLYキャッシュ・グループに対しては使用できません。

WITH ID句では、キャッシュ・インスタンスを1つずつロードできます。主キーがorder_idorders表があるとします。顧客が特定の注文に関して問い合せる場合、指定されたorder_idのキャッシュ・インスタンスをロードすることでその情報をロードできます。

例4.27

Oracleでsampleという表を作成します。

CREATE TABLE sample (a NUMBER, b NUMBER, c NUMBER,

    PRIMARY KEY (a,b));

次の行が含まれるように、表にデータを移入します。

         A          B          C

---------- ---------- ----------

         1          2          3

         4          5          6

         7          8          9

TimesTenでキャッシュ・グループを作成します。

CREATE SYNCHRONOUS WRITETHROUGH CACHE GROUP testcache

    FROM sample

      (a NUMBER, b NUMBER, c NUMBER, PRIMARY KEY (a,b));

キャッシュ・グループに主キーとして(1,2)を持る行をロードします。

LOAD CACHE GROUP testcache WITH ID (1,2);

1 cache instance affected.

SELECT * FROM sample;

< 1, 2, 3>

1 row found.

例4.28

主キーとして(4,5)を持る行でtestcacheキャッシュ・グループをリフレッシュします。

REFRESH CACHE GROUP testcache WITH ID (4,5);

1 cache instance affected.

SELECT * FROM sample;

< 1, 2, 3 >

< 4, 5, 6 >

2 rows found.

複数の表が含まれているキャッシュ・グループのロードおよびリフレッシュ

キャッシュ・グループに複数の表が含まれていて、Oracleがロードまたはリフレッシュ対象の表を現在更新している場合は、TimesTenの分離レベルをシリアライズ可能に設定してから、LOAD CACHE GROUPまたはREFRESH CACHE GROUP文を実行した方がよい場合があります。これによって、TimesTenはシリアライズ可能な方法でOracle表を問い合せ、ロードされたデータのトランザクション一貫性が保証されます。キャッシュ・グループをロードまたはリフレッシュした後、分離レベルをREAD_COMMITTEDに再設定して同時実行性を向上させることができます。

例4.29

ttIsqlセッション中、キャッシュ・グループをロードする前に分離レベルを再設定することができます。これは、キャッシュ・グループをロードまたはリフレッシュする場合、非ロギングモードに適用されます。

Command> isolation SERIALIZABLE;

Command> LOAD CACHE GROUP WesternCustomers

>COMMIT EVERY 1000 ROWS;

Command> isolation READ_COMMITTED;

大きな表のロードおよびリフレッシュにおけるパフォーマンスの向上

LOAD CACHE GROUP文またはREFRESH CACHE GROUP文でPARALLEL句を使用すると、大きな表をロードまたはリフレッシュするときのパフォーマンスを向上できます。使用するスレッドの数を指定します。1つのスレッドでOracleの行がフェッチされ、残りのスレッドでキャッシュ・グループにデータが挿入されます。指定するスレッド数は、ロード可能なCPUの数を超えないようにしてください。

例4.30

REFRESH CACHE GROUP WesterCustomers

    COMMIT EVERY 256 ROWS

    PARALLEL 2;