web-dev-qa-db-ja.com

OLAPまたはOLTP-決定方法

1つのアプリケーションで使用されるデータベースを備えたSQL Expressサーバーがあります。 DBを最適化しようとしていますが、DBがOLTPまたはOLAPのどちらであるかがわかりません。

分析サーバーがインストールされておらず、DBはSQL Serverインスタンス内にあるため、OLTPである必要がありますが、DBで読み取り/書き込み比率を実行すると、次のようになります。

          Reads    Writes    Read%   Write %

DB file   400 000   75 000   85%     15%

DB log        250   30 000    1%     99%

標準OLTP DBは書き込みよりも読み取りが多いはずですよね?これはおそらくOLAP DB。

ハイパースレッディングテクノロジの使用、MAXDOP設定、およびキャッシュをライトスルーとして構成するか、ライトバックとして構成するかについて、私はこれを尋ねています。

私が使用しているクエリは次のとおりです。

SELECT DB_NAME(DB_ID()) AS [Database Name] ,
[file_id] , num_of_reads , num_of_writes , num_of_bytes_read , num_of_bytes_written ,
CAST(100. * num_of_reads / ( num_of_reads + num_of_writes ) AS DECIMAL(10, 1)) AS [# Reads Pct] ,
CAST(100. * num_of_writes / ( num_of_reads + num_of_writes ) AS DECIMAL(10,1)) AS [# Write Pct] ,
CAST(100. * num_of_bytes_read / ( num_of_bytes_read + num_of_bytes_written ) AS DECIMAL(10, 1)) AS [Read Bytes Pct] ,
CAST(100. * num_of_bytes_written / ( num_of_bytes_read + num_of_bytes_written ) AS DECIMAL(10,1)) AS [Written Bytes Pct]
FROM sys.dm_io_virtual_file_stats(DB_ID(), NULL) ;

上級DBAからの考えは?

3
Atapi

DBAの観点から見ると、OLAPとOLTPの主な違いは、クエリに適用するチューニング方法です。読み取り/書き込み比率は、あなたに役立つ何か。

私は違いを説明するために使用する小さな「魔法の象限」を持っています(あなたの場合、BI/DWとETLをOLAPと同じと考えてください):

WorkLoad Categories

基本的に、クエリ結果を生成するために大量のデータを操作する必要がある場合、あなたはOLAPです。逆に、ほとんどデータに触れずに戻り値を生成できる場合は、OLTPです。

明らかに、インデックス作成戦略が不十分な場合、OLTPはOLAPのように見える場合があります-常にテーブルスキャンを実行することになるためです。良いその区別をする方法は、システム内の最も重要な上位10のクエリがどの程度のデータに触れなければならないかを調べることです。

ワークロードの大部分が確定したら、ワークロード固有のチューニング手法の適用を開始できます。以下に、検討する可能性のあるワークロード固有のトリックをいくつか示します(常に特定のワークロードに合わせて調整してください)。

OLAP:

  • ハッシュ結合を優先
  • テーブルスキャン速度を最適化する(通常、シーケンシャルI/Oのデータをレイアウトすることにより)
  • 多くの場合、集計ビューはインデックスよりも優れています
  • 列ストアインデックスはBツリーよりも優れています
  • シーケンシャルI/O
  • 積極的に非正規化
  • 高いMAXDOPを使用する
  • 帯域幅用にネットワークを最適化

OLTP:

  • ループ結合を優先
  • インデックスシーク用に最適化する(常にデータへのインデックス付きパスが必要です)
  • めったに集計しない
  • Bツリーインデックス
  • ランダムI/O
  • データベースを3NFに保持する
  • MAXDOP 1を使用
  • 待ち時間のためにネットワークを最適化
15
Thomas Kejser