0

SQLite 3.7 ... データベースを使用するプログラムを開発しました。その中には、データをインポート、チェック、更新するかなり広範な書き込み/読み取りモジュールがあります。このプロセスは私の PC で 14 秒かかり、パフォーマンスに満足しています。

私の PC は 18 ギガの RAM を搭載した Intel i7 です。データベースには何も設定していません。SQLite Expert を使用してデータベースを作成し、テーブルと列を含むデータ構造を作成し、すべてのインデックスが作成されていることを確認しました。言い換えれば、すべてOKです。

その後、プログラム/データベースを他の 2 台のマシンに展開しました。この 14 秒のプロセスは、他のマシンでは 5 分以上かかります。同じプログラム、同じデータ、同じデータベース。マシンは最新で、1 つは先週購入した第 3 世代 Intel i7 で、もう 1 つは非常に高速であるため、ハードウェアは問題になりません。

問題が何であるかを理解していないだけですか?それはデータベース自体ですか?暗号化以外は何も設定していません。私は同じように実行し、14 秒かかることを思い出してください。データベースが私の PC に「最適化」されている可能性がありますか? それで、私が他の人にそれを与えるとき、それは最適化されていませんか?

パフォーマンスを向上させるためにジャーナリングをオフにできることはわかっていますが、それはプロセスを高速化するだけで、問題は解決しません。

どんなアイデアでも大歓迎です。

編集: HDD で XP を実行する 3 ギガの RAM を搭載した 7 歳の Dual Athelon でプログラムをテストしましたが、この手順には 35 秒かかりました。考慮しても許容範囲内です。2台の最新のマシンに5分かかる理由がわかりませんか?リーダーを使用すると遅くなりますが、かなり許容できるため、書き込みの問題であると私は考えています。

4

1 に答える 1

1
  • SQLite の速度は、ディスクがランダムな読み取りと書き込みをどれだけうまく行うかによって最も影響を受けます。SSD は、回転ディスクよりもはるかに優れています。
  • 変更が内部キャッシュをオーバーフローするたびに、それらをディスクに書き込む必要があります。PRAGMA cache_sizeキャッシュをデフォルトの 2 MB 以上に増やすために使用する必要があります。
  • 変更されたデータは、すべてのトランザクションの最後にディスクに書き込まれる必要があります。1 回のトランザクションでできるだけ多くの変更が行われるようにしてください。
  • 処理の大部分が一時テーブルまたはインデックスに関係する場合、速度はメイン ディスクの速度の影響を受けます。マシンに十分な RAM がある場合は、一時データを強制的に RAM に格納できますPRAGMA temp_store
  • Write-Ahead Loggingを有効にする必要があります。

注: デフォルトの SQLite ディストリビューションには暗号化がありません。

于 2012-09-23T09:10:43.767 に答える