タグ付けされた質問 「cache」

キャッシュは、ディスクドライブに格納されているデータへのアクセス時間を短縮するために、データをメモリに一時的に格納(キャッシュ)するメカニズムです。

5
SQL Serverオプション「アドホックワークロード用に最適化」を使用しないのはなぜですか?
このようなKimberly TrippによるSQL Serverプランのキャッシュに関するいくつかの素晴らしい記事を読んでいます:http : //www.sqlskills.com/blogs/kimberly/plan-cache-and-optimizing-for-adhoc-workloads/ 「アドホックワークロード向けに最適化する」オプションさえあるのはなぜですか?これは常にオンにすべきではありませんか?開発者がアドホックSQLを使用しているかどうかに関係なく、それをサポートするすべてのインスタンス(SQL 2008+)でこのオプションを有効にしないのはなぜですか?

3
パラメータースニッフィングvs変数vs再コンパイルvs未知の最適化
そのため、今朝(30秒+実行時間)に問題を引き起こす長時間実行中のprocがありました。パラメータスニッフィングが原因かどうかを確認することにしました。そのため、パラメータスニッフィングを無効にするために、procを書き直し、受信パラメータを変数に設定しました。試された/真のアプローチ。バム、クエリ時間が改善されました(1秒未満)。クエリプランを見ると、元のインデックスでは使用されていなかった改善が見つかりました。 誤検知が発生しなかったことを確認するために、元のprocでdbcc freeproccacheを実行し、改善された結果が同じかどうかを確認するために再実行しました。しかし、驚いたことに、元のprocはまだ低速で実行されていました。まだ遅いWITH RECOMPILEを使用して再試行しました(プロシージャの呼び出しと、プロシージャ自体の内部で再コンパイルを試行しました)。サーバーも再起動しました(明らかに開発ボックス)。 だから、私の質問はこれです...空のプランキャッシュで同じスロークエリを取得したときにパラメータスニッフィングがどのように責任を負うことができるか...スニフするパラメータはありませんか? 代わりに、プランキャッシュに関係のないテーブル統計の影響を受けますか。もしそうなら、なぜ受信パラメータを変数に設定すると役立つのでしょうか?? さらなるテストでは、proc DIDの内部にOPTION(OPTIMIZE FOR UNKNOWN)を挿入すると、予想される改善された計画が得られることもわかりました。 それで、私より賢い皆さんの中には、この種の結果を生み出すために舞台裏で何が起こっているのかについての手がかりを与えることができますか? 別の注意事項として、遅いプランもGoodEnoughPlanFound理由により早期に中止されますが、速いプランには実際の計画には早期中止の理由がありません。 要約すれば 受信パラメータから変数を作成する(1秒) 再コンパイル(30秒以上) dbcc freeproccache(30秒以上) オプション(イギリス向けに最適化)(1秒) 更新: こちらのスロー実行プランをご覧ください:https : //www.dropbox.com/s/cmx2lrsea8q8mr6/plan_slow.xml こちらの高速実行プランをご覧ください:https : //www.dropbox.com/s/b28x6a01w7dxsed/plan_fast.xml 注:テーブル、スキーマ、オブジェクト名はセキュリティ上の理由で変更されました。


3
頻繁なクエリキャッシュの無効化のオーバーヘッドは価値がありますか?
現在、主に多くのテーブルで実行されているINSERT、DELETE、UPDATEステートメントの数が多いため、クエリキャッシュから多数の無効化が発生しているMySQLデータベースで作業しています。 私が判断しようとしているのは、これらのテーブルに対して実行されているSELECTステートメントにクエリキャッシュを使用できるようにすることの利点があるかどうかです。それらは非常に迅速に無効化されるため、これらのテーブルのSELECTステートメントでSQL_NO_CACHEを使用することが最良の方法であると思われます。 頻繁な無効化のオーバーヘッドは価値がありますか? 編集:以下のユーザー@RolandoMySQLDBAのリクエストに応じて、MyISAMおよびINNODBに関する情報を以下に示します。 InnoDB データサイズ:177.414 GB インデックスサイズ:114.792 GB テーブルサイズ:292.205 GB MyISAM データサイズ:379.762 GB インデックスサイズ:80.681 GB テーブルサイズ:460.443 GB 追加情報: バージョン:5.0.85 query_cache_limit:1048576 query_cache_min_res_unit:4096 query_cache_size:104857600 query_cache_type:ON query_cache_wlock_invalidate:オフ innodb_buffer_pool_size:8841592832 24GBのRAM

