SQL Server 2008の最大テーブル容量


11

毎年10億行以上をテーブルに挿入するアプリケーションがあります。このテーブルには、いくつか含まれているvarcharbigintだけでなく、列と1つのBLOB列を。

10億行は、追跡目的で保持される履歴データで構成されます。そのため、このテーブルの最大テーブルサイズに関するこのMSDNの記事に従ってこの構造を続行すると、テーブルの容量に制限があるかどうか疑問に思いました。

そのリンクに記載されているデータファイルのサイズは、テーブルデータファイルグループを参照していますか?


@marc_sそれをキャッチしてくれてありがとう。とりわけ、私たちはこれらに集合的な注意を向けるヒープに気軽に参加してください
JNK

各行の最大サイズはいくつですか?
Nick Chammas

回答:


6

ディスク容量を除いて、実際的な制限はありません。リンク先の表を全部読んでチェックしました。

16TBを超える必要がある場合は、複数のファイルが必要です(簡単な手順)。


私はこれが正しい場合、テーブルをパーティション化し、異なるファイルグループを使用するためにパーティション化を早めることによって達成できると思いますか?
GAP

1
それも必要ではありません。新しいファイルを(既存のファイルグループに)追加するだけです。SQL Serverはすべてのファイルを均等に埋め始めます。1つのファイルがこれ以上大きくならない場合は、もう1つのファイルだけが大きくなります。
usr

2

SQL Server 2008のテーブルは多数のレコードを処理でき、@ usrが言及するように、それはディスク領域に依存しますが、テーブルに多くの行があり、成長し続ける場合は、パーティションテーブルhttp://technet.microsoftを使用することをお勧めします 。 com / en-us / library / dd578580(v = sql.100).aspx

データベーステーブルのサイズが数百ギガバイト以上に大きくなると、新しいデータのロード、古いデータの削除、インデックスの維持がより困難になる可能性があります

それについての詳細

http://msdn.microsoft.com/en-us/library/ms190787.aspx

そしてそれを実装する方法 http://blog.sqlauthority.com/2008/01/25/sql-server-2005-database-table-partitioning-tutorial-how-to-horizo​​ntal-partition-database-table/


ただし、パーティション分割について十分に注意する必要があります。機能とキー、およびユースケースを慎重に検討する必要があります。パーティション化する論理フィールドは、どのクエリでも使用できず、パフォーマンスが低下します。
JNK、2012年

確かに、単一のテーブルの数十億行もパフォーマンスに影響します。多くのテーブルのurデータを分割するオプションもあります。たとえば、年ごとに個別のテーブルがあり、すべてのデータを表示したい場合は、ビューを使用できますが、少なくとも、アンサートと更新は各テーブルでより速くなります
AmmarR

巨大なテーブルへの挿入は必ずしも遅いとは限りません。キーとインデックスに依存します。700mの既存の行があるテーブルに毎月約30m行のロードを実行し、パーティション化は行いません。私はパーティション分割を試みましたが、解決よりも多くの問題を引き起こしました。 これを確認したい場合、これは実際に質問です。
JNK、2012年

履歴データを別のテーブルに移動し、ユニオンビューを作成して、クエリ履歴+システムにあるクエリの約25%未満の最新データが必要なときにアプリケーションで使用できるようにすることを考えていました。これは、複数のデータファイルを作成したり、データを最新としてマークする列に基づいてテーブルを分割したりするよりも効率的ですか?より効率的なIO操作から?私の疑問の原因は、両方のソリューションでIOの観点から同じであることです。
GAP 2012年

どのアプローチでも、良いか悪いかを左右するベストプラクティスがあります。つまり、多くのテーブルがある場合、クエリが複雑になり、メンテナンスが難しくなります。1つのテーブルがあり、テーブルパーティションを使用する場合、次のような違いの考慮事項があります。 SQLエディションはエンタープライズなどである必要があります。より良いIO操作には多くのデータファイルを持つことが推奨されますが、SQLパフォーマンスのために直接的な方法はありません...
AmmarR

0

おそらく、分割ビューが機能します。

パーティションビュー使用に関するMSDNの記事から

分割ビューを使用すると、大きなテーブルのデータを小さなメンバーテーブルに分割できます。データは、いずれかの列のデータ値の範囲に基づいて、メンバーテーブル間で分割されます。各メンバーテーブルのデータ範囲は、パーティション列で指定されたCHECK制約で定義されます。次に、UNION ALLを使用して、すべてのメンバーテーブルの選択を1つの結果セットに結合するビューが定義されます。ビューを参照するSELECTステートメントがパーティション列の検索条件を指定すると、クエリオプティマイザーはCHECK制約定義を使用して、行を含むメンバーテーブルを決定します。

AmmarRが回答で情報を提供したパーティションテーブルとどのように違うのかはわかりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.