大規模なトランザクションを実行する際のメモリ消費量を削減する

WBOY
リリース: 2024-02-10 23:06:08
転載
510 人が閲覧しました

大規模なトランザクションを実行する際のメモリ消費量を削減する

php エディターの Youzi が、今日は重要なテクニック、つまり大規模なトランザクションの実行時にメモリ消費を削減する方法を紹介します。大量のデータを処理したり、複雑な操作を実行したりする場合、メモリ消費が深刻な問題になる可能性があります。この問題を解決するには、コードの効率とパフォーマンスを向上させるためにいくつかの最適化措置を講じる必要があります。この記事では、メモリ消費を削減し、大規模なトランザクションを処理するときにメモリ リソースをより効率的に使用するためのいくつかの方法とテクニックを詳しく紹介します。

質問の内容

インターネット上の例に従い、次の sqlite パラメーターを使用して挿入クエリの速度を向上させました。 リーリー

これは私のコードです:

リーリー

クエリは高速に実行されますが、RAM の消費量が多すぎます。データは RAM に保存されるため、実行の終了時にのみデータベース ファイルに保存されます。

データをデータベース ファイルに定期的に保存することは可能だと思います。これにより、実行時間はわずかに増加しますが、メモリ消費量は削減されます。 「i」が変更されるたびにトランザクションが開始され、すべての「j」が完了するとトランザクションが終了します。 リーリー

データはチャンクに分けてファイルに書き込まれ、RAM には 1 つのデータ チャンクだけが存在するはずだと思います。

しかし、実行中、データはファイルに保存されず、RAM は充填され続けます。つまり、最初と 2 番目のコード オプションの実行に違いはありません。

トランザクションの「コミット」が呼び出されたときに、データをファイルに保存し、RAMをクリアする必要があると思います。私の何が間違っているのか教えてください。

解決策

PRAGMAcache_size

のパラメータはページ数です (通常、1 ページあたり 4K バイト)。

PRAGMA Cache_size = 1000000;

最大 4GB の RAM がページ キャッシュに割り当てられます。 ページ キャッシュは必要に応じて最大サイズまで割り当てられますが、接続が閉じられるまで解放されません。 多数の行を挿入すると、最終的には異なるページに配置されるため、キャッシュがいっぱいになるまで、ディスクに書き込まれたすべてのページをキャッシュ内に保持することになります。

メモリ消費量を削減したい場合は、値を 1000 (4 MB に相当) などに減らすか、単純に削除します。デフォルトのキャッシュは 2 MB ですが、行を挿入するだけの場合はこれで十分です。

また、COMMIT を呼び出すとき (または十分なキャッシュがない場合はコミットする前でも)、データがディスクに書き込まれることにも注意してください。ただし、Sqlite は、ディスクからの再読み取りを避けるために、後で必要になった場合に備えてコピーをキャッシュに保持します。

以上が大規模なトランザクションを実行する際のメモリ消費量を削減するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート