0

インデックスの作成に必要な空き領域を計算する式は何ですか?SQL Server 2005インデックスの作成に必要な空き領域

重要:私たちはSQL Server Express 2005を使用しています。したがって、4GBが限界です。したがって、この質問。 ログファイルの無制限自動拡張はオプションではありません。以下のt-sql擬似コードでさらに説明します。

int spaceNeeded = 
    FN_COMPUTE_SPACE_NEEDED_TO_CREATE_UNCLUSTERED_INDEX(MyTableName, MyColumnName) 

それは、このストアドプロシージャ をコーディングしながら、私がで立ち往生していますその上で一つの機能だ私は、MSDNで利用可能な情報をすべて以下扱うことができると思いなど

While(GetDBSpaceAvailable() < spaceNeeded) 
{ 
    purge some data (go thru all tables and delete data logically) 
} 

create the index we need 
CREATE NONCLUSTERED INDEX [IX_NonClustered_MyTable] ON [dbo].[MyTable] 
( [MyColumn] ASC 
) 

この中で感謝任意のポインタ敬具。これを繰り返すことを望んでいましたが、私が検索したとき何も見つかりませんでした。 はあなた

UPDATEに感謝:私のために働いたソリューションは、アーロンの提案を使用しています。 (索引が現在占めるスペースの1.2倍以上)。だから、基本的には、使用可能な空き容量が、現在のインデックスサイズの1.2から1.5倍以上になるまで、最も古いデータをパージします。sp_spaceused tablenameによって報告されています。次に、索引を作成します。

+0

「ログファイルの無制限自動拡張はオプションではありません」と言います。私は大きなExpressユーザーではありませんが、ログファイルのサイズが計算の一部であることは確かですか? (私はテストを実行していないが、私はそれが本当ではないと確信しています。)これはあなたの問題に関係していると確信していますか?この操作を実行すると、大量のログの使用、データファイルの展開、またはその両方が見られますか? –

+0

AaronとJNKに感謝します。私はフルまたはほぼ完全なエクスプレスDBにインデックスを作成しようとすると、私が得るエラーメッセージをチェックします。すぐにここにエラーを返信します。コストを抑えるため、Expressではdbをプロダクションで使用しています。ロジックは、古いデータが最大になるとパージします。私たちは、いくつかのレポーティングアプリのインデックスを使ってエクスプレスDBをアップグレードする必要があり、バックグラウンドである状況があります。 – Gullu

+0

ここでは、Microsoftのユーザーフレンドリーなエラーメッセージです:インデックスのメッセージ1105、レベル17、状態2、行1を作成しようとすると オブジェクト 'dbo.SORT一時的に実行するストレージの空き領域を割り当てることができませんでした:422212493901824'データベース 'MyDB' 'PRIMARY'ファイルグループがいっぱいであるためです。 不要なファイルを削除したり、ファイルグループ内のオブジェクトを削除したり、ファイルグループにファイルを追加したり、ファイルグループ内の既存のファイルに対して自動拡張を設定してディスク領域を作成します。 – Gullu

答えて

2

サイズ制限はデータベースごとです。あなたは、あなたの迷惑メール、静的なもの、あるいは少なくとも揮発性の低いデータのいくつかを別のデータベースに入れることを検討しましたか?シノニムを作成して、データの一部が独自の4GBの領域にあることをコードが認識しないようにすることができます。 1つのインスタンスですべてのパフォーマンスの違いを分けることに気付かれるのは難しいでしょう。最大の問題は、バックアップの一貫性で、データを別々にバックアップするためです。しかし、それはあなたのインデックススペースの要件を避けるための1つの方法です。

また、この旧バージョンのSQL Server 2005 Expressを使用する代わりに、再生するGBが6GB以上ある最新のリリースバージョン(SQL Server 2008 R2)に移動しないでください(データベースサイズは10 4 GBの代わりにGB)。さらに、いくつかの新機能、T-SQL構文、およびパフォーマンス上の利点を得ることができます。

+0

+1別の回避方法の場合 – JNK

+0

はい。 2008年にアップグレードする段階にあります。データベースの現在のサイズ、インデックスが作成されるテーブルのサイズ、作成されるインデックスの列と列のサイズ、使用可能な空き領域などを考慮して、インデックスを作成するために必要な領域を計算するための式や一般的なガイドラインはありません。 ... – Gullu

+0

インデックスを再構築する従来の知恵は、インデックスが現在占めるスペースの1.2倍以上を必要とすることです。しかし、JNKが指摘しているように、これは実際に使用されているデータ、塗りつぶし係数、インデックスの変更などによって大きく変わる可能性があります。そうではありません。あなたが実際に行う必要があるまで何が必要かを教えてくれる魔法の数学はありませんそれ。 –

1

確かにわからないと思います。

インデックスだけでなく、インデックスのリーフノードを解析するために使用されるb-treeも作成されます。

それらの要因は、あなたのデータ値の分布に影響される両、選択、など

フィルファクターのように使用されている領域に影響を与える追加のオプションがありますが、フィールドを含むが、その他

また、それは次のようになります長さ(したがって使用されるスペース)が行ごとに異なるため、varcharまたはnvarcharフィールドでこれを計算するために、上記の要因に関係なく実際の課題があります。

SQL Serverのライセンスを入手するのは、この正確性を保証し、必然的に問題が発生したときに記録を処理するのに必要な工数を数百時間にするよりも理にかなっています。

+0

+1このようなタスクを実行するために必要なスペースを調べる方法は、タスクを実行することです。必要な容量に基づいてパージするデータの量を決めるのではなく、必要のないすべてのデータをパージします。まだ部屋がない場合は、拡大または拡大する必要があります。 –

+0

SQL Serverのライセンスを購入してください!その価格を見てみましょう。人の時間を忘れて。私たちが製品を販売するたびにライセンスを取得すれば、店を閉鎖するかもしれません。私はインドに戻って再びソフトウェアクーリーになる必要があります。 http://www.microsoft.com/sqlserver/2008/en/us/pricing.aspx Google for coolie :-) – Gullu

+0

あなたがあなたの質問にあなたが配布していることを明確にしていないときに、あなたの提案を嘲笑するのは難しい社内のデータベースのコピーを使用するのではなく、ソフトウェアでエクスプレスする。 –

関連する問題