テーブル構造 - よく寄せられる質問Issue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 3 つの拡張モデル (TPC、TPH、TPP)、タスクフラット化、ハイブリダイゼーション、ストレージエイリアス、グロミング、これらの構造がパフォーマンスとスキーマの変更に与える影響など、ServiceNow のテーブル構造に関するよくある質問への回答をご覧ください。 よく寄せられる質問 ServiceNow プラットフォームではどのようなテーブル構造が使用されているか? ServiceNow では、クラス別テーブル (TPC)、階層別テーブル (TPH)、パーティション別テーブル (TPP) の 3 つのテーブル拡張モデルが使用されます。 クラス別テーブル (TPC) TPC は、一般的なデータベーステーブルに使用される標準のテーブル構造です。親子テーブル構造では、すべての直系の子孫が親テーブルからフィールドと列を継承します。子クラスのレコードは、子テーブルとその各親テーブルに対応するレコードを持っています。各レコードには、そのクラスに固有のフィールドに加えて、階層内のすべてのテーブルに共通のsys_idフィールドが含まれています。 階層別テーブル (TPH) TPH は Dublin リリースで導入され、タスクテーブル階層にのみ適用されます。階層内のすべてのクラスは、「task」という名前の単一の物理データベーステーブルに格納されます。これにより、タスクの子孫テーブルをクエリするときに内部結合が不要になり、ユーザーのパフォーマンスが向上します。 パーティション別テーブル (TPP) TPP は Jakarta リリースで導入され、CMDB 階層内のテーブルにのみ適用されます。TPH と同様に、CMDB テーブルは単一のフラット化されたテーブルです。違いは、TPPでは複数のパーティションテーブルを作成できることです。パーティション化により、データベースの制限(特に64 KBの静的行サイズ制限と64インデックス制限)に達することなく、より多くの列を追加できます。TPP テーブルクエリはタスクテーブルクエリとは外観が異なることに注意してください。 テーブルの拡張モデルを選択できますか? いいえ。プラットフォームは、テーブルの作成時に拡張モデルを設定します。 スタンドアロンテーブルまたはスタンドアロンテーブルの拡張 - TPC を使用します。タスク階層内のテーブルの拡張 - 通常は TPH を使用します。状況によっては、TPC テーブルとして作成して、ハイブリッド TPH/TPC 階層を作成できます。最も一般的な状況は、新しいテーブルが追加された時点でタスクテーブルの全体的なサイズがしきい値を超えたときです。CMDB 階層内のテーブルの拡張 - その階層内のベーステーブルに指定された拡張モデルを使用します。Jakarta にアップグレードしたときに階層が TPP に変換されなかった場合を除き、これは通常 TPP です (その場合は TPC を使用します)。 拡張モデルは、階層のベーステーブルでのみ設定されます。空の場合、TPC がデフォルトです。 TPH が導入されたのはなぜですか? TPH は Dublin リリースで導入され、TPC 階層内の子孫テーブルをクエリするときに必要な内部結合を排除することで、タスクテーブルのクエリパフォーマンスを向上させます。 TPHの利点は何ですか? 単一の物理タスクテーブルを使用すると、子孫テーブルをクエリするときに必要な内部結合が排除され、クエリのパフォーマンスが向上します。 TPHの欠点は何ですか? TPH は多数のテーブルで構成される単一のスーパーテーブルを作成するため、データベースの制限に達するリスクが高まります。 64 KB の静的行サイズ制限1,000 列のハード制限64 個のインデックス制限 (基礎となるデータベースのバージョンに応じて最大 128 個のインデックス) 物理ストレージ列をタスクテーブルに作成する必要がある場合は、ALTER 操作が開始されます。タスクテーブルは大きなスーパーテーブルであるため、列の追加、インデックスの追加、フィールド長の変更などのスキーマレベルの変更には時間がかかることがあります。ALTER プロセスでは、ライブ物理テーブルから一時テーブルにすべてのデータがコピーされます。必要な時間は、タスクテーブルのサイズによって異なります。 タスクのフラット化とは何ですか? タスクのフラット化は、タスクテーブル階層をクラスごとのテーブル (TPC) から階層ごとのテーブル (TPH) に変換するプロセスであり、複数の物理テーブルを 1 つの大きなスーパーテーブルに結合します。 ハイブリダイゼーションとは? ハイブリダイゼーションは、その階層内の各テーブルに対して TPC テーブルを作成して入力することで、タスクテーブルの直接の子階層 (インシデントや問題など) のタスクフラット化を元に戻します。まだ TPH である階層のみをハイブリッド化できます。一度ハイブリッド化すると、プロセスを元に戻すことはできません。 ハイブリダイゼーションはいつ考慮されますか? ハイブリダイゼーションは、タスクテーブルがデータベースの制限(64 KBの静的行サイズまたは1,000列の制限)に近づいており、古い列を削除することも、スタンドアロン関連テーブルを導入するなどして過剰な列を追加しないようにデータモデルを再設計することもできない場合に考慮されます。 ハイブリダイゼーションの仕組み 最適な候補階層を特定するには、分析が必要です。選択した階層には、その階層内でのみ使用されるフィールドが含まれている必要があります。これにより、ハイブリダイゼーション後にこれらのフィールドをタスクテーブルから削除して、静的行サイズと合計列数を減らすことができます。選択した階層内のすべてのテーブルが TPC テーブルに変換されます。 ハイブリダイゼーション後、データを取得するときにハイブリダイズされたテーブルとタスクテーブルの間で結合が必要になります。挿入、更新、または削除操作は、通常、複数のテーブルに対して実行されます。 重要: ハイブリダイゼーションは不可逆的であり、パフォーマンスに影響を与える可能性があります。他のすべての代替手段がなくなってからこのオプションを検討し、本番環境に適用する前に非本番インスタンスへの影響を十分にテストしてください。 ストレージエイリアスとは何ですか? ストレージエイリアスレコードには、バックエンドデータベースで論理要素と物理要素がどのようにマッピングされるかを識別する TPC テーブルと TPH テーブルの情報が保持されます。 TPC テーブル - アプリケーション要素名が物理列名と一致します。たとえば、カスタムテーブル u_test の u_outage という名前のフィールドは、データベースには u_outage として表示されます。TPH テーブル :要素は論理要素として存在し、生成された名前を持つタスクテーブルの物理列にマップされます。たとえば、UI からフラット化された u_test という名前のフィールドは、論理的にはu_testとして表示されますが、物理的には a_str_1 という名前のタスクのフィールドにマップされます。 TPH または TPP では、物理フィールドを論理フィールドのmax_lengthよりも長くすることができます。 ストレージエイリアスは、テーブル名または要素名が基礎となるデータベースの文字制限を超えた場合にも使用されます。テーブル名または要素名が 30 文字を超える場合、名前は短縮され、基礎となる物理テーブルでエイリアスが使用されます。プラットフォームは、データベースに対して SQL を実行するときに、長い名前とそのエイリアスの間でマッピングされます。 グロミングとは何ですか? グロミングは TPH テーブルに適用され、兄弟要素やいとこ要素など、直接的な関係のない複数の論理要素をタスク テーブルの 1 つの物理ストレージ列にマッピングできます。これにより、64 KB の静的行サイズ制限、1,000 列のハード制限、64 インデックスの制限などのデータベースの制限に達するリスクを軽減できます。 グロミングは CMDB 階層の TPP テーブルにも適用されますが、TPP では、フィールドが追加されたベーステーブルからフィールドを継承するすべてのテーブルにストレージエイリアスが必要です。TPC では、ストレージエイリアスは、フィールドが追加されるテーブルに対してのみ指定されます。 テーブルに列を作成する時間が異なるのはなぜですか? 新しい辞書エントリが作成されると、次の 2 つのいずれかが発生します。 システムは、新しい要素を既存の物理列にグロムしようとします。これは、TPH および TPP 拡張モデルにのみ適用されます。glom に使用できる物理列がない場合、システムはタスクテーブルで ALTER を実行して新しい物理列を作成します。 ALTER が必要な場合、列の作成にかかる時間はタスクテーブルのサイズによって異なります。ALTER は一時テーブルを作成し、ライブ物理タスクテーブルからすべてのデータをそのテーブルにコピーします。このプロセスはバックエンドデータベースで実行され、UI には表示されません。タスクテーブルは数百万のレコードを含むことができるスーパーテーブルであるため、この操作にはかなりの時間がかかることがあります。 Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } サポートされているすべてのリリース Resolution<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 該当なし Related Links<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } テーブルのフラット化 テーブル拡張とフラット化