web-dev-qa-db-ja.com

SQL Serverはmdfを複数のファイルに分割しました

example.mdfというデータベースの合計サイズが1 GBで、パフォーマンスの問題が発生しています。割り当てられたハードウェアをチェックし、それが必要以上に高いことを確認しました。設計を再確認したところ、物理的な場所(.mdf)にあるC:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\example.mdfファイルを見ると、すべて正常に見え、データベースが見つかりました。複数のファイルexample_1.mdfexample_2.mdfexample_3.mdf、最大example_7.mdfに分割されます。

同じSQL Serverに同じ問題のある別のデータベースファイルがあります。

なぜこれが起こるのですか?これはパフォーマンスに影響しますか? SQL Serverが.mdfファイルを分割するのを防止または停止するにはどうすればよいですか?さらに、すでに分割されたファイルを結合する必要があります。

4
Mohamed Sawaf

これまでにデータベースを作成した人は意図的にこれを行いました。すべてのデータベースファイルが同じファイルグループの一部であると想定すると(データベースのプロパティによってこれが通知されます)、必要なことは、DBCC SHRINKFILEを実行してEMPTYFILEパラメータを使用することだけです。

DBCC SHRINKFILE (Example_1, EMPTYFILE)
GO
ALTER DATABASE MyDatabase REMOVE FILE Example_1
GO

ファイルごとにこれを行うと、すべてのデータが1つのファイルに戻されます。その後、余分なファイルを削除できます。

これがパフォーマンスに悪影響を与えていない可能性が高いので、パフォーマンスの問題が発生している理由を引き続き調査する必要があります。

8
mrdenny

これらのmdfファイルは他のデータベースのものでもかまいません...

データベースファイルを確認するには、次のスクリプトを使用します。

USE [DatabaseName]
GO

SELECT  name, physical_name
FROM    sys.database_files
GO
4
Vishal Gajjar

これがパフォーマンスの問題の原因であると考えているため、ファイルを再結合する必要があります。それが実際にあるという証拠はありますか?

多くの場合、データベースを複数のファイルに分散すると実際にパフォーマンスが向上するため、問題が別の場所にある可能性が高くなります。

最初に確認すること:

  1. 適切なインデックスはありますか
  2. クエリでカーソルを使用していますか
  3. インデックスの使用を妨げるような方法で記述されたクエリ
  4. サーバーは実際に負荷を処理するのに十分な大きさです。ただし、これは非常に小さなデータベースであるため、ハードウェアに問題がない可能性があります。

これらすべてを見ても、splittファイルが問題であると思われる場合は、次の手順に従ってください。

  1. データ全体を保持するのに十分な大きさの新しいファイルを追加します。
  2. すべての元のファイルを自動拡張しないように設定します。
  3. 「未使用領域を解放」して、元のファイルを1つずつ縮小します
  4. 元の各ファイルを「空のファイルとデータの移行」で一度に1つずつ圧縮し、次のファイルを圧縮する前にファイルを削除します。
  5. データベース内のすべてのインデックスでインデックスの再構築を実行して、移行による断片化を減らします。

ただし、ファイルが不要であることを確認してください。パーティショニングを可能にするために、誰かがファイルグループを作成した可能性があります。その場合、最初にすべてのテーブルとパーティションを他のファイルグループからプライマリファイルグループに移動しないと、ファイルを結合できません。

3
Sebastian Meine

確認することがいくつかあります

  1. データベースがシステムドライブ(C:\)にあるのはなぜですか?他のストレージはありませんか/ SANサーバーに接続されていますか?
  2. ログの場所はどこですか?
  3. データベースはどのように使用されていますか-同時ユーザー数、サーバーの負荷、サーバー上のRAM、サーバー上のCPUなし)
  4. 1 GBのデータベースが7つのファイルに分割されるのはなぜですか?複数のファイルを持つデータベースが本当に必要ですか?また、1つのプライマリファイルグループ(.mdf)を作成でき、残りはセカンダリファイルグループ(。* n * df)になることに注意してください。
  5. 「パフォーマンスの問題」と言うと、実際に何が起こっているのか-何が遅いのか、何が機能していないのか?パフォーマンスが低下している期間に短いトレースを実行しましたか?
0
Kin Shah

.mdf拡張子は実際には重要ではなく、.ndf/.ldf拡張子の場合も同じです。プライマリファイル/セカンダリファイル/ログファイルには、任意の拡張子(.xyzなど)を付けることができます。

また、複数のデータファイルを作成したのはSQL Serverではありません。

詳細については、こちらを参照してください。 データベースに複数のmdfファイルを含めることはできますか?

追加のデータファイル/ログファイルを削除する場合は、この投稿を参照してください。 追加のTempDBデータファイルとログファイルを削除する方法

0
user23550