私たちは、SQL Server 2012 ExpressをDBエンジンとして使用するアプリケーションのクラウドバージョンを運用しています。各クライアントにはSQL Serverの独自のインスタンスがあり、インスタンスがExpressで制限された1GBの完全メモリを使用できるようになり、データベースサイズが10GBになります。SQL Server Expressのメンテナンスの提案
これらのデータベースを最適化し、クライアントに最大のデータストレージを提供し、中断させることなく対処することが課題です。言い換えれば、私たちは実際のデータに対してExpressデータベースをほぼ10GB提供しようとしていますが、パフォーマンスの最適化を維持するためにメンテナンスを実行する必要があります。
毎週日曜日の夜、私たちは以下のようなSQLメンテナンススクリプトを実行します。
BEGIN;
FETCH NEXT FROM partitions INTO @objectid, @indexid, @partitionnum, @frag;
IF @@FETCH_STATUS < 0
BREAK;
SELECT @objectname = o.name, @schemaname = QUOTENAME(s.name)
FROM sys.objects AS o
JOIN sys.schemas as s ON s.schema_id = o.schema_id
WHERE o.object_id = @objectid;
SELECT @indexname = QUOTENAME(name)
FROM sys.indexes
WHERE object_id = @objectid AND index_id = @indexid;
SELECT @partitioncount = count (*)
FROM sys.partitions
WHERE object_id = @objectid AND index_id = @indexid;
-- 30 is an arbitrary decision point at which to switch between reorganizing and rebuilding.
IF @frag < 30.0
SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REORGANIZE';
IF @frag >= 30.0
SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = OFF);'
IF @partitioncount > 1
SET @command = @command + N' PARTITION=' + CAST(@partitionnum AS nvarchar(10));
EXEC (@command);
PRINT 'Executed: ' + @command;
SET @COMMAND = 'USE DATA UPDATE STATISTICS Data.dbo.' [email protected] + ';'
EXEC (@COMMAND)
PRINT 'Executed: ' + @command;
PRINT @objectname + 'Index Name: ' + @IndexName + 'Percent Fragmented: ' + CAST(@Frag AS VARCHAR(20))
END;
スペースが利用可能な場合、メンテナンスはうまくいきます。問題は、データベースが膨れ上がり、クライアントを10GBの制限までプッシュすることです。これにより、値を追加する必要があるテーブルの領域を割り当てることができない可能性があるため、問題が発生します。私たちは戻って、私の理解から、インデックスの最適化/メンテナンスのいくつかの利点を元に戻すDBを縮小して縮小する必要があります。
データファイルに10GBの制限があり、DBの動作を十分に維持するためにメンテナンスを実行する必要がある場合、後でデータベースを縮小することなくメンテナンスのメリットを得るにはどうすればよいですか?
我々は10%で、シンプル復旧モード、無自動圧縮、および自動拡張を使用している
は、事前にありがとうございます!
フィードバックをいただきありがとうございます。インデックスの再編成と再構築を実行した場合、SQL Expressを使用しているため、dbサイズの制限があり、クライアントはデータベースにデータを入力できません。 基本的にメンテナンスを実行すると、DBは10GB近くになり、クライアントはデータを入力できなくなります。これを克服する方法についての考え? – Shaun
再インデックス操作でストレージの制限が満たされている場合は、ストレージの購入を検討する必要があります。 10GBはそれほどではなく、スペースは今日までに安くなっています。再インデックスのためにtempdbを使用するか使用しないなどの操作中および作業後にディスクスペースのサイズを減らすことができる設定がいくつかありますが、ディスクスペースでハード制限が発生しています。 –
こんにちはロス、それは実際にはディスクの容量制限ではない、それは私が打っているSQL ExpressのDBサイズの制限です。少し拡張したり、再インデックス化のためにtempdbを使用するかどうかについてのリソースへのリンクを提供できますか? – Shaun