データベース内のデータの再分散
データを分散する要素の数を増減できます。ただし、これには、モデルの現行バージョンでデータ・インスタンスを追加または削除する他に、データベースの分散マップでデータ・インスタンスの要素を追加または削除する必要もあります。
データベースの分散マップを保守するための様々なタスクは次のとおりです。
-
分散マップにレプリカ・セットを追加します。分散マップにレプリカ・セットを追加すると(および分散マップが適用されると)、TimesTen Scaleoutによって、各レプリカ・セットの要素のデータの一部が新しく追加されたレプリカ・セットの要素に再分散されます。
-
置換せずに分散マップからレプリカ・セットを削除します。削除されたレプリカ・セットが別のレプリカ・セットで置換されない場合、分散マップが適用されると、削除されたレプリカ・セットの要素に格納されていたデータは、残りのレプリカ・セットの要素に均等に再分散されます。
-
データ・インスタンスを削除し、まだ分散マップで定義されていない別のデータ・インスタンスで置換します。この場合、分散マップが適用されると、削除されたデータ・インスタンスの要素から新しいデータ・インスタンスの要素にデータがコピーされます。他のレプリカ・セットの要素に格納されているデータは再分散されません。
-
分散マップからレプリカ・セットを除去します。レプリカ・セット内のすべての要素にリカバリ不可能な障害が発生している場合は、分散マップからレプリカ・セットを除去します。レプリカ・セットを除去すると、データが失われます。分散マップからレプリカ・セットを除去する場合は、次のいずれかを実行できます。
-
置換せずにレプリカ・セットを除去します。除去されたレプリカ・セットが別のレプリカ・セットで置換されない場合、分散マップが適用されると、除去されたレプリカ・セットのデータが失われ、他のレプリカ・セットの要素に格納されているデータは再分散されません。
-
レプリカ・セットを除去し、分散マップでまだ定義されていない別のレプリカ・セットで置換します。分散マップが適用されると、除去されたレプリカ・セットの要素内のデータが失われるため、新しいレプリカ・セットの要素は空になり、他のレプリカ・セットの要素に格納されているデータは再分散されません。
障害が発生したレプリカ・セットを分散マップから除去する方法の詳細は、「レプリカ・セットに永続的な障害が発生した要素がある場合のリカバリ」を参照してください。
-
ttGridAdmin dbDistribute
コマンドでは、要素を追加および削除し、データベースの分散マップからレプリカ・セットを除去して、残りのレプリカ・セットに既存データを再分散できます。ttGridAdmin dbDistribute -apply
コマンドを使用して分散マップに変更を適用すると、既存のデータが再分散されます。
ノート:
データ分散は、DDL文またはDML文とは同時に実行できません。そのため、データを挿入、更新または削除するDDL文またはDML文を現在実行している場合、ttGridAdmin dbDistribute -apply
コマンドはエラーで終了します。データ分散の処理中に、挿入、更新または削除を実行するDML文は、データ分散が完了するまでブロックされます。ただし、データ分散の処理中でも読取り専用文は実行できます。
図8-1に、後続のトピックの例で使用するdatabase1
データベースの要素のデータベース・スキーマとトポロジを示します。
分散マップへの要素の追加
データが分散される要素の数を増やすには、まず、グリッドに関連付けられているデータ・インスタンスの数を増やす必要があります。また、各データ領域グループのデータ・インスタンスの数が同じであることを確認する必要があります。たとえば、k
が3
に設定されているグリッドでは、使用可能な3つのデータ領域グループに、同数のデータ・インスタンスを追加する必要があります。
永続メモリー領域で使用可能なメモリーの量を増やすことを目的としてデータベースの分散マップに要素を追加する場合は、かわりに永続メモリー領域のサイズを大きくすることを検討してください。これを行うには、PermSize
属性の値を変更します。
ノート:
-
データ・インスタンスが含まれているすべてのホストで、
PermSize
属性の値に対応できる十分な物理メモリーが使用可能である必要があります。PermSize
属性の値を計算および変更する方法の詳細は、「PermSize属性の値の決定」および「データベース定義での接続属性の変更」を参照してください。 -
新しいデータ・インスタンスの要素に行が再分散された場合でも、以前、元の要素でこれらの行によって使用されていたメモリーがまだ表のページによって使用されており、これらのメモリーは同じ表の新しい行でのみ使用できることを考慮してください。
モデルの現行バージョンで使用可能な各データ領域グループのデータ・インスタンスを追加します。
% ttGridAdmin hostCreate -internalAddress int-host9.example.com -externalAddress ext-host9.example.com -like host3 -cascade -dataSpaceGroup 1
Host host9 created in Model
Installation installation1 created in Model
Instance instance1 created in Model
% ttGridAdmin hostCreate -internalAddress int-host10.example.com -externalAddress ext-host10.example.com -like host3 -cascade -dataSpaceGroup 2
Host host10 created in Model
Installation installation1 created in Model
Instance instance1 created in Model
% ttGridAdmin hostCreate -internalAddress int-host11.example.com -externalAddress ext-host11.example.com -like host3 -cascade -dataSpaceGroup 3
Host host11 created in Model
Installation installation1 created in Model
Instance instance1 created in Model
% ttGridAdmin modelApply
...
Verifying installations...............................................OK
Creating new installations............................................OK
Verifying instances...................................................OK
Creating new instances................................................OK
...
Checking ssh connectivity of new instances............................OK
Starting new data instances...........................................OK
ttGridAdmin modelApply complete
ノート:
データ・インスタンスをグリッドに追加する方法の詳細は、「データ・インスタンスの追加」および「モデルに加えた変更の適用」を参照してください。
図8-2に、database1
データベースの1つのデータ領域内のcustomers
表のハッシュ分散の例を示します。host9.instance1
データ・インスタンスの要素が空であることに注意してください。host9
ホストがデータ領域グループ1に割り当てられている場合でも、その要素は、host9.instance1
データ・インスタンスがdatabase1
データベースの分散マップに追加されるまで、データ領域1に含まれているとはみなされません。
host9.instance1
データ・インスタンスの要素をdatabase1
データベースの分散マップに追加します。
% ttGridAdmin dbDistribute database1 -add host9.instance1
Element host9.instance1 has been marked to be added
Distribution map change enqueued
データベースの分散マップのバランスを確実に維持するために、host9.instance1
データ・インスタンスの要素のレプリカを保持するデータ・インスタンスhost10.instance1
およびhost11.instance1
の要素を、database1
データベースの分散マップに追加します。
% ttGridAdmin dbDistribute database1 -add host10.instance1
Element host10.instance1 has been marked to be added
Distribution map change enqueued
% ttGridAdmin dbDistribute database1 -add host11.instance1 -apply
Element host11.instance1 has been marked to be added
Distribution map updated
ノート:
TimesTen Scaleoutからエラーが返されないようにするには、すべての新規要素をデータベースの分散マップに追加し終わった時点で、-apply
オプションのみを使用していることを確認します。
図8-3に、図8-2のデータ領域1内の要素に格納されているデータの一部が、新規データ・インスタンスhost9.instance1
の要素に再分散される様子を示します。
ttDistributionProgress
組込みプロシージャを使用して、データベースの任意の要素からの再分散操作の進行状況を確認できます。
Command> call ttDistributionProgress();
< 2018-12-04 14:49:48.872975, 1, 2, 1, Data Checkpoint, <NULL>, <NULL>, <NULL>, <NULL>, <NULL>, 1910, 0, 176, 1910, 8, 8 >
1 row found.
ttGridAdmin hostCreate
またはttGridAdmin dbDistribute
コマンドの詳細は、それぞれ『Oracle TimesTen In-Memory Databaseリファレンス』のホストの作成(hostCreate)またはデータベースの分散スキームの設定または変更(dbDistribute)を参照してください。
ttGridAdmin modelApply
コマンドの詳細は、「モデルに加えた変更の適用」および、『Oracle TimesTen In-Memory Databaseリファレンス』のモデル操作を参照してください。
ttDistributionProgress
組込みプロシージャの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttDistributionProgressを参照してください。
分散マップからの要素の削除
次のことに注意して、分散マップから要素を削除および置換できます。
-
1つの要素を削除して置換する場合:
-
k
が1
に設定されたグリッドの場合は、要素およびデータ・インスタンスの両方が使用可能な場合にのみ、要素を削除および置換できます。 -
k
が2
以上に設定されたグリッドがある場合は、レプリカ・セット内の別の要素を使用可能であれば、レプリカ・セット内の単一の要素を削除して別の要素で置換することにより、その要素を削除および置換できます。-remove
オプションを指定してttGridAdmin dbDistribute
コマンドを使用する方法の詳細は、「別の要素での要素の置換」および「レプリカ・セットの削除」を参照してください。
ノート:
レプリカ・セット内の単一要素に発生した障害問題の解決方法の詳細は、「レプリカ・セット内の障害が発生した要素の削除および置換」を参照してください。
-
-
レプリカ・セット全体を除去する場合:
-
レプリカ・セットのすべての要素に障害が発生した場合、そのレプリカ・セットに格納されているデータは使用できなくなります。「レプリカ・セットに永続的な障害が発生した要素がある場合のリカバリ」では、レプリカ・セットに障害が発生すると何が起こるか、TimesTen Scaleoutによるレプリカ・セットのリカバリ方法、またはレプリカ・セット内の要素を自動的にリカバリできない場合のレプリカ・セット全体の除去方法について説明しています。
-
-remove
オプションを指定したttGridAdmin dbDistribute
コマンドを使用すると、データベースの分散マップから要素が削除されます。データベースの分散マップから要素を削除する場合、次のオプションがあります。
別の要素での要素の置換
削除された要素が新しいデータ・インスタンスの要素で置換され、この変更をデータベースの分散マップに適用すると、レプリカ・セット内のデータが新しいデータ・インスタンスの要素にコピーされます。他のレプリカ・セットに格納されているデータは再分散されません。ホストを別のホストで置換するか、ホストを停止する必要があるが、データの分散方法は変更しない場合に、この方法を使用することを検討してください。
モデルの現行バージョンにデータ・インスタンスを追加します。
% ttGridAdmin hostCreate -internalAddress int-host9.example.com -externalAddress ext-host9.example.com -like host3 -cascade -dataSpaceGroup 1
Host host9 created in Model
Installation installation1 created in Model
Instance instance1 created in Model
% ttGridAdmin modelApply
...
Verifying installations...............................................OK
Creating new installations............................................OK
Verifying instances...................................................OK
Creating new instances................................................OK
...
Checking ssh connectivity of new instances............................OK
Starting new data instances...........................................OK
ttGridAdmin modelApply complete
ノート:
データ・インスタンスをグリッドに追加する方法の詳細は、「データ・インスタンスの追加」および「モデルに加えた変更の適用」を参照してください。
図8-4に、database1
データベースの1つのデータ領域内のcustomers
表のハッシュ分散の例を示します。host9.instance1
データ・インスタンスの要素が空であることに注意してください。host9
ホストがデータ領域グループ1に割り当てられていても、その要素はdatabase1
データベースの分散マップに追加されるまでは、レプリカ・セットの一部ではありません。
database1
データベースの分散マップで、host7.instance1
データ・インスタンスの要素を削除して、host9.instance1
データ・インスタンスの要素で置換します。
% ttGridAdmin dbDistribute database1 -remove host6.instance1 -replaceWith host9.instance1 -apply
Element host6.instance1 has been marked to be removed and replaced by element host9.instance1
Distribution map updated
図8-5に、host7.instance1
データ・インスタンスの要素に以前格納されていたデータが、置換された要素にコピーされる様子を示します。
削除された要素のチェックポイントおよびトランザクション・ログを破棄するには、ttGridAdmin dbDestroy -instance
コマンドを使用します。
% ttGridAdmin dbDestroy database1 -instance host6.instance1
Database database1 instance host6 destroy started
ttGridAdmin dbDistribute
またはttGridAdmin dbDestroy
コマンドの詳細は、それぞれ『Oracle TimesTen In-Memory Databaseリファレンス』のデータベースの分散スキームの設定または変更(dbDistribute)またはデータベースの破棄(dbDestroy)を参照してください。
レプリカ・セットの削除
データベースの分散マップからデータ・インスタンスの要素を置換せずに削除した場合、そのレプリカも削除する必要があります。つまり、レプリカ・セット全体を削除する必要があります。レプリカ・セットを削除すると、TimesTen Scaleoutによって、そのレプリカ・セットに格納されていたデータが残りのレプリカ・セットに再分散されます。データが格納されているホストの数を縮小する場合に、この方法を使用することを検討してください。
ノート:
データベース・サイズは、PermSize
属性の値に使用可能なレプリカ・セットの数を乗算した値として定義されることに注意してください。データベースの分散マップからレプリカ・セットを1つ削除すると、PermSize
属性で設定されているMBと同じMB数だけデータベース・サイズが縮小されます。データベースのデータベース・サイズを決定する方法の詳細は、「PermSize属性の値の決定」を参照してください。
レプリカ・セットを削除する前に、削除するレプリカ・セットに格納されているデータの一部を格納するための十分な領域が残りのレプリカ・セットにあることを確認してください。必要に応じて、PermSize
属性の値を大きくして、データベース・サイズを増やします。PermSize
属性の値を大きくする方法の詳細は、「データベース定義での接続属性の変更」を参照してください。
図8-6に、database1
データベースのcustomers
表のハッシュ分散の例を示します。
database1
データベースの分散マップからhost6.instance1
データ・インスタンスの要素を削除します。
% ttGridAdmin dbDistribute database1 -remove host6.instance1
Element host6.instance1 has been marked to be removed
Distribution map change enqueued
データベースの分散マップのバランスを確実に維持するために、host6.instance1
データ・インスタンスの要素のレプリカを保持するデータ・インスタンスの要素を、database1
データベースの分散マップから削除します。
% ttGridAdmin dbDistribute database1 -remove host7.instance1
Element host7.instance1 has been marked to be removed
Distribution map change enqueued
% ttGridAdmin dbDistribute database1 -remove host8.instance1 -apply
Element host8.instance1 has been marked to be removed
Distribution map updated
ノート:
-
どのデータ・インスタンスが別のデータ・インスタンスの要素のレプリカを保持しているかを調べるには、
-replicaset
オプションを指定してttGridAdmin dbStatus
コマンドを使用します。 -
TimesTen Scaleoutからエラーが返されないようにするには、データベースの分散マップから必要なデータ・インスタンスをすべて削除し終わった時点で、
-apply
オプションのみを使用していることを確認してください。
図8-7に、データベースの分散マップからレプリカ・セットを削除すると、その要素が以前に割り当てられていたデータ領域から削除される様子を示します。この図は、削除されたレプリカ・セットに以前に格納されていたデータが、各データ領域内に残っているレプリカ・セットに再分散される様子も示しています。
削除されたレプリカ・セットのチェックポイントおよびトランザクション・ログを破棄するには、ttGridAdmin dbDestroy -instance
コマンドを使用します。
% ttGridAdmin dbDestroy database1 -instance host6.instance1
Database database1 instance host6 destroy started
% ttGridAdmin dbDestroy database1 -instance host7.instance1
Database database1 instance host7 destroy started
% ttGridAdmin dbDestroy database1 -instance host8.instance1
Database database1 instance host8 destroy started
ttGridAdmin dbDistribute
またはttGridAdmin dbDestroy
コマンドの詳細は、それぞれ『Oracle TimesTen In-Memory Databaseリファレンス』のデータベースの分散スキームの設定または変更(dbDistribute)またはデータベースの破棄(dbDestroy)を参照してください。