タグ付けされた質問 「index-statistics」

3
インデックスを作成するよりも統計を作成したほうがよいのはいつですか?
私は上の情報をたくさん発見したものを STATISTICS、次のとおりです。彼らは、彼らがクエリやインデックスから手動または自動で作成する方法を、維持、およびようにしていますか。しかし、私は見つけることができなかったいかなるに関するガイダンスや「ベストプラクティス」の情報それらを作成するには:インデックスからではなく、手動で作成されたSTATISTICSオブジェクトのほうがどのような状況にメリットがあるか。私は手動でフィルターされた統計を作成し、パーティション化されたテーブルのクエリを支援しました(インデックス用に作成された統計はテーブル全体をカバーし、パーティションごとではないためです-brillaint!)インデックスの詳細を必要とせず、インデックスを維持したり、ブロック/デッドロックの可能性を高めたりするコストも必要ありません。 @JonathanFiteはコメントで、インデックスと統計の違いについて言及しました。 インデックスは、テーブル自体とは異なる方法でソートされたルックアップを作成することにより、SQLがデータをすばやく見つけるのに役立ちます。統計は、クエリを満たすために必要なメモリ/労力をSQLが判断するのに役立ちます。 主に質問を明確にするのに役立つからです。 どのようにこのことを知っている(または上の任意の他の技術的な情報はないものを Sとどのように行動しての性質に関連sをSTATISTICS)助けを決定するとき選択するCREATE STATISTICS以上CREATE INDEXの関連が作成されますインデックスを作成するときに、特に、STATISTICSオブジェクトを?どのようなシナリオでは、よりよい持っていることによって提供されることになるだけ STATISTICS情報をしていないインデックスを持ちますか? 可能な場合、STATISTICSオブジェクトがに比べてより適しているシナリオの実用例があると、非常に便利INDEXです。 私は視覚的な学習者/思考者であるため、最適なタイミングを判断するのに役立つ可能性のある手段として、STATISTICSとINDEXes の違いを並べて確認すると役立つと思いSTATISTICSました。 Thingy PROs CONs ------- ---------- ------------------- INDEX * Can help sorts. * Takes up space. * Contains data (can * Needs to be maintained (extra I/O). "cover" a query). * More chances for blocking / dead-locks. STATISTICS …


7
統計の自動更新を無効にする理由は?
私が勤務しているクライアント企業が、一部のSQL Serverの統計情報の自動更新オプションをオフにすることを決定したことと、DBAがパフォーマンスの問題が発生したときに手動でトラブルシューティングすることを知りました。 しかし、この種のことは私には意味がありません。統計が更新されないようにしたいのはなぜですか?

1
統計は最新ですが、推定値が間違っています
するとdbcc show_statistics ('Reports_Documents', PK_Reports_Documents)、レポートID 18698に対して次の結果が得られます。 このクエリの場合: SELECT * FROM Reports_Documents WHERE ReportID = 18698 option (recompile) クラスター化インデックスPK_Reports_Documentsを期待どおりにシークするクエリプランを取得します。 しかし、私を困惑させるのは、推定行数の誤った値です: よると、この: サンプルクエリのWHERE句の値がヒストグラムのRANGE_HI_KEY値と等しい場合、SQL ServerはヒストグラムのEQ_ROWS列を使用して、等しい行の数を決定します これは私が期待する方法でもありますが、実際にはそうではないようです。またRANGE_HI_KEY、提供されたヒストグラムに存在する他のいくつかの値を試してみてshow_statistics、同じことを経験しました。私の場合、この問題により、一部のクエリで非常に最適でない実行プランが使用され、実行時間が数分になるのに対し、クエリヒントで1秒で実行できるように思われます。 全体として:EQ_ROWS推定行数にヒストグラムが使用されていない理由と、誤った推定値はどこから来たのかを誰かが説明できますか? もう少し(おそらく役立つ)情報: 統計の自動作成はオンであり、すべての統計は最新です。 クエリされるテーブルには、約8000万行があります。 PK_Reports_Documentsなる組み合わせPKでありReportID INT、およびDocumentID CHAR(8) クエリは合計5つの異なる統計オブジェクトをロードしているように見えますが、すべてのオブジェクトにReportIDはテーブルの+他の列が含まれています。それらはすべて新しく更新されました。RANGE_HI_KEY以下の表にあるのは、ヒストグラムの上限の列値です。 +-------------------------------------------------------------------------+----------+--------------+--------------+---------------------+--------------+------------+----------+---------------------+----------------+ | name | stats_id | auto_created | user_created | Leading column Type | RANGE_HI_KEY | RANGE_ROWS | EQ_ROWS | …


3
MySQLステータス変数Handler_read_rnd_nextは大きく成長しています
MYSQLステータスでは、Handler_read_rnd_next値が非常に高くなっています。 この値は、適切なインデックスを持たないクエリが実行されると増加することを認識しています。 ただし、「Handler_read_rnd_next」のようなshow statusを実行しても、この値は2ずつ増加します。 このステータスフラグに基づいて、いくつかの統計情報を監視しています。 そのため、毎回、この統計は重要を示しています。 これらの「表示」実行カウントを「Handler_read_rnd_next」カウントから除外できますか? このためのもう1つの例は、 10行のテーブルがあり、テーブルは列 'data'にインデックスが付けられています。次のクエリを実行すると、 select data from test where data = 'vwx' -> returns one row 「Handler_read_rnd_next」の値を確認すると、7ずつ増加します。 以下は、上記のクエリのExplainコマンドの結果です。 explain select data from test where data = 'vwx'; id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra 1, 'SIMPLE', 'test', 'ref', 'data', 'data', '35', …