2
PostgreSQLインデックスキャッシング
PostgreSQLでのインデックスのキャッシュ方法に関する「わかりやすい」説明を見つけるのが難しいので、これらの仮定のいずれかまたはすべてを現実的にチェックしたいと思います。 行のようなPostgreSQLインデックスはディスク上に存在しますが、キャッシュされる場合があります。 インデックスは完全にキャッシュ内にある場合とまったくない場合があります。 キャッシュされるかどうかは、それが使用される頻度に依存します(クエリプランナーが定義)。 このため、ほとんどの「賢明な」インデックスは常にキャッシュに置かれます。 インデックスbuffer cacheは行と同じキャッシュ(?)に存在するため、インデックスで使用されるキャッシュスペースは行で使用できません。 これを理解する動機は、データの大部分が決してアクセスされないテーブルで部分インデックスを使用できると示唆された別の質問に続いています。 これを実行する前に、部分インデックスを使用すると2つの利点が得られることを明確にしたいと思います。 キャッシュ内のインデックスのサイズを小さくし、キャッシュ内の行自体により多くのスペースを解放します。 Bツリーのサイズを小さくして、クエリの応答を高速化します。

2
データベース内のすべてのテーブルの非圧縮サイズを見つける
Dynamics AXには、メモリにロードしてキャッシュするようにテーブルを構成できるキャッシュメカニズムがあります。このキャッシュは、メモリの問題を防ぐために一定のKBに制限されています。私が話している設定は呼び出さentiretablecacheれ、単一のレコードが要求されるとすぐにテーブル全体をメモリにロードします。 最近まで、いくつかのスクリプトに依存して、この設定を持つテーブルのサイズを検証し、テーブルサイズがこの制限を超えているかどうかを確認していました。 しかし、今では圧縮が作用し始めており、sp_spaceusedやsys.allocation_unitsのようなものが、圧縮されたデータによって実際に使用されているスペースを報告しているようです。 明らかに、アプリケーションサーバーは圧縮されていないデータを処理しているため、SQL Serverのディスク上のデータサイズは無関係です。非圧縮データの実際のサイズが必要です。 私はsp_estimate_data_compression_savingsを知っていますが、名前が示すように、これは単なる見積もりです。 サイズをできるだけ正確にしたいと思います。 私が考えることができる唯一の方法は、圧縮テーブルと同じ構造の非圧縮テーブルを作成し、そのシャドウテーブルに圧縮データを挿入し、そのシャドウテーブルのサイズを確認する、複雑な動的SQLでした。 言うまでもなく、これは少し面倒で、数百GBのデータベースで実行するには時間がかかります。 Powershellはオプションの可能性がありますが、すべてのテーブルを反復処理しselect *てスクリプトでサイズを確認するのは好ましくありません。 要するに、可能であれば、アプリケーションに提示された方程式から断片化された状態で圧縮されないため、各テーブルのサイズを取得する方法が必要です。私はさまざまなアプローチを受け入れています。T-SQLをお勧めしますが、Powershellや他の創造的なアプローチには反対しません。 アプリケーションのバッファがデータのサイズであると仮定します。bigintは常にbigintのサイズであり、文字データ型は1文字あたり2バイト(ユニコード)です。BLOBデータはデータのサイズも取ります。enumは基本的にintであり、数値データはnumeric(38,12)、datetimeはdatetimeのサイズです。また、NULL値はありません1900-01-01。空の文字列として保存されるか、ゼロになります。 これがどのように実装されているかについてのドキュメントはありませんが、前提はPFEおよびサポートチームが使用するいくつかのテストとスクリプトに基づいています(また、チェックはアプリケーションに組み込まれ、アプリは認識できないため、明らかに圧縮を無視します)基になるデータが圧縮されている場合)、テーブルサイズもチェックします。例のこのリンクは述べています: 大きなテーブルにはEntireTableキャッシュを使用しないでください(AX 2009では128 KBまたは16ページ以上、AX 2012では「テーブルキャッシュサイズ全体」アプリケーション設定[デフォルト:32KB、または4ページ])–代わりにレコードキャッシュに移動します。

