(SQL Server 2014)クラスター化列ストアインデックスをいくつかの非常に大きくて幅の広いテーブルに実装したいと思います。これをサポートするには、さらにRAM=が必要ですか?必要な場合、どのくらいの量を判断できますか?
考慮すべきいくつかの側面があります。
「より多くのRAMが必要ですか」という質問に関しては、エンジンはインデックスを作成するときに利用可能なすべてのRAMを使用するため、厳密な制約がない限り、答えはおそらくノーです。 http://www.nikoport.com/2014/06/21/clustered-columnstore-indexes-part-31-memory-pressure-and-row-group-sizes/
詳細RAM何とは対照的ですか?通常のクラスター化インデックスと比較して、データは高度に圧縮されているため、クエリ中に必要なメモリが少なくなります。ただし、CCIの構築プロセスはメモリを大量に消費する可能性があります。 製品ドキュメント を参照してください
列ストアインデックスを並列で作成するのに十分なメモリを計画する列ストアインデックスの作成は、メモリが制限されていない限り、デフォルトでは並列操作です。インデックスを並列で作成すると、連続してインデックスを作成するよりも多くのメモリが必要になります。十分なメモリがある場合、列ストアインデックスの作成には、同じ列にBツリーを構築する場合の1.5倍の時間がかかります。
列ストアインデックスを作成するために必要なメモリは、列の数、文字列列の数、並列度(DOP)、およびデータの特性によって異なります。たとえば、テーブルの行数が100万未満の場合、SQL Serverは1つのスレッドのみを使用して列ストアインデックスを作成します。
テーブルに100万行以上あるが、SQL ServerがMAXDOPを使用してインデックスを作成するのに十分なメモリ許可を取得できない場合、SQL Serverは利用可能なメモリ許可に適合するために必要に応じてMAXDOPを自動的に減らします。場合によっては、制約のあるメモリでインデックスを構築するために、DOPを1に減らす必要があります。
主なポイントは、mendosiによる回答ですでに述べられています。Columnstoreオブジェクトプールは、バッファープールの外側にあります。彼がリンクしたブログを参照してください。
質問は少し不明確です。
列ストアインデックスの使用を開始するときに、バッファープールに同じメモリを使用できるようにしますか?はいの場合:
一方、バッファープールで問題がなくメモリが少ない場合や、マシンのメモリを増やすことができない場合は、列ストアオブジェクトプールにメモリが必要になるため、インスタンスの最大メモリ設定を減らします。
いずれの場合でも、メモリ使用量を監視し、それに応じてマシンのメモリやMAXメモリの設定を調整することをお勧めします。開始点として、いくつかのDMV:
SELECT * FROM sys.dm_os_sys_memory;
SELECT * FROM sys.dm_os_process_memory;
SELECT * FROM sys.dm_os_memory_broker_clerks; --undocumented DMV!
SELECT
name
,type
,memory_node_id
,pages_kb
,page_size_in_bytes
,virtual_memory_reserved_kb
,virtual_memory_committed_kb
,shared_memory_reserved_kb
,shared_memory_committed_kb
FROM
sys.dm_os_memory_clerks
ORDER BY
pages_kb DESC;