SQL Server
 Computer >> コンピューター >  >> プログラミング >> SQL Server

MSSQLServerのアーキテクチャについて学ぶ

これまでの記事では、SQL Serverについて、コンピューターにSQLServerをインストールする方法について簡単に説明しました。このセクションでは、SQLServerのアーキテクチャについて学習します。

SQL Serverアーキテクチャを次のセクションに分割して、理解しやすくします。

  1. 一般的なアーキテクチャ-一般
  2. メモリアーキテクチャ-メモリ
  3. データファイルアーキテクチャ-データファイル
  4. ログファイルアーキテクチャ-ログファイル

次に、上記で分類した各タイプのSQLServerアーキテクチャの詳細について説明します。

MSSQLServerのアーキテクチャについて学ぶ

一般的なアーキテクチャ-一般
  1. クライアント: リクエストが行われる場所。
  2. クエリ: SQLクエリは高級言語です。
  3. 論理ユニット: キーワード、式、演算子、。
  4. N / Wパケット: ネットワークに関連するコード。
  5. プロトコル: SQL Serverには、次の4つのプロトコルがあります。
    1. 共有メモリ:ローカル接続とトラブルシューティングの目的で。
    2. 名前付きパイプ:LANでの接続用。
    3. TCP / IP:WAN接続用。
    4. VIA-仮想インターフェースアダプター:特別なハードウェア要件はベンダーによって設定されており、SQL2012バージョンではサポートされていません。
  6. サーバー: SQL Servicesがインストールされ、データベースがある場所。
  7. リレーショナルエンジン: これは実際の実行が行われる場所です。クエリアナライザ、クエリオプティマイザ、クエリランタイムが含まれています。
  8. クエリパーサー(コマンドパーサー) およびコンパイラ(翻訳者):これら 2人の担当者が、クエリの構文をチェックし、クエリをマシンの言語に変換する責任があります。
  9. クエリオプティマイザー: 入力をクエリ、統計、および代数ツリーとして取得することにより、実行プランとして出力を準備します。
  1. 実行計画: ロードマップのように、クエリの実行の一部として実行されるステップの順序が含まれています。
  2. クエリエグゼキュータ: これは、実行プランの助けを借りて、クエリが段階的に実行される場所であり、ストレージエンジンに接続される場所でもあります。
  3. ストレージエンジン: ストレージシステム(ドライブ、SANなど)でのデータの保存と取得、データの操作、トランザクションのロックと管理を担当します。
  4. SQL OS: ホストマシン(Windows OS)とSQLServerの間にあります。すべての操作は、SQLOSによって「処理」されるデータベースエンジンで実行されます。 SQL OSは、バッファプールによるメモリ管理、ログバッファ、デッドロック検出、ブロックおよびロック構造の使用など、さまざまなオペレーティングシステムサービスを提供します。
  5. チェックポイント: チェックポイントは内部プロセスであり、変更されたすべてのページ(ダーティページと呼ばれる)をバッファキャッシュから物理ドライブに書き込みます。さらに、ログバッファから物理ファイルにログを記録します。ダーティページをドライブに記録することは、ダーティページの強化とも呼ばれます。
  6. 怠惰な作家: Lazy Writerは、バッファプールのメモリを解放するというまったく別の理由で、ダーティページとハードドライブをプッシュします。これは、SQLServerのメモリが不足している場合に発生します。このプロセスは内部プロセスによって制御され、設定はありません。

SQL Serverは常にメモリ使用量を監視して、リソースの可用性と競合を評価し、一定量の空き領域が常に利用可能であることを確認します。リソースの競合を検出すると、Lazy Writerがトリガーされ、ダーティページがドライブに移動してメモリが解放されます。最も最近使用されていないアルゴリズム(LRU)を使用して、ハードドライブにプッシュされるページを決定します。 Lazy Writerが常にアクティブである場合、メモリのボトルネックが発生する可能性があります。

メモリアーキテクチャ-メモリ

