動的ディスク管理でのチューニングポイントSQL Server 2000 チューニング全工程(2)(3/3 ページ)

» 2004年09月25日 00時00分 公開
[沖要和NRIラーニングネットワーク]
前のページへ 1|2|3       

ファイルグループへのテーブルの格納

 データベースを複数のデータファイルで構成することができます。既定で最初に定義されるデータファイルは、プライマリデータファイル(拡張子は慣例としてmdfになります)と呼ばれるのに対して、2つ目以降をセカンダリデータファイル(拡張子は慣例としてndfになります)と呼びます。データベースのサイズが大きくて、単一の論理ディスクに格納できない場合など、複数のデータファイルを使用することで、複数のディスクに分散できます。

 SQL Server 2000では、複数のデータファイルをファイルグループと呼ばれる名前付きの集合として管理できます。

 テーブルやインデックスを作成するときに、特定のファイルグループを指定できます。さまざまな物理ディスクにわたって格納された複数のファイルからファイルグループが構成され、各ディスクが独自のディスクコントローラを持っている場合、テーブルデータへのクエリは複数ディスクにわたって展開されるため、パフォーマンスが向上します。これは、RAID 0のデバイスに1つのデータファイルを作成した場合と同様の効果になるため、予算などの面でRAID構成を組めない場合などに検討してください。また、ファイルグループは、フォールトトレランスを提供するものではないことに注意してください。1つのデータベースには最大256個のファイルグループを作成できます。ファイルグループにはデータファイルのみ含めることができます。トランザクションログファイルをファイルグループに入れることはできません。

図5 セカンダリファイルグループによる受注データのIO分散の例 図5 セカンダリファイルグループによる受注データのIO分散の例

 追加のデータファイルやファイルグループの定義は、データベースを作成した後からでも行うことができます。以下に2つのデータファイルから成るファイルグループをデータベースに追加するスクリプトを紹介します。

 この例では、「Northwind」データベースにファイルグループを作成し、そのファイルグループに5Mbytesのファイルを2つ追加します。さらに、「FG1」を既定ファイルグループに設定しています。

USE master
GO
ALTER DATABASE NorthWind
ADD FILEGROUP FG1
GO
 
ALTER DATABASE NorthWind
ADD FILE
( NAME = NorthWind_2,
  FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\
NorthWind_2.ndf',
  SIZE = 5MB,
  MAXSIZE = 100MB,
  FILEGROWTH = 5MB),
( NAME = NorthWind_3,
  FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\
NorthWind_3.ndf',
  SIZE = 5MB,
  MAXSIZE = 100MB,
  FILEGROWTH = 5MB)
TO FILEGROUP FG1
2つのデータファイルから成るファイルグループを追加するスクリプト

 この例は、データファイルを同じディスクに格納していますが、並列データ アクセスを使用してスループットを向上させるには、できるだけ多くの異なる物理ディスクドライブにデータを分散させます。

 ディスクI/Oサブシステムのボトルネックを見つけるには、Windowsのコントロールパネルで[管理ツール]から[パフォーマンス]を選択して、以下をパフォーマンスオブジェクトとカウンタとして登録し、データベースが置かれたドライブをインスタンスから選択すればよいでしょう。

パフォーマンスオブジェクト カウンタ
PhysicalDisk Disk Queue Length

 Disk Queue Lengthカウンタが「3」を超えた場合、より多くの物理ディスクドライブにファイルを分散させることを検討してください。

既定のファイルグループ

 上記のスクリプトで定義されたFG1ファイルグループに受注テーブルを配置する場合、下記のようなスクリプトを書きます。

CREATE TABLE dbo.Orders (
 OrderID int IDENTITY (1, 1) NOT NULL ,
 CustomerID nchar (5) NULL ,
 EmployeeID int NULL ,
 OrderDate datetime NULL ,
 RequiredDate datetime NULL ,
 ShippedDate datetime NULL ,
 ShipVia int NULL ,
 Freight money NULL ,
 ShipName nvarchar (40) NULL ,
 ShipAddress nvarchar (60) NULL ,
 ShipCity nvarchar (15) NULL ,
 ShipRegion nvarchar (15) NULL ,
 ShipPostalCode nvarchar (10) NULL ,
 ShipCountry nvarchar (15) NULL 
) ON FG1
FG1ファイルグループにテーブルを配置するスクリプト

 テーブル定義の最後の「ON FG1」という記述で、格納するファイルグループを指定しています。この記述を省略すると既定のファイルグループに格納されます。下記のスクリプトを実行することで、既定のファイルグループを変更できます。

ALTER DATABASE Northwind
MODIFY FILEGROUP FG1 DEFAULT
既定のファイルグループを変更するスクリプト

 既定のファイルグループには、作成時にファイルグループが指定されなかったすべてのテーブルとインデックス用のページが格納されます。1つのデータベースで既定のファイルグループになることができるのは1つのファイルグループだけです。既定のファイルグループが指定されなかった場合、プライマリファイルグループが既定のファイルグループになります。

SQL Server 2005での新機能(1) データパーティショニング

 2004年9月7〜10日の期間、「Tech・ED 2004 Yokohama」が開催されました。筆者はSQL Server 2005 Beta 2でのハンズオンラボで講師を担当させていただきました。ご来場いただいた皆さま、本当にありがとうございました。

 その中で確認できた機能で、今回のテーマと関連するものとして、データ パーティショニングの機能を紹介します。こちらは、SQL Server 2000で提供されていた分散パーティションビューとは異なる機能であることに注意してください。

 SQL Server 2000では、1つのテーブルは1つのファイルグループの中に格納されています。SQL Server 2005でのデータパーティショニングは、従来とは異なり、1つのテーブルデータを水平分割または垂直分割して、複数の論理的なパーティション(とそれにひも付くファイルグループ)に格納し分散管理する機能です。これによって、テーブルの肥大化に伴う性能劣化を回避し、効率よい運用が行えます。

図6 水平分割されたテーブルのパーティショニング 図6 水平分割されたテーブルのパーティショニング

 パーティション単位での大規模データ追加、削除が行えるため、図6の例では2004年4月のデータが追加される前に、事前にそのデータを格納するためのファイルグループを追加しパーティションとして定義することで、データの管理を簡単に行えます。

注)記事の一部削除
この個所で解説していたSQL Server 2005に搭載予定のデータパーティション機能については、連載第3回「速報!SQL Server 2005のデータパーティション」にてより詳細な解説を行っため、2004年11月30日をもって削除しました。この機能については、連載第3回をご参照ください。(編集局)


 今回はSQL Serverのリソース管理機能から動的ディスク管理でのチューニングポイントとして「データとログの分離」「データベースの自動拡張と自動圧縮」「ファイルサイズの見積もりと監視」「ファイルグループ」を解説しました。また、次期バージョンとなるSQL Server 2005に搭載予定の新機能も紹介しました。(次回に続く)


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

AI for エンジニアリング
「サプライチェーン攻撃」対策
1P情シスのための脆弱性管理/対策の現実解
OSSのサプライチェーン管理、取るべきアクションとは
Microsoft & Windows最前線2024
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。