PR

【図で分かる!】SQL Server 活用入門 インスタンス/DB/スキーマ の役割

SQL Server 運用ノウハウ
記事内に広告が含まれています。

SQL Serverを学び始めると、

  • インスタンス
  • データベース
  • スキーマ
  • テーブル

という言葉が次々に出てきます。

多くの場合、

  • 「名前を指定するための階層」
  • 「とりあえず覚えるもの」

として説明されがちですが、サーバー運用をするためにはもう少し深く理解しておく必要があります。

なぜなら、これらは単なる階層ではなく、

「何を、どこまで守るのか」という役割の階層構造

だからです。

この記事では、SQL Serverの構造を インスタンス / データベース / スキーマ という単位で整理し、 それぞれの役割を解説します。

スポンサーリンク

全体像:SQL Server の階層構造

まず全体像を整理します。

SQL Serverの階層構造は、図ようになっています。

重要なのは、これは単に データの所在の階層 だけではなく 役割の階層 だという点です。

  • コンピューター:サーバーの実体(最近は仮想サーバーもある)
  • インスタンス:コンピューター上で動くデータベース・サーバー、複数立ち上げも可能
  • データベース:データのまとまり
  • スキーマ:オブジェクトの整理区分
  • テーブル/ビューなど:実データ

それぞれの役割分担について詳しく解説します。

インスタンスの役割

インスタンスとは何か

インスタンスとは、SQL Serverエンジンそのもの を指します。

同じコンピューター上でも、

  • 開発用
  • 本番用
  • 分析用

など、複数のSQL Serverを動かすことができ、 それぞれが独立した「インスタンス」となります。

インスタンスを指定するには以下のように記述します。

[コンピューター名]\\[インスタンス名]

同じコンピュータ上でも複数のインスタンスが存在していてもこれで指定するこができる訳です。

インスタンスが担う役割

インスタンスは次のような サーバーの資源(リソース) を独立して管理します。

  • CPU
  • メモリ
  • tempdb(作業用データベース)
  • サーバー構成
  • ログイン認証

そのため、

  • 重い集計
  • 大量の一時テーブル
  • インデックス作成

といった処理があると、 インスタンス全体で処理まで遅くなる ことがあります。

なぜインスタンス分離が必要になるのか

インスタンス分離が必要になるのは、次のようなケースです。

  • 本番環境の安定運用は確保しつつ開発環境も動作させたい
  • リソース使用量に上限を設けたい

一つのインスタンス上で暴走クエリなどの過負荷が発生しても、他のインスタンスに影響を与える心配がありません。

そのため、本番環境を運用する一方で、安心して開発環境で様々な試験運用を行うことができます。

ただし、 物理的なCPUやメモリは有限 である点は変わらないことは認識しておく必要があります。

インスタンス分離のデメリット

インスタンスを分離することでデメリットも生じます。

それは、インスタンスそれぞれで管理が必要ということです。全く別のサーバーとして機能するのでサーバー構築から維持メンテナンスまで管理負担が増大します。

従って、強い分離のニーズがある場合にのみインスタンスを分けて管理するというのが正しい運用となります。

インスタンスの追加

インスタンスを追加する場合は SQL Server のインストーラーで追加でインストール作業を行います。

デフォルト設定のままインストールした場合は、既存のインスタンス名と重複しないインスタンス名を自動で設定してインストールが完了します。

このため、例えば SQL Serer 2019 と、 SQL Server 2021 というように別のバージョンの SQL Server も同じコンピュータ上に配置することが可能です。

メモリの設定

インスタンスを分けたのであれば、メモリ上限を設定してインスタンス同士の相互の影響を回避します。

SQL Server Management Studio を使って図のようにすることで設定可能です。

データベースの役割

データベースとは何か

データベースは、 データの論理的なまとまり です。

  • 業務システムごと
  • 用途ごと
  • 部門ごと

に分けて管理するための単位になります。

データベースはインスタンスの下の階層であり、同じインスタンスの中に 複数作成することができます。

データベース分離でできること

データベースを分けることで、次のことを実現できます。

  • 業務ごとのデータ分離
  • ユーザーの権限管理の整理
  • バックアップ単位の分割

インスタンスを分割する強いニーズが無い限り、データベースの分離で対応するのが良いです。

データベースの追加

データベースは図のように SQL Server Management Studio を操作することで追加することができます。

スキーマの役割

スキーマとは何か

スキーマは、 テーブルやビューなどのオブジェクトを整理するための箱 です。

SQL Serverでは、[スキーマ名].[テーブル名] という形でオブジェクトを指定します。

なお、デフォルトのスキーマ名dbo で、これは省略することが可能です。なので、次の2つのSQLクエリは同じように動作します。

次の例1)と例2)は同じように動作する。

例1)
select * from [dbo].[TableA]

例2)
select * from [TableA]

スキーマが担う責任範囲

スキーマが担うのは、次のような役割です。

  • オブジェクトの整理
  • 名前衝突の回避
  • 権限管理の単位

スキーマ名は例えば次のようなものが使われます。

  • dbo:デフォルト
  • stg:取込用
  • int / dim / fact:データモデル用

といった使い分けがよく行われます。

スキーマの追加

スキーマは SQL Server Management Studio を図のように操作することで追加できます。

まとめ

SQL Server の構造はインスタンス、データベース、スキーマと階層的な構造になっています。

これらは単なる階層では無く、それぞれ役割があり、用途によって使い分ける必要があります。

しかし、一度理解してしまえば特に悩むことは無くなると思います。

是非この SQL Server の構造を頭に入れて、上手に使い分けていって下さい。

タイトルとURLをコピーしました