メモリアーキテクチャの主な機能は次のとおりです。

  1. すべてのデータベースソフトウェアの基本的な設計目標の1つは、ディスクの読み取りと書き込みのプロセスが最もリソースを消費するアクションの1つであるため、ディスクI/Oを最小限に抑えることです。
  2. Windows内部メモリは仮想アドレス空間で呼び出すことができ、カーネルモード(OSモード)とユーザー(SQL Serverなどのアプリケーション)で共有されます。
  3. SQL Serverのユーザーアドレス空間は、MemToLeaveとBufferPoolの2つの部分に分かれています。
  4. MemToLeave(MTL)とバッファプール(BPool)のサイズは、起動プロセス中にSQLServerによって決定されます。
  5. バッファ管理は、高いI/Oパフォーマンスを実現するための重要なコンポーネントです。これには、データベースにアクセスして更新するバッファマネージャと、I/Oファイルをデータベースにカットするバッファプールページの2つのメカニズムが含まれています。
  6. バッファプールはいくつかの部分に分かれています。最も重要なのは、バッファキャッシュとプロシージャキャッシュです。バッファキャッシュは、頻繁にアクセスされるデータをキャッシュから抽出できるように、データページをメモリに保持します。交換プロセスでは、ドライブからデータページが読み取られます。キャッシュからデータを読み取ると、メモリからデータにアクセスするよりも遅いI / O操作の数が最小限に抑えられるため、パフォーマンスが最適化されます。
  7. プロシージャキャッシュは、実行プランが作成される回数を最適化するために、ストアドプロシージャと実行プランを保持します。容量と操作に関する情報は、DBCCPROCCACHEコマンドを使用してプロシージャキャッシュにあります。
  8. バッファプールの他の部分は次のとおりです。
    1. システムレベルのデータ構造:データベースとロックに関するインスタンスレベルのデータが含まれています。
    2. ログキャッシュ:トランザクションページの読み取りと書き込み専用です。
    3. 接続コンテキスト:インスタンスとの各接続には、接続の現在の状態を記録するための小さなメモリ領域があります。この情報には、ストアドプロシージャとユーザー定義の関数パラメーター、マウスカーソルの位置などが含まれます。
    4. スタックスペース:Windowsは、SQLServerで始まるスレッドごとにスタックスペースを割り当てます。
データファイルアーキテクチャ-データファイル

このアーキテクチャには次のコンポーネントがあります:

ファイルグループ:

データベースファイルは、配布および管理の目的でファイルグループにグループ化できます。ファイルは、ファイルグループのメンバーにのみなれます。ログファイルのサイズはデータボリュームとは別に管理されるため、ログファイルをファイルグループにグループ化することはできません。

SQL Serverには、プライマリとユーザー定義の2種類のファイルグループがあります。プライマリには、メインデータファイルと、ファイルグループに特に割り当てられていないファイルが含まれます。システムテーブルのすべてのページは、プライマリに割り当てられます。ユーザー定義はユーザー定義のファイルグループであり、file groupを使用して指定されます。 データベースを作成または削除するコマンドのキーワード。

各データベースのファイルグループは、デフォルトのファイルグループとして機能します。 SQL Serverがページをテーブルまたはインデックスに割り当てると(作成時にファイルグループには含まれません)、そのページは既定のファイルグループになります。デフォルトのファイルグループをファイルグループから別のファイルグループに変換するには、db_owner固定データベースの役割が必要です。

Primaryはデフォルトのファイルグループです。ユーザーは、ファイルと個々のファイルグループをバックアップするために、db_owner固定データベースロールを持っている必要があります。

ファイル

データベースには、プライマリファイル(メインデータファイル)、セカンダリ(セカンダリデータファイル)、ログ(ログファイル)の3種類があります。プライマリはデータベースの開始点であり、データベース内の他のファイルを指します。

各データベースにはプライマリがあります。メインデータファイルの拡張子も設定できますが、.mdfをお勧めします。セカンダリデータファイルは、メインデータファイル以外のファイルです。データベースには、追加のデータファイルが多数ある場合と1つしかない場合があります。追加データファイルの拡張子は.ndfに設定する必要があります。

ログファイルには、データベースのリカバリに使用されるすべての情報が保持されます。データベースには、少なくとも1つのログファイルが必要です。データベースに複数のログファイルを含めることができます。拡張子は.ldfに設定する必要があります。

データベース内のすべてのファイルの場所は、マスターデータベースとデータベースのプライマリファイルの両方に記録されます。ほとんどの場合、データベースツールはマスターデータベースのファイルの場所を使用します。

ファイルには、論理と物理の2つの名前があります。論理は、すべてのT-SQLコマンドでファイルを参照するために使用されます。物理名はOS_file_nameであり、オペレーティングシステムのルールに従う必要があります。データファイルとログファイルはFATまたはNTFSファイルシステムに配置できますが、圧縮ファイルシステムには配置できません。データベースには最大32,767個のファイルを含めることができます。

範囲

エクステントは、各テーブルとインデックスにスペースが割り当てられる基本単位です。各エクステントは、隣接する8ページまたは64KBです。 SQL Serverには、UniformとMixedの2種類のエクステントがあります。ユニフォームは、最大8つのオブジェクトで構成される単一の混合オブジェクトで構成されます。