1
FreeProcCacheとFreeSystemCacheの違い
現在DBCC FREEPROCCACHE、実行中のSQLクエリ間でバッファプールから情報を消去するときに実行します。しかし、私はこの Technetの記事を参照していましたDBCC FREESYSTEMCACHE。どのキャッシュがFREESYSTEMCACHEワイプFREEPROCCACHEしないのですか?
12 sql-server  cache 

1
Qcache_free_memoryがいっぱいになっていませんが、たくさんのQcache_lowmem_prunesを取得しています
CMSのクエリキャッシュを少し始めました。 誰かが半分以上が無料であるときになぜ私が多くを得るのか私に言うことができますか(または少なくとも推測を与えることができますか)?Qcache_lowmem_prunesQcache_free_memory query_cache_size=512M query_cache_limit=1M 約12時間後の様子です show status like '%qcach%'; +-------------------------+-----------+ | Variable_name | Value | +-------------------------+-----------+ | Qcache_free_blocks | 10338 | | Qcache_free_memory | 297348320 | | Qcache_hits | 10254104 | | Qcache_inserts | 6072945 | | Qcache_lowmem_prunes | 725279 | | Qcache_not_cached | 2237603 | | Qcache_queries_in_cache | 48119 …


1
SQL Serverベースラインテストの手順の決定的なリスト?
SQL Serverを使用するアプリのパフォーマンステスト/ベースラインを実行する前に、インスタンスを再起動せずにインスタンスを「クリーン」な状態に設定できるようにしたいと考えています。私は従う傾向があるステップがありますが、正しい順序であり、冗長なステップがない決定的なリストを作成したいと思います。 この手順の一覧では、SQL Serverを「クリーン」な状態に設定できますか? シーケンスは論理的/正しいですか? 余分な手順はありますか? CHECKPOINT -- Write all dirty pages DBCC DROPCLEANBUFFERS -- All should be clean after checkpoint? DBCC FREEPROCCACHE -- Clear the plan cache DBCC FREESYSTEMCACHE -- Is this necessary after FREEPROCCACHE? DBCC FREESESSIONCACHE -- May not be necessary if distributed queries aren't used, but want …

