問題タブ [fragmentation]

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.

0 投票する
2 に答える
1985 参照

sql - インデックスが断片化するのはなぜですか?

1 時間前に単純な小さなテーブル (フィールドが 8 つだけ) があります。テーブルのインデックスの 1 つを再構築し、断片化を 0% にリセットしましたが、現在は最大 38% です。

テーブル自体には 400,000 レコードが含まれていますが、インデックスを再構築してから挿入されたのは 158 個の新しいレコードのみです。レコードの更新はありませんが、おそらくいくつかの削除が行われています。

インデックスが断片化されているのはなぜですか?

インデックスは一意ではなく、1 つのフィールドだけでクラスター化されていません。

データベースは SQL Server 2005 で実行されていますが、互換性レベルは SQL Server 2000 です。

ありがとう

0 投票する
0 に答える
674 参照

c++ - エンティティ「最適化」制約ソルバー/アルゴリズム

更新

エンティティは、特定のエンティティ テンプレートの属性/メソッドで作成されたオブジェクトです。エンティティは、親および/または多数の子を持つことができます。

すべてのエンティティ テンプレートには、スレッドの断片化コストとコンピューターの断片化コストがあります。それらは、そのエンティティの子を親とは異なるコンピューター/スレッドに配置するのにどれだけのコストがかかるかを定義します

新しいエンティティは、すべての反復の最後にコンピューターとスレッドに割り当てられ (追加を介して)、古いエンティティは、N 回ごとの反復の最後にコンピューターとスレッドに再割り当てされます (最適化を介して)。

add が呼び出されると、エンティティが作成され、特定の親にアタッチされます。ただし、それでもコンピューターのスレッドのシミュレーション ランナーに配置する必要があります。

割り当てを決定する要因は、子 {computer|thread} の断片化コストと、オプションで断片化コスト マトリックスです。


オリジナル

やあ、

次の問題を解決するための一般的な方向性/アルゴリズム/フィールドに関するアイデアを探しています。

反復リアルタイム シミュレーション環境に N 個のエンティティ (それぞれに可能な親と可能な M 個の子がある) があります。各エンティティは、サーバー環境に配置され、1 台のコンピューターとそのコンピューターの 1 つのスレッドに配置されます。各エンティティには、「コンピューターの断片化コスト」と「スレッドの断片化コスト」があります。これは、0->1 の値 (1 が最も高価) であり、そのエンティティの子を異なるコンピューターに配置することがどれほど苦痛/コストがかかるかを定義します。またはスレッド。「コンピューターの断片化コスト」は「スレッドの断片化コスト」より高くなります。

2回の手術があります。エンティティが最初に追加されるときに実行される「追加」操作。また、エンティティを別のスレッド/コンピューターに再配置する Y 回の反復ごとに実行される「最適化」操作もあります。

断片化コストを考慮して、これら 2 つの操作で断片化を最小限に抑える一般的なアルゴリズム/ガイドラインは何ですか?

また、各エンティティは事前定義されたテンプレートから作成されます。エンティティ テンプレートのすべてのペア間の断片化コストを定義するマトリックスがあります。この追加データを使用して断片化を減らすにはどうすればよいでしょうか?

ありがとう

0 投票する
3 に答える
2416 参照

c++ - 実行時にC ++でヒープの断片化を検出するポータブルな方法は?

Qt ベースの C++ アプリケーションを作成していますが、現在のシステムが実際にメモリ負荷を維持できるかどうかを確認するために、メモリの断片化を検出できる必要があります。プログラムは大きな画像を読み込みます (15/21 メガピクセルが標準です)。メモリ内でフィルタリングを実行します(疎行列を使用)。たとえば、私は Windows でメモリの断片化の問題を抱えており、VMMap はこれに非常に役立ちました。問題は、一部の DLL (Wacom タブレットの「wintab32.dll」と UltraMon アプリ) が再配置されず、アドレス空間が分割されていることでした。プロセスの 0x10000000-0x30000000 VA で。

断片化の問題に対するある種の認識をアプリケーションに提供し、VMMAP が提供する情報を提供するクロスプラットフォーム (linux/mac/win32) アプローチが既に存在するかどうか疑問に思います。