1
UPDATE STATISTICS…ROWCOUNTを使用した後に統計をリセットする方法
クエリのチューニングとテストの目的で、を実行して、行数とページ数をテーブルのインデックス統計に手動で割り当てることができますUPDATE STATISTICS。しかし、統計をテーブルの実際の内容に再計算/リセットするにはどうすればよいでしょうか。 --- Create a table.. CREATE TABLE dbo.StatTest ( i int NOT NULL, CONSTRAINT PK_StatTest PRIMARY KEY CLUSTERED (i) ); GO --- .. and give it a thousand-or-so rows: DECLARE @i int=1; INSERT INTO dbo.StatTest (i) VALUES (@i); WHILE (@i<1000) BEGIN; INSERT INTO dbo.StatTest (i) SELECT @i+i FROM dbo.StatTest; …

3
統計の自動更新をFalseに設定する理由
幅広い買収プロジェクトの一環として、SQL Serverのインスタンスを約20継承しました。私はパフォーマンスを評価している最中であり、メンテナンスプランの実装方法が気に入らない。 毎日のブランケットインデックスの再構築(これを処理できます)と、統計の毎日の手動更新が表示されています。 データベースの約半分は、統計の自動更新= Falseに設定されています。理由は、「パフォーマンスの問題」を減らすことだと言われていること以外は明確ではありません... 私は常にこれをTrueに設定するベストプラクティスを考え、これに取り組みました。この設定がTrueの場合、手動更新は必要ないと感じました。私が間違っている? 誰もがこれをFalseに設定することの利点を説明できますが、代わりに毎日手動で更新することはできますか? 一部のデータベースはトランザクション性が高い(1日あたり数百万の挿入、削除、更新)データベースもあります。その他のデータベースはトランザクション率が低く、一部はすべて読み取り専用です。Auto Update設定がFalseに設定されているのに、韻や理由はありません。宝くじのようです。

1
クエリのパフォーマンスが悪い
処理するデータ量に応じて、通常0.5〜6.0秒で実行される大きな(10,000行以上)手順があります。過去1か月間で、FULLSCANで統計を更新してから30秒以上かかりました。速度が低下すると、sp_recompileは問題を「修正」し、夜間統計ジョブが再度実行されるまで待機します。 低速と高速の実行プランを比較することで、特定のテーブル/インデックスに絞り込みました。実行速度が遅い場合は、特定のインデックスから約300行が返されると推定され、実行速度が速い場合は1行と推定されます。実行速度が遅い場合はインデックスでシークを行った後にテーブルスプールを使用し、実行速度が速い場合はテーブルスプールを実行しません。 DBSS SHOW_STATISTICSを使用して、インデックスヒストグラムをExcelでグラフ化しました。私は通常、グラフがより「ローリングヒル」であると予想しますが、代わりにそれは山のように見え、最高点はグラフ上の他のほとんどの値よりも2倍から3倍高くなります。 FULLSCANなしで統計を更新すると、より正常に見えます。その後、もう一度FULLSCANで実行すると、上記のように見えます。 これは、パラメータスニッフィングの問題のように感じられ、特に上記の(一見)奇妙なインデックス分布に関連しています。 プロシージャはテーブル値パラメーターを受け取りますが、パラメーター値パラメーターでパラメーターのスニッフィングを行うことができますか? 編集:プロシージャは、他に12個のパラメーターも受け取ります。そのうちのいくつかはオプションで、そのうちの2つは開始日と終了日です。 ヒストグラムは奇妙ですか、それとも間違ったツリーを吠えていますか? クエリを調整したり、インデックスを調整したりすることは確かに快適です。それがすばらしい修正である場合、その時点での私の質問は、歪んだヒストグラムについての詳細です。 これはPK IDENTITYクラスター化インデックスであることを述べておきます。互いに通信する2つのシステムがあり、1つはレガシーシステムで、もう1つは新しい自家製システムです。どちらのシステムも同様のデータを保存します。新しいシステムのこのテーブルのPKを同期させるために、古いシステムにデータが追加されない場合でも(RESEEDが実行された場合でも)、PKが増加します。したがって、この列の番号付けにいくつかのギャップがある可能性があります。レコードが削除されることはほとんどありません。 どんな考えでも大歓迎です。より多くの情報を収集/含めることができて、とてもうれしいです。

1
本番サーバーでsp_updatestatsを実行すると、どのような影響がありますか?
運用sp_updatestats環境のSQL Serverで実行しても安全ですか? または、SQLサーバーのすべての統計を更新すると、どのような影響がありますか?SQLサーバーを実行中に「チョーク」して、ユーザーにタイムアウトやその他の問題を引き起こすことはできますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.