3
MS SQL Serverのバージンクエリのパフォーマンスを向上させる方法は?
ASP.NET Webサイトで、独自の独立したデータキャッシュを実行し、データが長期間変化しないため、同じクエリでSQL Serverに2回クエリする必要がありません。そのSQL Serverへの初回(バージン)クエリのパフォーマンスを改善する必要があります。一部のクエリは、SQL Serverが使用する可能性のある大量のデータを処理しますtempdb。一時テーブル変数や一時テーブルは使用しないので、SQL Serverはtempdb必要なときにいつでもそれ自体を使用することにしました。 私のデータベースサイズは16Gbですが、サーバーマシンで32Gbの物理RAMを使用できます。 MS SQL Serverのキャッシュ戦略は、同じデータを再度ロードする必要がある場合に、同様のクエリのパフォーマンスを向上させるために、RAMにデータを保持しようとすることを理解しています。さらに、tempdbの代わりに使用可能なRAMを使用して、ディスクアクセスを引き起こさずにパフォーマンスを高速化しようとします。 tempdb SQL Serverに何かを格納する必要があるクエリが来て、十分なRAMが利用できない場合、SQL Serverには2つの選択肢があると思います。 1)キャッシュされたデータをアンロードし、tempdbの代わりにスペアRAMを使用してディスクの書き込みを回避する 2)今後のクエリのためにキャッシュされたデータを保持し、tempdbの使用を開始します。これにより、ディスクへの書き込みが遅くなります。 この状況でSQL Serverがどのような選択をするかはわかりませんが、最初の(バージン)クエリのパフォーマンスのみを考慮し、同じクエリをSQL Serverに再度送信することはないため、選択#1をしたいと思います。 (私は同様のクエリを送信する可能性があります)。 このシナリオのSQL Serverキャッシュ戦略は何ですか? 新しいクエリのtempdbの回避と2回目のクエリの速度の間で、RAMの使用量をどのようにバランスさせますか? SQL Serverを選択#1するように構成することは可能ですか?はいの場合、どのように? 他にどのようにしてすべてのバージンSQLクエリのパフォーマンスを向上させることができますか? SQL Serverのキャッシュ戦略がわからないので、データベースをRAMディスクに配置します。これにより、SQL Serverが常に#1を選択する場合でも、キャッシュされていないデータを高速で読み込むことができます。SQL Serverが選択肢#2を選択し続けると、SQL Serverが利用可能なRAMを少なくしてより多くのtempdbを使用し始める可能性があります(RAMディスクに16Gbを使用した後は16Gbしか残りません)tempdb。 SQL 2008 R2のソリューションに興味がありますが、おそらくSQL 2008、SQL 2005でも同じで、SQL 2000かもしれません。 明確化: そのボックスで実行されている他のアプリケーションはなく、SQL Server専用です。ウェブサイトは別のボックスで実行されます。 Windows Server 2008 R2 Enterprise 64ビット上のSQL Server 2008 R2 Standard …

1
SQLがバッファキャッシュからすべてのページを数分ごとにダンプする
複数のデータベースを実行している単一のSQL2012 SP4ノードがあります。 サーバーには20 GBのメモリが利用可能で、14 GBがSQLに割り当てられています(他にボックスで実行されているものはありません)。 SQLは数分ごとにバッファキャッシュ全体をダンプします。ページの平均余命はゼロになり、バッファキャッシュ記述子はキャッシュに何もないことを示します。 私はリソースモニターの通知を確認しました。通知は数ミリ秒ごとに高/定常/低から跳ね回っています。 RESOURCE_MEMPHYSICAL_HIGH RESOURCE_MEM_STEADY RESOURCE_MEMPHYSICAL_LOW タイムスタンプが数ミリ秒離れています。PLEは基本的に鋸歯状のパターンです。 これは、SQL2012 SP1とこの質問で以前に発生したのを見たことがあります。 バッファーキャッシュ内のSQL Server 2012空きページが使用されていない 私はすでにSP4に更新していますが、同様の問題のようです。 サービスアカウントのLPIMをオンにして、最大メモリ設定をいじってみました。最大メモリを下げると、バッファキャッシュがより頻繁に空になるようです。 次に確認することについてのアイデアはありますか? サーバーのワークロードは文字通り何もありません(ERPシステムでアイテムのリストをスクロールしていますが、キャッシュが再び低下するまでに約40〜50 MBに達します)。 SP1からアップグレードしてこれを修正したので興味深いです。キャッシュが約500MBになりました。それ以来、私は最大メモリ設定を14GBに落としました。 Windowsがパニックに陥り、SQLでのメモリプレッシャーに関する誤った通知をスローしているのではないかと思います。つまり、最大メモリが無制限に設定されているサーバーは問題なく動作しているようですが、数百MBを超えるキャッシュを満たしていないようです。やっと50に... 詳細:尋ねた人のために コア数: 4 データベースサイズ: 80GB エラーログは以下を示します: A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 0 …

1
テーブルはどのくらいのメモリを使用していますか?
SQL Server(2005以降)でテーブルが使用しているメモリの量を調べる方法はありますか? たとえば、3000万レコードのテーブルがあるとします。インデックス、データ、テキスト/イメージページなど、このテーブルに属するページが現在バッファキャッシュにあるページ数を教えてください。 私はこのクエリをPinal Daveが見つけましたが、このクエリはインデックスによって割り当てられたページのみを返すようです(クラスター化されているかどうかにかかわらず)。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.