example.mdf
というデータベースの合計サイズが1 GBで、パフォーマンスの問題が発生しています。割り当てられたハードウェアをチェックし、それが必要以上に高いことを確認しました。設計を再確認したところ、物理的な場所(.mdf
)にあるC:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\example.mdf
ファイルを見ると、すべて正常に見え、データベースが見つかりました。複数のファイルexample_1.mdf
、example_2.mdf
、example_3.mdf
、最大example_7.mdf
に分割されます。
同じSQL Serverに同じ問題のある別のデータベースファイルがあります。
なぜこれが起こるのですか?これはパフォーマンスに影響しますか? SQL Serverが.mdf
ファイルを分割するのを防止または停止するにはどうすればよいですか?さらに、すでに分割されたファイルを結合する必要があります。
これまでにデータベースを作成した人は意図的にこれを行いました。すべてのデータベースファイルが同じファイルグループの一部であると想定すると(データベースのプロパティによってこれが通知されます)、必要なことは、DBCC SHRINKFILEを実行してEMPTYFILEパラメータを使用することだけです。
DBCC SHRINKFILE (Example_1, EMPTYFILE)
GO
ALTER DATABASE MyDatabase REMOVE FILE Example_1
GO
ファイルごとにこれを行うと、すべてのデータが1つのファイルに戻されます。その後、余分なファイルを削除できます。
これがパフォーマンスに悪影響を与えていない可能性が高いので、パフォーマンスの問題が発生している理由を引き続き調査する必要があります。
これらのmdfファイルは他のデータベースのものでもかまいません...
データベースファイルを確認するには、次のスクリプトを使用します。
USE [DatabaseName]
GO
SELECT name, physical_name
FROM sys.database_files
GO
これがパフォーマンスの問題の原因であると考えているため、ファイルを再結合する必要があります。それが実際にあるという証拠はありますか?
多くの場合、データベースを複数のファイルに分散すると実際にパフォーマンスが向上するため、問題が別の場所にある可能性が高くなります。
最初に確認すること:
これらすべてを見ても、splittファイルが問題であると思われる場合は、次の手順に従ってください。
ただし、ファイルが不要であることを確認してください。パーティショニングを可能にするために、誰かがファイルグループを作成した可能性があります。その場合、最初にすべてのテーブルとパーティションを他のファイルグループからプライマリファイルグループに移動しないと、ファイルを結合できません。
確認することがいくつかあります
.mdf拡張子は実際には重要ではなく、.ndf/.ldf拡張子の場合も同じです。プライマリファイル/セカンダリファイル/ログファイルには、任意の拡張子(.xyzなど)を付けることができます。
また、複数のデータファイルを作成したのはSQL Serverではありません。
詳細については、こちらを参照してください。 データベースに複数のmdfファイルを含めることはできますか?
追加のデータファイル/ログファイルを削除する場合は、この投稿を参照してください。 追加のTempDBデータファイルとログファイルを削除する方法