問題タブ [sql-server-performance]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - 主キー/クラスタ化インデックスでの GUID の使用
私は SQL サーバーのパフォーマンスにかなり精通していますが、クラスター化された主キーの既定の型として GUID を使用する必要があるという考えについては、常に反論しなければなりません。
テーブルの 1 日あたりの挿入数がかなり少ない (5000 +/- 行 / 日) と仮定すると、どのような種類のパフォーマンスの問題が発生する可能性がありますか? ページ分割はシークのパフォーマンスにどのように影響しますか? どのくらいの頻度でインデックスを再作成 (またはデフラグ) する必要がありますか? フィル ファクタを (100、90、80 など) に設定する必要がありますか?
1 日あたり 1,000,000 行を挿入するとどうなるでしょうか。
すべての質問について事前に謝罪しますが、PK のデフォルトとして GUID を使用しないためのバックアップを探しています。しかし、私は、StackOverflow ユーザーベースからの圧倒的な知識によって私の考えが変わることに対して完全にオープンです。
sql-server-2005 - SQL 2005データベースの大規模なテーブルには、より優れたパフォーマンスが必要です。
SQL 2005(標準版)データベースを使用するデータ駆動型Webアプリケーションに取り組んでいます。
テーブルの1つはかなり大きいです(約30列の800万行以上)。テーブルのサイズは、ストアドプロシージャを介してテーブルからアイテムを選択するWebサイトのパフォーマンスに明らかに影響します。テーブルにはインデックスが付けられていますが、テーブル内の行の量が非常に多いため、パフォーマンスは低下します-これは問題の一部です-テーブルは更新されたものと同じように読み取られるため、インデックスを追加/削除するには、操作が悪化します。
ここでの目標は、テーブルからアイテムを選択するときのパフォーマンスを向上させることです。テーブルには「現在の」データと古い/ほとんど触れられていないデータがあります。この段階で考えられる最も効果的な解決策は、テーブルを2つに分割することです。つまり、1つは古いアイテム(特定の日付より前、たとえば2005年1月1日)用で、もう1つは新しいアイテム(2005年1月1日以前)用です。 。
分散パーティションビューのようなものは知っていますが、これらの機能にはすべてEnterprise Editionが必要であり、クライアントはこれを購入しません(また、ハードウェアを投入することもありません)。
sql-server - SQL Serverの「ドライラン」モード?ロックを保持したりデータを変更したりせずに、データバッファをロードします
SQL Serverデータベースに対していくつかのクエリを実行してから、削除します。理想的には、これはすべてトランザクション内(つまりアトミック)で発生します。
ただし、実際には、データがバッファから削除されてから長い時間が経過しているため、SQL Serverは、トランザクションT-SQLを完了するために多くの物理IOを実行する必要があります。バッチ全体の実行に30秒以上かかる場合、ユーザーはタイムアウトの問題を経験するため、これは問題になる可能性があります。
select
を分割して実行すると、最終的なSQLを実行するたびに、SQLServerが必要なデータでバッファをいっぱいにすることに気付きました。例えば:
最初の実行:
2回目の実行:
..。
n回目の実行:
そして、私が最終的な実行に到達するまでに:
バッファが事前に入力されているため、バッチ全体が高速に実行されます。
SET NOEXEC ON
SQL Serverが実際のデータ変更を実行せず、ロックを取得せず、必要なデータでバッファーをいっぱいにするSQL Serverのモード(つまり)はありますか?例えば
また
sql - SQL Server の非正規化に関する質問 - ユーザー データを 1、3、または 21 のテーブルに保存しますか?
私たちの Web サイトのセクションでは、ユーザーに自分自身 (「プロファイル」) に関する 20 の多肢選択式の質問をするよう求めています。Web サイトのこの部分は頻繁に表示され、ときどき更新されます。この Web サイトでは大量のトラフィックが発生することが予想されるため、パフォーマンスの問題に備えて準備することを検討しています。
これをDBに保存するために私が見ることができる3つの方法は次のとおりです。
質問ごとに 1 つのテーブルを作成します。各テーブルには QuestionID と Answer があり、次にプロファイル データを格納する CustomerInfo テーブルがあり、外部キーが質問にマップされています。
Question、Question_Type、および Answers テーブル。これらの構造にすべてを詰め込みます。ここでの私の懸念は、特にプロファイルを更新するために必要な 20 ほどの挿入です。これは、トラフィック量が多い場合にパフォーマンスに影響を与えますか?
非正規化された単一のテーブル、質問ごとに 1 つのフィールド、HTML や C# オブジェクトに回答コードをハードコーディングします。
私は#2または#3に傾いています。最善の解決策は何だと思いますか?
sql-server - Sql Server 2008 R2 DC 挿入によるパフォーマンスの変化
約 150 万の入力値で発生する興味深いパフォーマンスの変化に気付きました。なぜこれが起こっているのか、誰かが私に良い説明を与えることができますか?
表はとてもシンプルです。(bigint、bigint、bigint、bool、varbinary(max)) で構成されています。最初の 3 つの bigint に pk clusered インデックスがあります。データ varbinary(max) としてブール値「true」のみを挿入します。
その時点から、パフォーマンスはかなり一定しているように見えます。
凡例: Y (ミリ秒単位の時間) | X (10K を挿入)
また、グラフに一定の比較的小さな (時には非常に大きな) スパイクがあることにも興味があります。
スパイク前の実際の実行計画。
凡例:
挿入先のテーブル: TSMDataTable
1. BigInt DataNodeID - fk
2. BigInt TS - メイン
タイムスタンプ 3. BigInt CTS - 変更タイムスタンプ
4. ビット: ICT - 最後に挿入された値の記録を保持 (読み取りパフォーマンスが向上)
5. データ:データ
ブール値 現在のタイムスタンプを保持
環境
ローカルです。
リソースを共有していません。
これは固定サイズのデータベースです (拡張しないように十分です)。
(コンピューター、4 コア、8GB、7200rps、Win 7)。
(SQL Server 2008 R2 DC、プロセッサ アフィニティ (コア 1、2)、3GB、)
sql-server - SQL Server:12%のインデックススキャン密度と50%の断片化。「悪い」はどれくらい悪いですか?
どのくらいの断片化が悪いですか?スキャン濃度が低すぎるのはどれくらいですか?スキャン密度はどれくらい悪いですか?
次のインデックス密度とフラグメンテーションレベルのテーブルがあります。
最適化されたばかりであることがわかりますTransactionEntries17
。そのため、スキャン密度が非常に高く、断片化が非常に低くなっています。
しかし、12%のスキャン密度はひどく低いのでしょうか?48%の断片化はひどく高いですか?
行を削除するとパフォーマンスの問題が発生します(インデックススキャンが必要です)。インデックスの断片化は、70000ページのインデックスの巨大な点滅する赤いアラームですか、それとも可能ですが、起こりそうもない原因ですか?
SQL Server BOLから:
スキャン密度[ベストカウント:実際のカウント]
パーセンテージです。これは、実際のカウントに対するベストカウントの比率です。すべてが連続している場合、この値は100です。この値が100未満の場合、断片化が存在します。
ベストカウントは、すべてが連続してリンクされている場合のエクステント変更の理想的な数です。実際のカウントは、エクステントの変更の実際の数です。
論理フラグメンテーション
インデックスのリーフページのスキャンから返された順序が正しくないページの割合。この数はヒープには関係ありません。アウトオブオーダーページとは、インデックスに割り当てられた次の物理ページが、現在のリーフページの次のページポインタが指すページではないページです。
ただし、断片化のレベルが高すぎるため、減らす必要があるというガイダンスはありません。また、スキャン密度が低すぎるため、増やす必要があるというガイダンスもありません。
sql-server - ストアド プロシージャのパフォーマンスから複数のテーブルを渡す
テーブルごとのプロシージャではなく、ストアド プロシージャから複数のテーブルをプルすると、Sql Server のパフォーマンスにどのような影響がありますか?
sql-server - SQL Server 100% の CPU 使用率 - 1 つのデータベースが他よりも高い CPU 使用率を示しています
約 40 の異なる (それぞれ約 1 ~ 5 GB) データベースを持つ SQL サーバーがあります。サーバーは、32Gigs の RAM を備えた 8 コア 2.3G CPU です。27Gig は SQL Server に固定されています。CPU 使用率はほぼ常に 100% に近く、メモリ消費は約 95% です。ここでの問題は、CPU が常に 100% に近く、その理由を理解しようとしていることです。
このスクリプトを使用して、どのデータベースが高 CPU に寄与しているかを確認するための最初のチェックを実行しましたが、実際に CPU を消費しているものについて詳細に実証することはできませんでした。トップ クエリ (すべての DB から) は、完了するまでに約 4 秒しかかかりません。IO もボトルネックではありません。
ここでメモリが犯人でしょうか?メモリ分割を確認したところ、OBJECT CACHE は SQL Server に割り当てられたメモリ (27G) の約 80% を占めています。多くのSPが関与している場合、それが正常であることを願っています。プロファイラーを実行すると、多くの再コンパイルが見られますが、ほとんどは「一時テーブルの変更」、「遅延コンパイル」などが原因であり、これらの再コンパイルがメモリ不足のためにプランがキャッシュからスローされた結果であるかどうかは明確ではありません
どんな考えでも感謝します。
database - MS SQL データベースに大量のデータを入力する最速の方法は何ですか?
ジレンマ:
MS SQL Server (2012 Dev Edition) でデータの作成を実行しようとしています。データは生産データに基づいています。量は約 4 TB (約 2 億 5000 万アイテム) です。
目的:
全文検索と通常のインデックスでもパフォーマンスをテストします。目標数は、それぞれ約 500K の約 3 億アイテムです。
質問:
心配すべきプロセスや結果をスピードアップするために、事前に何をすべきですか?
元。
- 統計をオフにしますか?
- 単一のトランザクションではなく、トランザクションごとに 1,000 個のアイテムを一括挿入する必要がありますか?
- 単純な復旧モデル?
- ログの切り捨て?
重要:
2k の生産アイテムのサンプルを使用して、データベースに挿入されるすべてのランダム アイテムを作成します。C# で生成されたほぼ固有のサンプルを使用します。1 つのテーブルになります。
sql-server - SQL Server プロファイラー モニターのロック期間
SQL Server でロックの期間を監視しようとしていますが、[期間] 列が空白です。プロファイラーを使用してこれを監視するにはどうすればよいですか?