SQL Server 2008 R2の一般的なメモリ要件


11

私はDBAの仕事の経験はありませんが、SQLサーバーに追加のリソースを要求するためのケースを作ろうとしていて、何人かが実行する必要のある大まかな概算を提供してくれる賢い人たちを集めることを望んでいました。ITが本番SQLサーバーに割り当てたリソースの割り当てが少ないのではないかと思います。

ハードウェアとソフトウェア:

データベース:SQL Server 2008 R2エンタープライズデータベース

Windows:Windows 2008 r2 Enterprise 64ビット、VMwareで実行していることを確認してください。

プロセッサー:Intel(R)Xeon(R)CPU E7-4860 @ 2.27GHz 2.26 GHz(2プロセッサー)

搭載メモリ:4GB

データベースファイル用ハードドライブ:300 GB

バックアップ用ハードドライブ:150GB

ログ用ハードドライブ:100GB

応用:

合計で約170GBのデータを追加する3つのメインデータベース、同じサーバー上のReporting Servicesデータベース(SSRS)があり、毎日生成される多分10の異なるレポート(それぞれ平均70万件のレコードを含む)を格納しています。私たちのユーザーベースは約20人の同時ユーザーです。そのうち5人は、大量のデータを処理する大量のレポートを生成する「リソース集中型」と考えることができます。ユーザーの大半は、asp.net WebサイトおよびレポートサーバーWebサイトを介してデータベースと対話します。さらに、開発者はサーバーに直接リモート処理することにより、BIDSでSSISを広範囲に使用します(最大2つのリモート接続)。最後に、かなり複雑なデータウェアハウジング操作があり、サーバーでも実行されるSSISパッケージを介して、おそらく1日あたり300万件のレコードを取り込みます。

現在の問題:

慢性的なサーバータイムアウトがあり、ウェブサイトへの応答時間がかなり悪いです。私たちが持っているメモリの量(4GB)はおそらく大きなボトルネックだと思います。以前の追加メモリの要求は、より多くのクエリ最適化を実行する必要があるという一般的な応答で拒否されました。私たちはsqlの専門家ではありませんが(私たちのセットアップでわかるように)db adminの専門家ではありませんが、ハードウェアがボトルネック。

tl; drを回避してくれてありがとう!


7
彼らは4 GBのメモリで170 GBのデータを処理することを期待していますか?クエリの調整によってこれが修正されることはなく、ツリーから外れています。
アーロンバートランド

それらに数字を表示します(パフォーマンス統計)。また、Window Server 2008 R2の最小メモリが4 GBであることを示すMicrosoftのドキュメントを表示することもできます。これはSQL Serverにはあまり影響しません。

2
あなたの待機統計は何を示していますか?クエリに対するPAGEIOLATCH_XXの待機が多数発生しているようです。もしそうなら、あなたはいくつかの余分なメモリが有益であることの証拠としてそれを使うことができるかもしれません。
SQLRockstar 2013

2
そして、メモリが1つあれば、より優れたIOサブシステムで作業を開始できます。よく使われているデータベースのハードドライブはIOPSジョークです。THATはDRIVESである必要があります。容量としてドライブを購入するのではなく、データベースをIOPSソースとして購入します。WHichは、512gb SSDがデータベースファイルに適していることを意味します。標準的な「大きくて安い」とすると、データベースが破壊されます。
TomTom 2013

@TomTom raid配列があると確信しています(私はそう思います)。それをどのように検出するかはわかりません。ハードドライブの説明は、コンピューターウィンドウエクスプローラーがWindowsサーバーに表示しているものに基づいていました。
RMuesi 2013

回答:


14

...何が実行されるべきかについての大まかな大まかな見積もりが得られることを期待していました。

クエリとデータサイズに関する詳細な情報がないと、正確な見積もりはもちろん、あらゆる種類の見積もりを行うことは非常に困難です。

データベース:SQL Server 2008 R2エンタープライズデータベース

Windows:Windows 2008 r2 Enterprise 64ビット、VMwareで実行していることを確認してください。

プロセッサー:Intel(R)Xeon(R)CPU E7-4860 @ 2.27GHz 2.26 GHz(2プロセッサー)

搭載メモリ:4GB

2つのプロセッサ(これはVMで2つのコアとして公開されていると想定しています)は、十分にプロビジョニングされていない場合があります。VMに割り当てられたコアは、必ずしも物理コアに直接マッピングされるとは限りません(または、必要に応じてシングルコアの100%を使用することもできます!)。これは、メモリよりも柔軟なリソースである場合があります。ワークロードまたはハードウェア/仮想化構成に関する情報がこれ以上ない場合、これを4に増やすと便利です。

メモリ割り当て。ああ少年。これは、ワークロードに対して大幅にプロビジョニングされていません。Windows自体は、最低限2〜3 GBが必要です。ボックス上でBIDSを実行する2人のユーザーはそれぞれ、少なくとも500 MBを必要とします。それで、ボックスはすでに限界に達しており、データベースがどれだけの量を必要とするかを考え出すことすらできませんでした。

ユーザーの大半は、asp.net WebサイトおよびレポートサーバーWebサイトを介してデータベースと対話します。