ページ

ページ(ページ)は、SQLServerのデータストレージの基本単位です。ページのサイズは8KBです。各ページの開始は96バイトのタイトルで、ページタイプ、ページの空き容量、ページ所有者のIDなどのシステム情報を格納するために使用されます。 SQLServerには9種類のデータページがあります。

  1. データ:text、ntext、imageのすべてのデータを含むデータ行。
  2. インデックス:アイテムのインデックスを作成します。
  3. TexImage:テキスト、ntext、画像のデータ。
  4. GAM:指定された範囲に関する情報。
  5. SGAM:エクステントに関する情報はシステムレベルで割り当てられます。
  6. ページ空き容量(PFS):ページで使用可能な空き容量に関する情報。
  7. インデックス割り当てマップ(IAM):テーブルまたはインデックスによって使用されるエクステントに関する情報。
  8. 一括変更マップ(BCM):エクステント情報は、最後のバックアップコマンドからの一括操作によって変更されます。
  9. Differential Changed Map(DCM):最後のデータベースバックアップコマンド以降にエクステントに関する情報が変更されました。
ログファイルアーキテクチャ-ログファイル

SQL Serverのトランザクションログは、一連のログレコードである場合に正しく機能します。各ログは、ログシーケンス番号(LSN)によって識別されます。この番号には、ログが属するトランザクションのIDが含まれています。

ログは、実行されたデータの変更またはアクティビティを記録するか、データの編集前後の画像を取得します。前の画像は操作が実行される前のデータのコピーであり、次の画像は操作が実行された後のデータのコピーです。

操作を回復する手順は、ログの種類によって異なります。

  1. 論理演算がログに記録されます。
  2. 前の論理操作に戻るには、操作が再度実行されます。
  3. 背後の論理演算に戻るには、逆論理演算が実行されます。
  4. 前の画像と次の画像が記録されます。
  5. 前の操作に戻るには、次の画像が適用されます。
  6. 次の操作に戻るには、前の画像が適用されます。

さまざまな操作がトランザクションログに記録されています。そこでは、次の操作を利用できます。

  1. 各トランザクションを開始および終了します。
  2. システムストレージプロシージャまたはシステムテーブルを含むテーブルへのデータ定義言語コマンド(DDL)の変更を含む、すべてのデータ変更(挿入、更新、削除)。
  3. すべての範囲と割り当て、ページ割り当てのキャンセル。
  4. テーブルとインデックスを作成または削除します。

ロールバック操作もログに記録されます。各トランザクションは、コマンドまたはエラーメッセージを実行するためのロールバックに必要な十分なログスペースがあることを確認するために、ログにスペースを保持します。このスペースは、トランザクションが完了すると解放されます。

最初のログ(データベース全体を正常に復元するために必要)から最後のログまでのログファイルの部分は、ログアクティビティセクションまたはアクティブログと呼ばれます。これは、データベースを完全にリカバリするために必要なログセクションです。アクティブなログのどの部分も文字化けしていません。最初のログレコードのLSNは、最小リカバリLSN(最小LSN)と呼ばれます。

SQL Serverデータベースエンジンは、各物理ログファイルをいくつかの仮想ログファイルに分割します。仮想ログファイルのサイズは固定されておらず、物理ログファイルごとに固定数の仮想ログファイルがありません。

データベースエンジンは、ログファイルを作成または拡張するときに、仮想ログファイルのサイズを自動的に選択します。データベースエンジンは、少数の仮想ファイルを維持しようとします。管理者が仮想ログファイルのサイズを設定または設定することはできません。ログ物理ファイルが小さいサイズと値growth_incrementで定義されている場合にのみ、仮想ログファイルはシステムパフォーマンスに影響します。

サイズ値はログファイルの初期サイズであり、growth_incrementは、ファイルが新しいスペースを必要とするたびにファイルに追加されるスペースの量です。小さな増分が多いためにログファイルが大きなサイズに達すると、多くの仮想ログファイルが作成されます。これにより、データベースの起動とログのバックアップおよびリカバリ操作が遅くなる可能性があります。

アドバイスは、ログファイルに必要な最終サイズに近いサイズ値と比較的大きなgrowth_increment値を割り当てる必要があることです。 SQL Serverは先行書き込みログ(WAL)を使用して、関連するログがドライブに書き込まれる前に、ドライブに書き込まれるデータに変更がないことを確認します。これは、トランザクションプロパティのACIDを維持するのに役立ちます。

SQLの代数