0 投票する
5 に答える
703 参照

c# - C#:リソースを割り当ての逆の順序で配置することには利点がありますか?

何年も前に、私は可能な限り、リソースが割り当てられた方法とは逆の順序でリソースを解放するように忠告されました。あれは:

640KのMS-DOSマシンでは、ヒープの断片化を最小限に抑えることができると思います。C#/。NETアプリケーションでこれを行うことには実際的な利点がありますか、それともこれはその関連性を超えた習慣ですか?

0 投票する
3 に答える
805 参照

sql-server - Sql サーバー 2005 では、毎日のインデックス デフラグが必要です

私たちの実稼働データベースでは、テーブルの 1 つで毎日インデックスを最適化する必要があります。テーブルにはいくつかのインデックスがあり、そのうちの 1 つが毎日 90% の断片化に達します。

インデックスは 2 つの日付フィールド (開始時刻と終了時刻) にあります。

開発データベースではこの問題は発生しませんが、明らかにスループットが大幅に低下します。

毎晩デフラグを実行するメンテナンス タスクがスケジュールされていますが、これは営業時間中に実行する必要がある場合もあります。

テーブルには現在 250,000 レコードがあり、1 日あたり約 500 から 3000 レコードずつ増加しています。

なぜそれが急速に断片化されているのかについてのアイデアはありますか?

0 投票する
4 に答える
2394 参照

sql - SQLServer2005のインデックスの断片化

私が継承したSQLServer2005データベースのいくつかのキーは、非常に高い断片化率を持っています。次のSQLを使用する場合:

断片化率が50〜99のテーブルがいくつかあります。これらのテーブルはすべて100,000行を超え、一部は2,000,000行以上です。これがアプリケーションのパフォーマンスに重大な問題を引き起こしていると思われるため、次のSQLを使用してこれらのインデックスの一部を再構築しようとしました。

ただし、インデックスを再構築して断片化%を再度確認した後、それらはすべて変更されていません。足りないものはありますか?私はこのトピックについていくつかの検索を行いましたが、これまでのところ空になっています。

ありがとう!

0 投票する
2 に答える
215 参照

memory - 論理アドレスの混乱

論理アドレスを使用して分析を試みています。次のプログラムは私の動機を説明しています...

このプログラムを 32 ビット システムで実行すると、次のように表示されます。

論理アドレスをページサイズに関連付けたい..この論理アドレスがどのように作成されるかを言いたい(オフセット、ページ、データに関して)

このプログラムのサイズは 1257 バイトですが、ページ全体が読み込まれると思います (間違っていたら訂正してください) ページ全体が読み込まれるか、1257 バイトだけが読み込まれるかを確認する方法はありますか

矛盾がある場合に備えて、私の質問が明確であることを願っています。ありがとう

0 投票する
6 に答える
3715 参照

c# - 断片化を防ぐために大きなオブジェクト ヒープを使用した直後に GC.Collect を呼び出す必要があります

私のアプリケーションは、大量のバイナリ シリアライゼーションと大きなオブジェクトの圧縮を行います。非圧縮のシリアル化されたデータセットは約 14 MB です。圧縮すると約 1.5 MB になります。データセットで serialize メソッドを呼び出すたびに、大きなオブジェクト ヒープのパフォーマンス カウンターが 1 MB 未満から約 90 MB に跳ね上がることがわかりました。また、比較的負荷の高いシステムでは、通常、このシリアライゼーション プロセスが数回発生するしばらく (数日) 実行した後、このシリアライゼーション メソッドが呼び出されると、アプリケーションがメモリ不足の例外をスローすることが知られています。メモリは十分にあるようです。断片化が問題であると推測しています (100% 確信しているとは言えませんが、ほぼ確実です)。

私が考えることができる最も簡単な短期的な修正(短期と長期の両方の答えを探していると思います)は、シリアル化プロセスが完了した直後に GC.Collect を呼び出すことです。私の意見では、これはLOHからオブジェクトをガベージコレクションし、他のオブジェクトを追加する前に行う可能性があります。これにより、断片化をあまり引き起こすことなく、他のオブジェクトがヒープ内の残りのオブジェクトにぴったりと収まるようになります。