言わなかったが、これらが同じボックスで実行されている場合、それらのメモリ要件も考慮する必要がある。

最後に、かなり複雑なデータウェアハウジング操作があり、サーバーでも実行されるSSISパッケージを介して、おそらく1日あたり300万件のレコードを取り込みます。

これがシステムにライブユーザーがいない夜に実行されると仮定すると、実行に時間がかかりすぎない限り、これは問題とは見なされません。物事のこの部分はあなたの心配の中で最も少ないです。ライブユーザーの方が重要です。

以前の追加メモリの要求は、より多くのクエリ最適化を実行する必要があるという一般的な応答で拒否されました。

上記で示したように、プロビジョニングされている現在のメモリ容量は完全に不十分です。しかし同時に、スペクトルの反対側では、データベース全体を一度にメモリ内に保持するために十分なメモリをプロビジョニングできる可能性はほとんどありません。

そのような包括的な応答が得られたとしても(実際には、実際のリソースの使用自体ではなく、追加のリソースの正当化の説得力にもっと関係している可能性があります)、データベースの効率が高い可能性があります改善されました。それでも、現在発生している問題を修正できる調整だけでは十分ではありません。それの提案は私にとって完全な出発点ではありません。

私は現在プロビジョニングされたメモリの量は、(できるだけ早く修正されなければならない)が必要最小値を下回っていることを全体的なアプローチを取る、追加のリソースが使用可能なレベルにユーザー体験を向上させるために必要とされてもよいしながら改良が効率を上げるために行われますシステム。

ここにいくつかの考えがあります(攻撃の順序で):

  • あなたはなり勝ち、あなたがプロビジョニングされた多くのリソースを取得するたびに改善し、どのくらいの性能を証明することができます。可能な場合はWebサイトの応答時間を含め、パフォーマンスモニターのログを使用してパフォーマンスメトリックを追跡します(注:ログの部分は非常に重要です)。他のことをする前に、今すぐ始めてください。最終的に最小メモリ量に到達すると(すぐに32 GBを取得する予定はありません)、突然、メモリを追加することで状況が改善されたという証拠があります。現在の構成のベースラインを収集しないと、物事が最小推奨レベルに達したときにボートに乗り遅れることになります。

  • サーバーの待機統計を分析します。これにより、システムの最大のボトルネックがわかります。おそらくPAGEIOLATCH_XX、最も一般的/最長の待機時間が発生します。これは、ディスクからページをフェッチするために実行されているI / Oが多すぎることを示しています。これはメモリを追加することで軽減できます。必要なデータがすでにメモリにあるため、物理I / Oの頻度は少なくなります。この分析はほぼ完全な結論ですが、これらの統計を収集したという事実は、リソースの必要性を正当化するときに弾薬をより多く提供します。

  • 上で述べたように、メモリの最低限の要件が満たされていません。実行しているすべてのソフトウェアの推奨ハードウェア要件のセットを収集し、タスクマネージャーのスクリーンショットも取得します。これだけでも、その場で少なくとも4〜8 GB以上を正当化するには十分です。それでも拒否される場合は、1週間試してもらい、その後で返却できるように説得してください(パフォーマンス統計を収集しているため、週の半ばに返却する必要はありません)状況がどれだけ改善されたかを証明することができます)。彼らは場合は、まだ拒否し、あなたは失敗するように設定されています。URLT

  • ワークロードの一部をオフロードできる場合(特に、可能な場合はリモート処理を回避する)、これにより、データベースで使用可能なメモリの量が増加します。これは、より重要です。

  • あなたがすることは非常に慎重にSQL Serverの最大メモリ設定を設定する必要があることを意味する、一度にメモリにデータベース全体をフィットすることができませんオーバーコミットメモリを防ぐようにパフォーマンスを殺す、何もありません。オーバーコミットは実際には、単にすべてのデータをメモリに収められないよりもさらに悪いものです。利用可能なメモリがまったくないという理由だけでこのシナリオにいる可能性が非常に高く、最大メモリ設定がデフォルト(無制限)に設定されている可能性があります。

  • SQL Server Enterprise Editionを実行していて、メモリが限られているため、データ圧縮の実装を強く検討します。これにより、CPU使用量の増加とメモリのスペース節約とがトレードオフされます(したがって、比較的非常に遅いディスクアクセスが削減されます)。

  • データベースを調整します。構造とクエリは、インデックス作成とアクセスパターンに関する限り、改善を使用できる可能性があります。また、大量のデータが頻繁にスキャンおよび集計される場合は、インデックス付きビュー、サマリーテーブル、または事前計算済みレポートを作成すると非常に役立ちます。

  • これはおそらくハードウェアのプロビジョニングを増やすことになるが、キャッシングソリューションを実装することになるため、長い道のりになるかもしれません。最速のクエリは、決して作成したものではありません

これらはほんの一部のアイデアです。結論としては、チューニングだけではここでの問題は解決されず、ハードウェアだけでも、おそらく当面の問題の大部分は緩和されます。それが実際の方法です。短期間に問題にハードウェアを投入して火を消し、根本的な原因をできる限り修正するために長期的に問題にチューニングを投入します。