Algebrizerについて少しお話ししたいと思います。Algebrizerは、クエリ実行プロセスのプロセスです。パーサーの後で動作し始めました。クエリパーサーが正しいクエリを見つけると、Algebrizerに移動し、Algebrizerの作業が開始されます。 Algebrizerは、オブジェクトと列名(クエリで指定した、またはクエリによって参照されている)を確認する役割を果たします。たとえば、列名がクエリに誤って書き込まれた場合、Algebrizerはそれを確認し、エラーを作成する責任があります。 Algebrizerは、特定のクエリで処理されているすべてのタイプのデータも識別します。 Algebrizerは、GROUP BYであるかどうか、および結合された列が適切な場所に配置されているかどうかを確認します。たとえば、次のクエリを記述し、Ctrl + F5を押して解析するだけの場合、エラーは発生しません。ただし、F5キーを押してクエリを実行すると、Algebrizerが機能し、エラーが返されます。

 USE AdventureWorks 
GO
SELECT MakeFlag,SUM(ListPrice)
FROM Production.Product
GROUP BY ProductNumber

SQLServerのチェックポイント

SQLServer2012には4種類のチェックポイントがあります。

  1. 自動: このタイプは最も一般的なチェックポイントであり、バックグラウンドプロセスの形式で実行され、サーバー構成オプションの回復間隔で指定された時間内にSQLServerデータベースを復元できることを確認します。
  2. 間接: このチェックポイントは、SQL Server 2012でのみ使用できます。これはバックグラウンドで実行されるプロセスでもありますが、構成オプションで特定のデータベースの回復時間を指定する特定のユーザーのみが対象です。特定のデータベースのTarget_Recovery_Timeを選択すると、サーバーに割り当てられた回復間隔が上書きされ、データベースの自動チェックポイントが回避されます。
  3. 手動: このチェックポイントは他のSQLコマンドと同じように実行されます。チェックポイントコマンドを作成すると、実行されて完了します。このチェックポイントは、現在のデータベースでのみ実行されます。オプションでCheckpoint_Durationを指定して、チェックポイントを完了する時間を指定できます。
  4. 内部: ユーザーとして、次のような特定のアクションでこのタイプのチェックポイントを制御することはできません。
    1. シャットダウンが失敗しない限り、すべてのデータベースでチェックポイントアクションをシャットダウンします。通常ではありません(nowithコマンドでシャットダウンを使用します)。
    2. リカバリモデルがFullBulk-loggedからSimpleに変更されたとき。
    3. データベースのバックアップ中。
    4. データベースがシンプルリカバリモードの場合、チェックポイントプロセスは自動的に実行されるか、ログが70%いっぱいになると、またはサーバーのリカバリ間隔オプションに基づいて実行されます。
    5. ログ/データファイルを追加または削除するALTERDATABASEコマンドもチェックポイントを開始します。
    6. チェックポイントは、データベースリカバリモデルが一括ログに記録され、最小限の書き込み操作が実行されたときにも実行されます。

これはおそらくSQL Serverの「最も甘い」部分ですが、そのアーキテクチャを理解するというアイデアは、すべてがどのように機能するかを理解するのに役立ちます。エラーが発生した場合は、やや、。これにより、データベースの操作が簡単になります。

次のセクションでは、Management Studioについて学習し、SQLServerの基本的なコマンドについて徐々に説明します。


  1. MSSQLServerでデータベースを削除する方法

    MS SQL Serverでデータベースを削除するには、DROPコマンドを使用します。 。このコマンドを使用する2つの方法があります。 方法1:T-SQLスクリプトを使用する MSSQLServerでデータベースを削除するための構文は次のとおりです。 Drop database たとえば、Testdbという名前のCSLDを削除するには クエリを実行します Drop database Testdb 方法2:MS SQL ServerManagementStudioを使用する SQL Serverに接続し、削除するデータベースを右クリックします。削除を選択すると、次の画面が表示

  2. MSSQLServerのアーキテクチャについて学ぶ

    これまでの記事では、SQL Serverについて、コンピューターにSQLServerをインストールする方法について簡単に説明しました。このセクションでは、SQLServerのアーキテクチャについて学習します。 SQL Serverアーキテクチャを次のセクションに分割して、理解しやすくします。 一般的なアーキテクチャ-一般 メモリアーキテクチャ-メモリ データファイルアーキテクチャ-データファイル ログファイルアーキテクチャ-ログファイル 次に、上記で分類した各タイプのSQLServerアーキテクチャの詳細について説明します。 一般的なアーキテクチャ-一般 クライアント: リクエ