このばかげた 90MB の割り当て以外に、失われた LOH を使用するものは他にないと思います。この 90 MB の割り当ても比較的まれです (約 4 時間ごと)。もちろん、そこにはまだ 1.5 MB の配列があり、おそらく他のいくつかの小さなシリアル化されたオブジェクトがあります。

何か案は?

良い反応の結果として更新

これが仕事をする私のコードです。私は実際にこれを変更して、シリアル化中に圧縮して、シリアル化が同時にストリームにシリアル化されるようにしましたが、あまり良い結果は得られませんでした。また、メモリ ストリームを 100 MB に事前割り当てし、同じストリームを 2 回続けて使用しようとしましたが、とにかく LOH は最大 180 MB になりました。Process Explorer を使用して監視しています。それは非常識です。次に UnmanagedMemoryStream のアイデアを試してみようと思います。

そうでない場合は、試してみることをお勧めします。この正確なコードである必要はありません。大規模なデータセットをシリアル化するだけで、驚くべき結果が得られます (私のものには、約 15 のテーブルがあり、文字列と列がたくさんあります)。

UnmanagedMemoryStream でバイナリ シリアル化を試行した後に更新する

UnmanagedMemoryStream にシリアル化しても、LOH は同じサイズにジャンプします。私が何をしても、BinaryFormatter を呼び出してこの大きなオブジェクトをシリアル化すると、LOH が使用されるようです。事前割り当てに関しては、あまり役に立たないようです。100MBを事前に割り当ててからシリアライズすると、170MBが使用されます。これがそのコードです。上記のコードよりもさらに簡単

真ん中の GC.Collect() は、LOH パフォーマンス カウンターを更新するためだけのものです。正しい 100 MB が割り当てられることがわかります。しかし、シリアライズを呼び出すと、すでに割り当てられている 100 の上にそれが追加されているように見えることに気付くでしょう。

0 投票する
1 に答える
391 参照

memory - プログラムのメモリのすべての割り当てと解放を記録する方法は?

ねじれたサーバーのメモリ使用量が増加する理由が断片化であることを知りたいです。ここに質問を投稿しました: ツイスト サーバーのメモリ使用量の増加の原因を見つける方法は?

これから行うことは、ヒープを視覚化することです。記事を見つけました:メモリの断片化。その記事のヒープの図は、私が望むものとまったく同じです。このような図を matplotlib やその他のツールで描くことは難しくありません。最も難しい仕事は、メモリの割り当てと解放をどのように記録するかということです。

CPython のソース コードを変更し、いくつかのログ コードを omalloc.c に追加して Python を再コンパイルし、変更した CPython を使用してサーバーを実行できることを知っています。しかし、私はそれで時間を無駄にしたくありません。次に、利用可能なツールを探しています。valgrindを使用してメモリ リークを検出できるツールがあることは知っていますが、割り当てと割り当て解除を記録する方法がわかりません。その memcheck が次のようなものを検出できることがわかります。

  • 無効な読み取り
  • 初期化されていない
  • 無効な無料

しかし、それは私が望むものではありません。必要なのは次のとおりです。

  • メモリのすべての割り当てと割り当て解除を時間、アドレス、サイズとともに記録する

私の質問は次のとおりです。

  1. どうすればvalgrindでそれを行うことができますか?
  2. できない場合は、そのためのモジュールを作成する必要がありますか?
  3. または、これを達成できるより良いツールはありますか?

ありがとう。

0 投票する
3 に答える
3503 参照

windows - フラグメント化された IPv4 パケットを作成する簡単な方法

現在、ネットワーク スタックに取り組んでおり、IPv4 フラグメンテーションを実装しようとしています。理論的には機能する実装がありますが、実際に断片化されたパケットを投げて機能することを実際にテストしたいと思います。

これを行うためのソフトウェア、またはおそらくコードを書く簡単な方法はありますか? これを機能させるためだけに、テストしているホストの MTU を変更したくはありません。私の開発環境は Windows です。