1
ジョン私はあなたの答えと+1が好きですが、このシナリオでは、アーロンのコメントが頭を痛めているようで、彼らがチューニングをどれほど難しくしようとも、ラムを増やす必要があるだけです。
Ali Razeghi 2013

2
@アリ:うん、同意します、そして私は私の答えでそれを述べました。ほとんどの場合、RAMを増やすための戦略に焦点を当てたかったのです。(それが単に利用できない場合、それは別の問題です。)
Jon Seigel 2013

詳しい回答ありがとうございます!私はdbパフォーマンスチューニングが初めてなので、どこから始めればよいのかを理解しようとしています。いくつかの読み物とパフォーマンスモニターを用意しましたが、メトリックを理解する必要があります。しかし、あなたの提案はこの問題に取り組むための良いロードマップを提供します。再度、感謝します。
RMuesi 2013

@RMuesi:どういたしまして。あなたがする必要があることを達成する方法について具体的な質問がある場合は、遠慮なく投稿してください(もちろん、最初に検索してください)。コミュニティが喜んでお手伝いします。
Jon Seigel 2013

9

これは、アカウント「ビーンカウンター」の狂気です。RAMに費やす$ 1100〜$ 2500は、1週間以内に元が取れる可能性があります

彼らは20人の従業員のタイムアウトを取得しており、そのうち5人は「リソース集約型」の作業を行っています。私は彼らの時間は安くないと思います、そしてそれらの報告のいくつかは給与にサインオフしない上司が大好きなものです。それは無駄な再送信とフラストレーションへの対処に費やされた膨大な時間です。

彼らはおそらくRAMのGBあたり15〜20ドルを見ていることを説明します。現在、128GBのRAMはおよそ$ 2200〜$ 2500であり、RAMの価格は現在少し上がっています。サーバーのマザーボードがそれをサポートできない場合でも(奇妙なことに)、64 GBは$ 1100〜$ 1200になります(私が確認したところ、割引が適用されていない、DellのサーバーRAMの品質です)。64GBのRAMでも、大きな違いが生じる可能性があります(大きなテーブルのテーブルスキャンを確実に回避する場合は特に)。

どれだけの時間が浪費されているかを把握し、それが$ 1100〜$ 2500の価値があるかどうかを尋ねます。$ 1100を費やして64 GBのRAMを取得するだけの場合は、大きなテーブルでのテーブルスキャンを避けてください。大規模なスキャンがメモリをダンプするのを避けるために、インデックスでより多くのディスクを使用します(サポートするレイテンシがある場合)。


5
狂気のためによく言った。4 GBのメモリは、最近のデスクトップに推奨するメモリよりも少なくなっています。そして、それは現在170GBのデータベース環境で実行しようとしています。冗談だ。しかし、やっぱり、ビーンカウンター向けの仮想化は、大型の高価なサーバーを取り除くことができることを意味します;)
TomTom

2
完全に同意します。少なくともOPシナリオのBeanカウンターでは、爪が物理サーバーから取り除かれました(うまくいけば!)
Ali Razeghi 2013

1
信じて。私はしません。TYPICALは、RAMが豊富なサーバーで、LAAAAARGEの安価なディスクです。したがって、仮想マシン上で多数の仮想マシンを実行できます。結局のところ、RAMは通常、制限要因ですよね;)?その結果、データベースがなくても、驚異的なIOPSパフォーマンスが得られます。そこにいて、それを見た。64GBメモリ、2TBはSATAディスクをミラーリング;)
TomTom

答えてくれてありがとう。私は疑いましたが、問題が部分的にハードウェアの模倣であることを証明するデータがありません。私は今それに取り組んでいます。
RMuesi 2013

2
SQL Serverがメモリ内データベースエンジンであることを知らせたいと思うかもしれません。ディスクからの読み取り、SSD(このショップでは利用されていないと確信しています)でさえ、非常に遅いです。RAMからの読み取りには約5nsかかります。テーブルのスキャンと読み取りを示すSET STATISTICSIO ONを使用して実行プランを表示します。物理読み取りと論理読み取りを比較してください。物理はディスクから行われます。
Ali Razeghi 2013

-1

46GBのRAMを搭載した2008 R2を実行しています。仮想マシンはありません。SQL Server 2008。

データベースは約300GBです。

最近、データベースをソリッドステートドライブに配置し、データ出力を3倍にしました。

サーバーは現在45 GBのRAMを使用しており、正常に動作しています。

FC Sata RAIDおよびSAS SCSI RAID。全部で26の論理ドライブ。144回転ディスク。

昨日、接続されてデータを転送するフルハードドライブが50 TBしかないときに、RAMを24 GBしか使用していませんでした。今日私は160TBのフルハードドライブを持っており、45GBのRAMを使用しています。

私のアプリケーションは400MBを超えるRAMを使用しません。

高速のソリッドステートドライブまたはRAMドライブにデータベースが必要だと思います。基本的にはもっと多くのRAMが必要です。


IBM exFlash 400GB MCS $ 4400。それは私が行くところです。
david
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.